Ver código fonte

依赖包升级

zhangjie 2 anos atrás
pai
commit
4c6c2af885
100 arquivos alterados com 12883 adições e 25754 exclusões
  1. 1 1
      .browserslistrc
  2. 8 0
      .editorconfig
  3. 32 25
      .eslintrc.js
  4. 3 3
      babel.config.js
  5. 19 0
      jsconfig.json
  6. 21 20
      package.json
  7. 0 13039
      pnpm-lock.yaml
  8. 5 5
      src/App.vue
  9. 44 44
      src/assets/styles/account.scss
  10. 26 26
      src/assets/styles/adaptive.scss
  11. 507 507
      src/assets/styles/base.scss
  12. 436 436
      src/assets/styles/common-comp.scss
  13. 656 656
      src/assets/styles/element-ui-costom.scss
  14. 341 341
      src/assets/styles/home.scss
  15. 92 92
      src/assets/styles/icons.scss
  16. 11 11
      src/assets/styles/index.scss
  17. 99 99
      src/assets/styles/login.scss
  18. 1088 1088
      src/assets/styles/pages.scss
  19. 82 82
      src/assets/styles/paper-approve.css
  20. 42 42
      src/assets/styles/variables.scss
  21. 60 60
      src/components/MoreText.vue
  22. 247 247
      src/components/SimpleImagePreview.vue
  23. 161 164
      src/components/UploadButton.vue
  24. 127 130
      src/components/UploadFetchFile.vue
  25. 105 105
      src/components/UploadFileDialog.vue
  26. 199 202
      src/components/UploadFileView.vue
  27. 15 15
      src/components/ViewFooter.vue
  28. 7 7
      src/components/base/CollegeSelect.vue
  29. 96 96
      src/components/base/EcsExamSelect.vue
  30. 7 7
      src/components/base/ExamTypeSelect.vue
  31. 77 77
      src/components/base/SchoolSelect.vue
  32. 97 97
      src/components/base/SemesterSelect.vue
  33. 47 47
      src/components/common/CascaderSplit/CascaderSplit.vue
  34. 90 90
      src/components/common/CascaderSplit/LevelOne.vue
  35. 102 102
      src/components/common/CascaderSplit/LevelTwo.vue
  36. 18 18
      src/components/common/CascaderSplit/com-func.js
  37. 99 101
      src/components/common/DimensionTreeTable/DimensionTreeTable.vue
  38. 2 2
      src/components/common/DimensionTreeTable/index.js
  39. 92 92
      src/components/common/DimensionTreeTable/intro.md
  40. 415 418
      src/components/common/ImageEditUpload/ImageEditUpload.vue
  41. 2 2
      src/components/common/ImageEditUpload/index.js
  42. 55 55
      src/components/common/ImageEditUpload/intro.md
  43. 322 322
      src/components/common/ImageListUpload/ImageListUpload.vue
  44. 2 2
      src/components/common/ImageListUpload/index.js
  45. 47 47
      src/components/common/ImageListUpload/intro.md
  46. 312 312
      src/components/common/ImagePreview/ImagePreview.vue
  47. 2 2
      src/components/common/ImagePreview/index.js
  48. 51 51
      src/components/common/ImagePreview/move-ele.js
  49. 187 190
      src/components/common/ImportFile/ImportFile.vue
  50. 2 2
      src/components/common/ImportFile/index.js
  51. 74 74
      src/components/common/ImportFile/intro.md
  52. 72 72
      src/components/common/LabelFilter/LabelFilter.vue
  53. 205 205
      src/components/common/LabelFilter/LabelSelect.vue
  54. 281 283
      src/components/common/RichTextEditor/RichTextEditor.vue
  55. 2 2
      src/components/common/RichTextEditor/index.js
  56. 104 104
      src/components/common/RichTextEditor/intro.md
  57. 26 28
      src/components/common/StepsProgress/StepFour.vue
  58. 26 28
      src/components/common/StepsProgress/StepOne.vue
  59. 26 28
      src/components/common/StepsProgress/StepThree.vue
  60. 26 28
      src/components/common/StepsProgress/StepTwo.vue
  61. 126 126
      src/components/common/StepsProgress/StepsProgress.vue
  62. 85 82
      src/components/common/utils/ajax.js
  63. 6 6
      src/config.js
  64. 20 20
      src/constants/app.js
  65. 31 31
      src/constants/datePickerOptions.js
  66. 48 48
      src/constants/enumerate.js
  67. 107 107
      src/constants/menus-data.js
  68. 30 30
      src/constants/privilege.js
  69. 28 28
      src/main.js
  70. 23 23
      src/mixins/common.js
  71. 2 2
      src/modules/admin/api.js
  72. 4 4
      src/modules/admin/router.js
  73. 87 87
      src/modules/admin/views/AuthSet.vue
  74. 141 130
      src/modules/base/api.js
  75. 8 8
      src/modules/base/components/DataTaskDialog.vue
  76. 118 118
      src/modules/base/components/ModifyExamType.vue
  77. 119 119
      src/modules/base/components/ModifySemester.vue
  78. 180 180
      src/modules/base/components/ModifyTask.vue
  79. 205 205
      src/modules/base/components/ModifyUser.vue
  80. 140 140
      src/modules/base/components/SignDownloadData.vue
  81. 2034 2034
      src/modules/base/components/privilege/navs.json
  82. 58 58
      src/modules/base/router.js
  83. 144 0
      src/modules/base/views/AssignmentCalculate.vue
  84. 154 154
      src/modules/base/views/BusinessDataManage.vue
  85. 8 8
      src/modules/base/views/CourseLinkManage.vue
  86. 6 6
      src/modules/base/views/DataReturnManage.vue
  87. 205 205
      src/modules/base/views/DownloadManage.vue
  88. 7 7
      src/modules/base/views/EcsDataManage.vue
  89. 122 122
      src/modules/base/views/ExamTypeManage.vue
  90. 122 122
      src/modules/base/views/SemesterManage.vue
  91. 162 162
      src/modules/base/views/TimeTaskManage.vue
  92. 228 228
      src/modules/base/views/UserManage.vue
  93. 36 36
      src/modules/login/api.js
  94. 85 85
      src/modules/login/fetchSmsMixins.js
  95. 38 38
      src/modules/login/router.js
  96. 145 145
      src/modules/login/views/ForgetPwd.vue
  97. 118 118
      src/modules/login/views/Login.vue
  98. 25 25
      src/modules/login/views/LoginHome.vue
  99. 268 268
      src/modules/login/views/ResetPwd.vue
  100. 10 8
      src/modules/login/views/SelectSchool.vue

+ 1 - 1
.browserslistrc

@@ -1,3 +1,3 @@
 > 1%
 last 2 versions
-not ie <= 8
+not dead

+ 8 - 0
.editorconfig

@@ -0,0 +1,8 @@
+# http://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf

+ 32 - 25
.eslintrc.js

@@ -1,25 +1,32 @@
-module.exports = {
-  root: true,
-  env: {
-    node: true
-  },
-  extends: ['plugin:vue/essential', '@vue/prettier'],
-  rules: {
-    'no-console': process.env.NODE_ENV === 'production' ? 'off' : 'off',
-    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
-    'no-unused-vars': [
-      'error',
-      { vars: 'all', args: 'none', ignoreRestSiblings: false }
-    ],
-    'vue/no-parsing-error': [2, { 'x-invalid-end-tag': false }],
-    'vue/no-use-v-if-with-v-for': [
-      'error',
-      {
-        allowUsingIterationVar: true
-      }
-    ]
-  },
-  parserOptions: {
-    parser: 'babel-eslint'
-  }
-}
+module.exports = {
+  root: true,
+  env: {
+    node: true,
+  },
+  extends: [
+    "plugin:vue/essential",
+    "eslint:recommended",
+    "plugin:prettier/recommended",
+  ],
+  parserOptions: {
+    parser: "@babel/eslint-parser",
+  },
+  rules: {
+    "no-console": "off",
+    "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off",
+    "vue/multi-word-component-names": "off",
+    "vue/no-mutating-props": "off",
+    "no-unused-vars": [
+      "error",
+      { vars: "all", args: "none", ignoreRestSiblings: false },
+    ],
+    "vue/no-parsing-error": [2, { "x-invalid-end-tag": false }],
+    "vue/no-use-v-if-with-v-for": [
+      "error",
+      {
+        allowUsingIterationVar: true,
+      },
+    ],
+  },
+  ignorePatterns: ["public/"],
+};

+ 3 - 3
babel.config.js

@@ -1,3 +1,3 @@
-module.exports = {
-  presets: ["@vue/app"]
-};
+module.exports = {
+  presets: ["@vue/cli-plugin-babel/preset"],
+};

+ 19 - 0
jsconfig.json

@@ -0,0 +1,19 @@
+{
+  "compilerOptions": {
+    "target": "es5",
+    "module": "esnext",
+    "baseUrl": "./",
+    "moduleResolution": "node",
+    "paths": {
+      "@/*": [
+        "src/*"
+      ]
+    },
+    "lib": [
+      "esnext",
+      "dom",
+      "dom.iterable",
+      "scripthost"
+    ]
+  }
+}

+ 21 - 20
package.json

@@ -1,6 +1,6 @@
 {
   "name": "eds-web",
-  "version": "1.0.2",
+  "version": "1.0.3",
   "scripts": {
     "start": "npm run serve",
     "serve": "vue-cli-service serve",
@@ -18,28 +18,29 @@
     "js-md5": "^0.7.3",
     "jsbarcode": "^3.11.3",
     "qs": "^6.11.0",
-    "vue": "^2.6.11",
+    "vue": "^2.6.14",
     "vue-ls": "^3.2.2",
-    "vue-router": "^3.2.0",
-    "vuex": "^3.4.0"
+    "vue-router": "^3.5.1",
+    "vuex": "^3.6.2"
   },
   "devDependencies": {
-    "@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/eslint-config-prettier": "^6.0.0",
-    "babel-eslint": "^10.1.0",
-    "eslint": "^6.7.2",
-    "eslint-plugin-prettier": "^3.1.3",
-    "eslint-plugin-vue": "^6.2.2",
-    "lint-staged": "^9.5.0",
-    "prettier": "^1.19.1",
-    "sass": "^1.26.5",
-    "sass-loader": "^8.0.2",
+    "@babel/core": "^7.12.16",
+    "@babel/eslint-parser": "^7.12.16",
+    "@vue/cli-plugin-babel": "~5.0.0",
+    "@vue/cli-plugin-eslint": "~5.0.0",
+    "@vue/cli-plugin-router": "~5.0.0",
+    "@vue/cli-plugin-vuex": "~5.0.0",
+    "@vue/cli-service": "~5.0.0",
+    "eslint": "^7.32.0",
+    "eslint-config-prettier": "^8.3.0",
+    "eslint-plugin-prettier": "^4.0.0",
+    "eslint-plugin-vue": "^8.0.3",
+    "lint-staged": "^11.1.2",
+    "prettier": "^2.4.1",
+    "sass": "^1.32.7",
+    "sass-loader": "^12.0.0",
     "terser-webpack-plugin": "^1.2.3",
-    "vue-template-compiler": "^2.6.11"
+    "vue-template-compiler": "^2.6.14"
   },
   "gitHooks": {
     "pre-commit": "lint-staged"
@@ -50,4 +51,4 @@
       "git add"
     ]
   }
-}
+}

+ 0 - 13039
pnpm-lock.yaml

@@ -1,13039 +0,0 @@
-lockfileVersion: 5.4
-
-specifiers:
-  '@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/eslint-config-prettier': ^6.0.0
-  axios: ^0.18.0
-  babel-eslint: ^10.1.0
-  core-js: ^3.6.5
-  cropperjs: ^1.5.1
-  crypto-js: ^4.0.0
-  deepmerge: ^4.2.2
-  element-ui: ^2.14.1
-  eslint: ^6.7.2
-  eslint-plugin-prettier: ^3.1.3
-  eslint-plugin-vue: ^6.2.2
-  js-md5: ^0.7.3
-  jsbarcode: ^3.11.3
-  lint-staged: ^9.5.0
-  prettier: ^1.19.1
-  qs: ^6.11.0
-  sass: ^1.26.5
-  sass-loader: ^8.0.2
-  terser-webpack-plugin: ^1.2.3
-  vue: ^2.6.11
-  vue-ls: ^3.2.2
-  vue-router: ^3.2.0
-  vue-template-compiler: ^2.6.11
-  vuex: ^3.4.0
-
-dependencies:
-  axios: registry.npmmirror.com/axios/0.18.1
-  core-js: registry.npmmirror.com/core-js/3.26.0
-  cropperjs: registry.npmmirror.com/cropperjs/1.5.12
-  crypto-js: registry.npmmirror.com/crypto-js/4.1.1
-  deepmerge: registry.npmmirror.com/deepmerge/4.2.2
-  element-ui: registry.npmmirror.com/element-ui/2.15.10_vue@2.7.13
-  js-md5: registry.npmmirror.com/js-md5/0.7.3
-  jsbarcode: registry.npmmirror.com/jsbarcode/3.11.5
-  qs: registry.npmmirror.com/qs/6.11.0
-  vue: registry.npmmirror.com/vue/2.7.13
-  vue-ls: registry.npmmirror.com/vue-ls/3.2.2
-  vue-router: registry.npmmirror.com/vue-router/3.6.5_vue@2.7.13
-  vuex: registry.npmmirror.com/vuex/3.6.2_vue@2.7.13
-
-devDependencies:
-  '@vue/cli-plugin-babel': registry.npmmirror.com/@vue/cli-plugin-babel/4.5.19_b3cd62ule6bn6nli7qbj7fitry
-  '@vue/cli-plugin-eslint': registry.npmmirror.com/@vue/cli-plugin-eslint/4.5.19_fepo2kslcuyry2fkxxpiwlhxb4
-  '@vue/cli-plugin-router': registry.npmmirror.com/@vue/cli-plugin-router/4.5.19_@vue+cli-service@4.5.19
-  '@vue/cli-plugin-vuex': registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.19_@vue+cli-service@4.5.19
-  '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.19_jlgjl4kly3qnzf3zpopaihjouy
-  '@vue/eslint-config-prettier': registry.npmmirror.com/@vue/eslint-config-prettier/6.0.0_ns5hsxkay6aet6bcrxsjzqtky4
-  babel-eslint: registry.npmmirror.com/babel-eslint/10.1.0_eslint@6.8.0
-  eslint: registry.npmmirror.com/eslint/6.8.0
-  eslint-plugin-prettier: registry.npmmirror.com/eslint-plugin-prettier/3.4.1_3bzozwyml2ynmd3jiqxkfjk2we
-  eslint-plugin-vue: registry.npmmirror.com/eslint-plugin-vue/6.2.2_eslint@6.8.0
-  lint-staged: registry.npmmirror.com/lint-staged/9.5.0
-  prettier: registry.npmmirror.com/prettier/1.19.1
-  sass: registry.npmmirror.com/sass/1.55.0
-  sass-loader: registry.npmmirror.com/sass-loader/8.0.2_sass@1.55.0
-  terser-webpack-plugin: registry.npmmirror.com/terser-webpack-plugin/1.4.5
-  vue-template-compiler: registry.npmmirror.com/vue-template-compiler/2.7.13
-
-packages:
-
-  registry.npmmirror.com/@achrinza/node-ipc/9.2.2:
-    resolution: {integrity: sha512-b90U39dx0cU6emsOvy5hxU4ApNXnE3+Tuo8XQZfiKTGelDwpMwBVgBP7QX6dGTcJgu/miyJuNJ/2naFBliNWEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.2.tgz}
-    name: '@achrinza/node-ipc'
-    version: 9.2.2
-    engines: {node: 8 || 10 || 12 || 14 || 16 || 17}
-    dependencies:
-      '@node-ipc/js-queue': registry.npmmirror.com/@node-ipc/js-queue/2.0.3
-      event-pubsub: registry.npmmirror.com/event-pubsub/4.3.0
-      js-message: registry.npmmirror.com/js-message/1.0.7
-    dev: true
-
-  registry.npmmirror.com/@ampproject/remapping/2.2.0:
-    resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz}
-    name: '@ampproject/remapping'
-    version: 2.2.0
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1
-      '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17
-    dev: true
-
-  registry.npmmirror.com/@babel/code-frame/7.18.6:
-    resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz}
-    name: '@babel/code-frame'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/highlight': registry.npmmirror.com/@babel/highlight/7.18.6
-    dev: true
-
-  registry.npmmirror.com/@babel/compat-data/7.20.1:
-    resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.20.1.tgz}
-    name: '@babel/compat-data'
-    version: 7.20.1
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/@babel/core/7.19.6:
-    resolution: {integrity: sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/core/-/core-7.19.6.tgz}
-    name: '@babel/core'
-    version: 7.19.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@ampproject/remapping': registry.npmmirror.com/@ampproject/remapping/2.2.0
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      '@babel/generator': registry.npmmirror.com/@babel/generator/7.20.1
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.19.6
-      '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.19.6
-      '@babel/helpers': registry.npmmirror.com/@babel/helpers/7.20.1
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.1
-      '@babel/template': registry.npmmirror.com/@babel/template/7.18.10
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.1
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-      convert-source-map: registry.npmmirror.com/convert-source-map/1.9.0
-      debug: registry.npmmirror.com/debug/4.3.4
-      gensync: registry.npmmirror.com/gensync/1.0.0-beta.2
-      json5: registry.npmmirror.com/json5/2.2.1
-      semver: registry.npmmirror.com/semver/6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/generator/7.20.1:
-    resolution: {integrity: sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/generator/-/generator-7.20.1.tgz}
-    name: '@babel/generator'
-    version: 7.20.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-      '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2
-      jsesc: registry.npmmirror.com/jsesc/2.5.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6:
-    resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz}
-    name: '@babel/helper-annotate-as-pure'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/7.18.9:
-    resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz}
-    name: '@babel/helper-builder-binary-assignment-operator-visitor'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-explode-assignable-expression': registry.npmmirror.com/@babel/helper-explode-assignable-expression/7.18.6
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz}
-    id: registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0
-    name: '@babel/helper-compilation-targets'
-    version: 7.20.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.20.1
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-validator-option': registry.npmmirror.com/@babel/helper-validator-option/7.18.6
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      semver: registry.npmmirror.com/semver/6.3.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz}
-    id: registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.19.0
-    name: '@babel/helper-create-class-features-plugin'
-    version: 7.19.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0
-      '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.18.9
-      '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6
-      '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.19.1
-      '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz}
-    id: registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.19.0
-    name: '@babel/helper-create-regexp-features-plugin'
-    version: 7.19.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6
-      regexpu-core: registry.npmmirror.com/regexpu-core/5.2.1
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.19.6:
-    resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz}
-    id: registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.3
-    name: '@babel/helper-define-polyfill-provider'
-    version: 0.3.3
-    peerDependencies:
-      '@babel/core': ^7.4.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      debug: registry.npmmirror.com/debug/4.3.4
-      lodash.debounce: registry.npmmirror.com/lodash.debounce/4.0.8
-      resolve: registry.npmmirror.com/resolve/1.22.1
-      semver: registry.npmmirror.com/semver/6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9:
-    resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz}
-    name: '@babel/helper-environment-visitor'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-explode-assignable-expression/7.18.6:
-    resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz}
-    name: '@babel/helper-explode-assignable-expression'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-function-name/7.19.0:
-    resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz}
-    name: '@babel/helper-function-name'
-    version: 7.19.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': registry.npmmirror.com/@babel/template/7.18.10
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6:
-    resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz}
-    name: '@babel/helper-hoist-variables'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.18.9:
-    resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz}
-    name: '@babel/helper-member-expression-to-functions'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-module-imports/7.18.6:
-    resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz}
-    name: '@babel/helper-module-imports'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-module-transforms/7.19.6:
-    resolution: {integrity: sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz}
-    name: '@babel/helper-module-transforms'
-    version: 7.19.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6
-      '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.19.4
-      '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6
-      '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
-      '@babel/template': registry.npmmirror.com/@babel/template/7.18.10
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.1
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6:
-    resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz}
-    name: '@babel/helper-optimise-call-expression'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0:
-    resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz}
-    name: '@babel/helper-plugin-utils'
-    version: 7.19.0
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.18.9
-    name: '@babel/helper-remap-async-to-generator'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-wrap-function': registry.npmmirror.com/@babel/helper-wrap-function/7.19.0
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-replace-supers/7.19.1:
-    resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz}
-    name: '@babel/helper-replace-supers'
-    version: 7.19.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.18.9
-      '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.1
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-simple-access/7.19.4:
-    resolution: {integrity: sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz}
-    name: '@babel/helper-simple-access'
-    version: 7.19.4
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.20.0:
-    resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz}
-    name: '@babel/helper-skip-transparent-expression-wrappers'
-    version: 7.20.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6:
-    resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz}
-    name: '@babel/helper-split-export-declaration'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-string-parser/7.19.4:
-    resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz}
-    name: '@babel/helper-string-parser'
-    version: 7.19.4
-    engines: {node: '>=6.9.0'}
-
-  registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1:
-    resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz}
-    name: '@babel/helper-validator-identifier'
-    version: 7.19.1
-    engines: {node: '>=6.9.0'}
-
-  registry.npmmirror.com/@babel/helper-validator-option/7.18.6:
-    resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz}
-    name: '@babel/helper-validator-option'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-wrap-function/7.19.0:
-    resolution: {integrity: sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz}
-    name: '@babel/helper-wrap-function'
-    version: 7.19.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0
-      '@babel/template': registry.npmmirror.com/@babel/template/7.18.10
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.1
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helpers/7.20.1:
-    resolution: {integrity: sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helpers/-/helpers-7.20.1.tgz}
-    name: '@babel/helpers'
-    version: 7.20.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': registry.npmmirror.com/@babel/template/7.18.10
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.1
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/highlight/7.18.6:
-    resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz}
-    name: '@babel/highlight'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      js-tokens: registry.npmmirror.com/js-tokens/4.0.0
-    dev: true
-
-  registry.npmmirror.com/@babel/parser/7.20.1:
-    resolution: {integrity: sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.20.1.tgz}
-    name: '@babel/parser'
-    version: 7.20.1
-    engines: {node: '>=6.0.0'}
-    hasBin: true
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-
-  registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6
-    name: '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9
-    name: '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.13.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.20.0
-      '@babel/plugin-proposal-optional-chaining': registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.20.1_@babel+core@7.19.6:
-    resolution: {integrity: sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.20.1
-    name: '@babel/plugin-proposal-async-generator-functions'
-    version: 7.20.1
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-remap-async-to-generator': registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-syntax-async-generators': registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.19.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.18.6
-    name: '@babel/plugin-proposal-class-properties'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.18.6
-    name: '@babel/plugin-proposal-class-static-block'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.12.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-syntax-class-static-block': registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.19.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-decorators/7.20.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-vnuRRS20ygSxclEYikHzVrP9nZDFXaSzvJxGLQNAiBX041TmhS4hOUHWNIpq/q4muENuEP9XPJFXTNFejhemkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-decorators/7.20.0
-    name: '@babel/plugin-proposal-decorators'
-    version: 7.20.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.19.1
-      '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6
-      '@babel/plugin-syntax-decorators': registry.npmmirror.com/@babel/plugin-syntax-decorators/7.19.0_@babel+core@7.19.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.18.6
-    name: '@babel/plugin-proposal-dynamic-import'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-syntax-dynamic-import': registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.18.9
-    name: '@babel/plugin-proposal-export-namespace-from'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-syntax-export-namespace-from': registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.18.6
-    name: '@babel/plugin-proposal-json-strings'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-syntax-json-strings': registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.18.9
-    name: '@babel/plugin-proposal-logical-assignment-operators'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-syntax-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.18.6
-    name: '@babel/plugin-proposal-nullish-coalescing-operator'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.18.6
-    name: '@babel/plugin-proposal-numeric-separator'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-syntax-numeric-separator': registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.19.4_@babel+core@7.19.6:
-    resolution: {integrity: sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.19.4
-    name: '@babel/plugin-proposal-object-rest-spread'
-    version: 7.19.4
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.20.1
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-syntax-object-rest-spread': registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.19.6
-      '@babel/plugin-transform-parameters': registry.npmmirror.com/@babel/plugin-transform-parameters/7.20.1_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.18.6
-    name: '@babel/plugin-proposal-optional-catch-binding'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-syntax-optional-catch-binding': registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.18.9
-    name: '@babel/plugin-proposal-optional-chaining'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.20.0
-      '@babel/plugin-syntax-optional-chaining': registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.18.6
-    name: '@babel/plugin-proposal-private-methods'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.18.6
-    name: '@babel/plugin-proposal-private-property-in-object'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6
-      '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-syntax-private-property-in-object': registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.19.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.18.6
-    name: '@babel/plugin-proposal-unicode-property-regex'
-    version: 7.18.6
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.19.6:
-    resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4
-    name: '@babel/plugin-syntax-async-generators'
-    version: 7.8.4
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.19.6:
-    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13
-    name: '@babel/plugin-syntax-class-properties'
-    version: 7.12.13
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.19.6:
-    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5
-    name: '@babel/plugin-syntax-class-static-block'
-    version: 7.14.5
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-decorators/7.19.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-decorators/7.19.0
-    name: '@babel/plugin-syntax-decorators'
-    version: 7.19.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.19.6:
-    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3
-    name: '@babel/plugin-syntax-dynamic-import'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.19.6:
-    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3
-    name: '@babel/plugin-syntax-export-namespace-from'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-import-assertions/7.20.0
-    name: '@babel/plugin-syntax-import-assertions'
-    version: 7.20.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.19.6:
-    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3
-    name: '@babel/plugin-syntax-json-strings'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6
-    name: '@babel/plugin-syntax-jsx'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.19.6:
-    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4
-    name: '@babel/plugin-syntax-logical-assignment-operators'
-    version: 7.10.4
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.19.6:
-    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3
-    name: '@babel/plugin-syntax-nullish-coalescing-operator'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.19.6:
-    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4
-    name: '@babel/plugin-syntax-numeric-separator'
-    version: 7.10.4
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.19.6:
-    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3
-    name: '@babel/plugin-syntax-object-rest-spread'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.19.6:
-    resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3
-    name: '@babel/plugin-syntax-optional-catch-binding'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.19.6:
-    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3
-    name: '@babel/plugin-syntax-optional-chaining'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.19.6:
-    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5
-    name: '@babel/plugin-syntax-private-property-in-object'
-    version: 7.14.5
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.19.6:
-    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5
-    name: '@babel/plugin-syntax-top-level-await'
-    version: 7.14.5
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.18.6
-    name: '@babel/plugin-transform-arrow-functions'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.18.6
-    name: '@babel/plugin-transform-async-to-generator'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-remap-async-to-generator': registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.19.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.18.6
-    name: '@babel/plugin-transform-block-scoped-functions'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.20.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-sXOohbpHZSk7GjxK9b3dKB7CfqUD5DwOH+DggKzOQ7TXYP+RCSbRykfjQmn/zq+rBjycVRtLf9pYhAaEJA786w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.20.0
-    name: '@babel/plugin-transform-block-scoping'
-    version: 7.20.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-classes/7.19.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-classes/7.19.0
-    name: '@babel/plugin-transform-classes'
-    version: 7.19.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.19.6
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0
-      '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.19.1
-      '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6
-      globals: registry.npmmirror.com/globals/11.12.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.18.9
-    name: '@babel/plugin-transform-computed-properties'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-destructuring/7.20.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-1dIhvZfkDVx/zn2S1aFwlruspTt4189j7fEkH0Y0VyuDM6bQt7bD6kLcz3l4IlLG+e5OReaBz9ROAbttRtUHqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-destructuring/7.20.0
-    name: '@babel/plugin-transform-destructuring'
-    version: 7.20.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.18.6
-    name: '@babel/plugin-transform-dotall-regex'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.18.9
-    name: '@babel/plugin-transform-duplicate-keys'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.18.6
-    name: '@babel/plugin-transform-exponentiation-operator'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-builder-binary-assignment-operator-visitor': registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/7.18.9
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-for-of/7.18.8_@babel+core@7.19.6:
-    resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-for-of/7.18.8
-    name: '@babel/plugin-transform-for-of'
-    version: 7.18.8
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-function-name/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-function-name/7.18.9
-    name: '@babel/plugin-transform-function-name'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.19.6
-      '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-literals/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-literals/7.18.9
-    name: '@babel/plugin-transform-literals'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.18.6
-    name: '@babel/plugin-transform-member-expression-literals'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.19.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.19.6
-    name: '@babel/plugin-transform-modules-amd'
-    version: 7.19.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.19.6
-    name: '@babel/plugin-transform-modules-commonjs'
-    version: 7.19.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.19.4
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.19.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.19.6
-    name: '@babel/plugin-transform-modules-systemjs'
-    version: 7.19.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6
-      '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.18.6
-    name: '@babel/plugin-transform-modules-umd'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.19.6:
-    resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.19.1
-    name: '@babel/plugin-transform-named-capturing-groups-regex'
-    version: 7.19.1
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-new-target/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-new-target/7.18.6
-    name: '@babel/plugin-transform-new-target'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-object-super/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-object-super/7.18.6
-    name: '@babel/plugin-transform-object-super'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.19.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-parameters/7.20.1_@babel+core@7.19.6:
-    resolution: {integrity: sha512-nDvKLrAvl+kf6BOy1UJ3MGwzzfTMgppxwiD2Jb4LO3xjYyZq30oQzDNJbCQpMdG9+j2IXHoiMrw5Cm/L6ZoxXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.1.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-parameters/7.20.1
-    name: '@babel/plugin-transform-parameters'
-    version: 7.20.1
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-property-literals/7.18.6
-    name: '@babel/plugin-transform-property-literals'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-regenerator/7.18.6
-    name: '@babel/plugin-transform-regenerator'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      regenerator-transform: registry.npmmirror.com/regenerator-transform/0.15.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.18.6
-    name: '@babel/plugin-transform-reserved-words'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-runtime/7.19.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-runtime/7.19.6
-    name: '@babel/plugin-transform-runtime'
-    version: 7.19.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      babel-plugin-polyfill-corejs2: registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.19.6
-      babel-plugin-polyfill-corejs3: registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.19.6
-      babel-plugin-polyfill-regenerator: registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.19.6
-      semver: registry.npmmirror.com/semver/6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.18.6
-    name: '@babel/plugin-transform-shorthand-properties'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-spread/7.19.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-spread/7.19.0
-    name: '@babel/plugin-transform-spread'
-    version: 7.19.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.18.6
-    name: '@babel/plugin-transform-sticky-regex'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-template-literals/7.18.9
-    name: '@babel/plugin-transform-template-literals'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.19.6:
-    resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.18.9
-    name: '@babel/plugin-transform-typeof-symbol'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.19.6:
-    resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.18.10
-    name: '@babel/plugin-transform-unicode-escapes'
-    version: 7.18.10
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.19.6:
-    resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.18.6
-    name: '@babel/plugin-transform-unicode-regex'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-    dev: true
-
-  registry.npmmirror.com/@babel/preset-env/7.19.4_@babel+core@7.19.6:
-    resolution: {integrity: sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.19.4.tgz}
-    id: registry.npmmirror.com/@babel/preset-env/7.19.4
-    name: '@babel/preset-env'
-    version: 7.19.4
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.20.1
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/helper-validator-option': registry.npmmirror.com/@babel/helper-validator-option/7.18.6
-      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-proposal-async-generator-functions': registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.20.1_@babel+core@7.19.6
-      '@babel/plugin-proposal-class-properties': registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-proposal-class-static-block': registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-proposal-dynamic-import': registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-proposal-export-namespace-from': registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-proposal-json-strings': registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-proposal-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-proposal-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-proposal-numeric-separator': registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-proposal-object-rest-spread': registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.19.4_@babel+core@7.19.6
-      '@babel/plugin-proposal-optional-catch-binding': registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-proposal-optional-chaining': registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-proposal-private-methods': registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-proposal-private-property-in-object': registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-proposal-unicode-property-regex': registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-syntax-async-generators': registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.19.6
-      '@babel/plugin-syntax-class-properties': registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.19.6
-      '@babel/plugin-syntax-class-static-block': registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.19.6
-      '@babel/plugin-syntax-dynamic-import': registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.19.6
-      '@babel/plugin-syntax-export-namespace-from': registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.19.6
-      '@babel/plugin-syntax-import-assertions': registry.npmmirror.com/@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.19.6
-      '@babel/plugin-syntax-json-strings': registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.19.6
-      '@babel/plugin-syntax-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.19.6
-      '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.19.6
-      '@babel/plugin-syntax-numeric-separator': registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.19.6
-      '@babel/plugin-syntax-object-rest-spread': registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.19.6
-      '@babel/plugin-syntax-optional-catch-binding': registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.19.6
-      '@babel/plugin-syntax-optional-chaining': registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.19.6
-      '@babel/plugin-syntax-private-property-in-object': registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.19.6
-      '@babel/plugin-syntax-top-level-await': registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.19.6
-      '@babel/plugin-transform-arrow-functions': registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-async-to-generator': registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-block-scoped-functions': registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-block-scoping': registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.20.0_@babel+core@7.19.6
-      '@babel/plugin-transform-classes': registry.npmmirror.com/@babel/plugin-transform-classes/7.19.0_@babel+core@7.19.6
-      '@babel/plugin-transform-computed-properties': registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-transform-destructuring': registry.npmmirror.com/@babel/plugin-transform-destructuring/7.20.0_@babel+core@7.19.6
-      '@babel/plugin-transform-dotall-regex': registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-duplicate-keys': registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-transform-exponentiation-operator': registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-for-of': registry.npmmirror.com/@babel/plugin-transform-for-of/7.18.8_@babel+core@7.19.6
-      '@babel/plugin-transform-function-name': registry.npmmirror.com/@babel/plugin-transform-function-name/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-transform-literals': registry.npmmirror.com/@babel/plugin-transform-literals/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-transform-member-expression-literals': registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-modules-amd': registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.19.6_@babel+core@7.19.6
-      '@babel/plugin-transform-modules-commonjs': registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.19.6
-      '@babel/plugin-transform-modules-systemjs': registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.19.6_@babel+core@7.19.6
-      '@babel/plugin-transform-modules-umd': registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-named-capturing-groups-regex': registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.19.6
-      '@babel/plugin-transform-new-target': registry.npmmirror.com/@babel/plugin-transform-new-target/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-object-super': registry.npmmirror.com/@babel/plugin-transform-object-super/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-parameters': registry.npmmirror.com/@babel/plugin-transform-parameters/7.20.1_@babel+core@7.19.6
-      '@babel/plugin-transform-property-literals': registry.npmmirror.com/@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-regenerator': registry.npmmirror.com/@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-reserved-words': registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-shorthand-properties': registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-spread': registry.npmmirror.com/@babel/plugin-transform-spread/7.19.0_@babel+core@7.19.6
-      '@babel/plugin-transform-sticky-regex': registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-template-literals': registry.npmmirror.com/@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-transform-typeof-symbol': registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.19.6
-      '@babel/plugin-transform-unicode-escapes': registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.19.6
-      '@babel/plugin-transform-unicode-regex': registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.19.6
-      '@babel/preset-modules': registry.npmmirror.com/@babel/preset-modules/0.1.5_@babel+core@7.19.6
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-      babel-plugin-polyfill-corejs2: registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.19.6
-      babel-plugin-polyfill-corejs3: registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.19.6
-      babel-plugin-polyfill-regenerator: registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.19.6
-      core-js-compat: registry.npmmirror.com/core-js-compat/3.26.0
-      semver: registry.npmmirror.com/semver/6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/preset-modules/0.1.5_@babel+core@7.19.6:
-    resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz}
-    id: registry.npmmirror.com/@babel/preset-modules/0.1.5
-    name: '@babel/preset-modules'
-    version: 0.1.5
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.19.0
-      '@babel/plugin-proposal-unicode-property-regex': registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-dotall-regex': registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.19.6
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-      esutils: registry.npmmirror.com/esutils/2.0.3
-    dev: true
-
-  registry.npmmirror.com/@babel/runtime/7.20.1:
-    resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.1.tgz}
-    name: '@babel/runtime'
-    version: 7.20.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.10
-    dev: true
-
-  registry.npmmirror.com/@babel/template/7.18.10:
-    resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/template/-/template-7.18.10.tgz}
-    name: '@babel/template'
-    version: 7.18.10
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.1
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/traverse/7.20.1:
-    resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/traverse/-/traverse-7.20.1.tgz}
-    name: '@babel/traverse'
-    version: 7.20.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      '@babel/generator': registry.npmmirror.com/@babel/generator/7.20.1
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0
-      '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6
-      '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.1
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-      debug: registry.npmmirror.com/debug/4.3.4
-      globals: registry.npmmirror.com/globals/11.12.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/types/7.20.0:
-    resolution: {integrity: sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.20.0.tgz}
-    name: '@babel/types'
-    version: 7.20.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser/7.19.4
-      '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
-      to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0
-
-  registry.npmmirror.com/@hapi/address/2.1.4:
-    resolution: {integrity: sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hapi/address/-/address-2.1.4.tgz}
-    name: '@hapi/address'
-    version: 2.1.4
-    deprecated: Moved to 'npm install @sideway/address'
-    dev: true
-
-  registry.npmmirror.com/@hapi/bourne/1.3.2:
-    resolution: {integrity: sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hapi/bourne/-/bourne-1.3.2.tgz}
-    name: '@hapi/bourne'
-    version: 1.3.2
-    deprecated: This version has been deprecated and is no longer supported or maintained
-    dev: true
-
-  registry.npmmirror.com/@hapi/hoek/8.5.1:
-    resolution: {integrity: sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hapi/hoek/-/hoek-8.5.1.tgz}
-    name: '@hapi/hoek'
-    version: 8.5.1
-    deprecated: This version has been deprecated and is no longer supported or maintained
-    dev: true
-
-  registry.npmmirror.com/@hapi/joi/15.1.1:
-    resolution: {integrity: sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hapi/joi/-/joi-15.1.1.tgz}
-    name: '@hapi/joi'
-    version: 15.1.1
-    deprecated: Switch to 'npm install joi'
-    dependencies:
-      '@hapi/address': registry.npmmirror.com/@hapi/address/2.1.4
-      '@hapi/bourne': registry.npmmirror.com/@hapi/bourne/1.3.2
-      '@hapi/hoek': registry.npmmirror.com/@hapi/hoek/8.5.1
-      '@hapi/topo': registry.npmmirror.com/@hapi/topo/3.1.6
-    dev: true
-
-  registry.npmmirror.com/@hapi/topo/3.1.6:
-    resolution: {integrity: sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hapi/topo/-/topo-3.1.6.tgz}
-    name: '@hapi/topo'
-    version: 3.1.6
-    deprecated: This version has been deprecated and is no longer supported or maintained
-    dependencies:
-      '@hapi/hoek': registry.npmmirror.com/@hapi/hoek/8.5.1
-    dev: true
-
-  registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/1.0.6_webpack@4.46.0:
-    resolution: {integrity: sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz}
-    id: registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/1.0.6
-    name: '@intervolga/optimize-cssnano-plugin'
-    version: 1.0.6
-    peerDependencies:
-      webpack: ^4.0.0
-    dependencies:
-      cssnano: registry.npmmirror.com/cssnano/4.1.11
-      cssnano-preset-default: registry.npmmirror.com/cssnano-preset-default/4.0.8
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1:
-    resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz}
-    name: '@jridgewell/gen-mapping'
-    version: 0.1.1
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2
-      '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2:
-    resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz}
-    name: '@jridgewell/gen-mapping'
-    version: 0.3.2
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2
-      '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14
-      '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0:
-    resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz}
-    name: '@jridgewell/resolve-uri'
-    version: 3.1.0
-    engines: {node: '>=6.0.0'}
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/set-array/1.1.2:
-    resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz}
-    name: '@jridgewell/set-array'
-    version: 1.1.2
-    engines: {node: '>=6.0.0'}
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14:
-    resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz}
-    name: '@jridgewell/sourcemap-codec'
-    version: 1.4.14
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17:
-    resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz}
-    name: '@jridgewell/trace-mapping'
-    version: 0.3.17
-    dependencies:
-      '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0
-      '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14
-    dev: true
-
-  registry.npmmirror.com/@mrmlnc/readdir-enhanced/2.2.1:
-    resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz}
-    name: '@mrmlnc/readdir-enhanced'
-    version: 2.2.1
-    engines: {node: '>=4'}
-    dependencies:
-      call-me-maybe: registry.npmmirror.com/call-me-maybe/1.0.2
-      glob-to-regexp: registry.npmmirror.com/glob-to-regexp/0.3.0
-    dev: true
-
-  registry.npmmirror.com/@node-ipc/js-queue/2.0.3:
-    resolution: {integrity: sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz}
-    name: '@node-ipc/js-queue'
-    version: 2.0.3
-    engines: {node: '>=1.0.0'}
-    dependencies:
-      easy-stack: registry.npmmirror.com/easy-stack/1.0.1
-    dev: true
-
-  registry.npmmirror.com/@nodelib/fs.scandir/2.1.5:
-    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz}
-    name: '@nodelib/fs.scandir'
-    version: 2.1.5
-    engines: {node: '>= 8'}
-    dependencies:
-      '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5
-      run-parallel: registry.npmmirror.com/run-parallel/1.2.0
-    dev: true
-
-  registry.npmmirror.com/@nodelib/fs.stat/1.1.3:
-    resolution: {integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz}
-    name: '@nodelib/fs.stat'
-    version: 1.1.3
-    engines: {node: '>= 6'}
-    dev: true
-
-  registry.npmmirror.com/@nodelib/fs.stat/2.0.5:
-    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz}
-    name: '@nodelib/fs.stat'
-    version: 2.0.5
-    engines: {node: '>= 8'}
-    dev: true
-
-  registry.npmmirror.com/@nodelib/fs.walk/1.2.8:
-    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz}
-    name: '@nodelib/fs.walk'
-    version: 1.2.8
-    engines: {node: '>= 8'}
-    dependencies:
-      '@nodelib/fs.scandir': registry.npmmirror.com/@nodelib/fs.scandir/2.1.5
-      fastq: registry.npmmirror.com/fastq/1.13.0
-    dev: true
-
-  registry.npmmirror.com/@samverschueren/stream-to-observable/0.3.1_rxjs@6.6.7:
-    resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz}
-    id: registry.npmmirror.com/@samverschueren/stream-to-observable/0.3.1
-    name: '@samverschueren/stream-to-observable'
-    version: 0.3.1
-    engines: {node: '>=6'}
-    peerDependencies:
-      rxjs: '*'
-      zen-observable: '*'
-    peerDependenciesMeta:
-      rxjs:
-        optional: true
-      zen-observable:
-        optional: true
-    dependencies:
-      any-observable: registry.npmmirror.com/any-observable/0.3.0_rxjs@6.6.7
-      rxjs: registry.npmmirror.com/rxjs/6.6.7
-    transitivePeerDependencies:
-      - zenObservable
-    dev: true
-
-  registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/1.8.1_webpack@4.46.0:
-    resolution: {integrity: sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz}
-    id: registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/1.8.1
-    name: '@soda/friendly-errors-webpack-plugin'
-    version: 1.8.1
-    engines: {node: '>=8.0.0'}
-    peerDependencies:
-      webpack: ^4.0.0 || ^5.0.0
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/3.0.0
-      error-stack-parser: registry.npmmirror.com/error-stack-parser/2.1.4
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/@soda/get-current-script/1.0.2:
-    resolution: {integrity: sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz}
-    name: '@soda/get-current-script'
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/@types/body-parser/1.19.2:
-    resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.2.tgz}
-    name: '@types/body-parser'
-    version: 1.19.2
-    dependencies:
-      '@types/connect': registry.npmmirror.com/@types/connect/3.4.35
-      '@types/node': registry.npmmirror.com/@types/node/18.11.9
-    dev: true
-
-  registry.npmmirror.com/@types/connect-history-api-fallback/1.3.5:
-    resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz}
-    name: '@types/connect-history-api-fallback'
-    version: 1.3.5
-    dependencies:
-      '@types/express-serve-static-core': registry.npmmirror.com/@types/express-serve-static-core/4.17.31
-      '@types/node': registry.npmmirror.com/@types/node/18.11.9
-    dev: true
-
-  registry.npmmirror.com/@types/connect/3.4.35:
-    resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/connect/-/connect-3.4.35.tgz}
-    name: '@types/connect'
-    version: 3.4.35
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/18.11.9
-    dev: true
-
-  registry.npmmirror.com/@types/express-serve-static-core/4.17.31:
-    resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz}
-    name: '@types/express-serve-static-core'
-    version: 4.17.31
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/18.11.9
-      '@types/qs': registry.npmmirror.com/@types/qs/6.9.7
-      '@types/range-parser': registry.npmmirror.com/@types/range-parser/1.2.4
-    dev: true
-
-  registry.npmmirror.com/@types/express/4.17.14:
-    resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/express/-/express-4.17.14.tgz}
-    name: '@types/express'
-    version: 4.17.14
-    dependencies:
-      '@types/body-parser': registry.npmmirror.com/@types/body-parser/1.19.2
-      '@types/express-serve-static-core': registry.npmmirror.com/@types/express-serve-static-core/4.17.31
-      '@types/qs': registry.npmmirror.com/@types/qs/6.9.7
-      '@types/serve-static': registry.npmmirror.com/@types/serve-static/1.15.0
-    dev: true
-
-  registry.npmmirror.com/@types/glob/7.2.0:
-    resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz}
-    name: '@types/glob'
-    version: 7.2.0
-    dependencies:
-      '@types/minimatch': registry.npmmirror.com/@types/minimatch/5.1.2
-      '@types/node': registry.npmmirror.com/@types/node/18.11.9
-    dev: true
-
-  registry.npmmirror.com/@types/http-proxy/1.17.9:
-    resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.9.tgz}
-    name: '@types/http-proxy'
-    version: 1.17.9
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/18.11.9
-    dev: true
-
-  registry.npmmirror.com/@types/json-schema/7.0.11:
-    resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz}
-    name: '@types/json-schema'
-    version: 7.0.11
-    dev: true
-
-  registry.npmmirror.com/@types/mime/3.0.1:
-    resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/mime/-/mime-3.0.1.tgz}
-    name: '@types/mime'
-    version: 3.0.1
-    dev: true
-
-  registry.npmmirror.com/@types/minimatch/5.1.2:
-    resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/minimatch/-/minimatch-5.1.2.tgz}
-    name: '@types/minimatch'
-    version: 5.1.2
-    dev: true
-
-  registry.npmmirror.com/@types/minimist/1.2.2:
-    resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz}
-    name: '@types/minimist'
-    version: 1.2.2
-    dev: true
-
-  registry.npmmirror.com/@types/node/18.11.9:
-    resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-18.11.9.tgz}
-    name: '@types/node'
-    version: 18.11.9
-    dev: true
-
-  registry.npmmirror.com/@types/normalize-package-data/2.4.1:
-    resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz}
-    name: '@types/normalize-package-data'
-    version: 2.4.1
-    dev: true
-
-  registry.npmmirror.com/@types/q/1.5.5:
-    resolution: {integrity: sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/q/-/q-1.5.5.tgz}
-    name: '@types/q'
-    version: 1.5.5
-    dev: true
-
-  registry.npmmirror.com/@types/qs/6.9.7:
-    resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz}
-    name: '@types/qs'
-    version: 6.9.7
-    dev: true
-
-  registry.npmmirror.com/@types/range-parser/1.2.4:
-    resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz}
-    name: '@types/range-parser'
-    version: 1.2.4
-    dev: true
-
-  registry.npmmirror.com/@types/serve-static/1.15.0:
-    resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.0.tgz}
-    name: '@types/serve-static'
-    version: 1.15.0
-    dependencies:
-      '@types/mime': registry.npmmirror.com/@types/mime/3.0.1
-      '@types/node': registry.npmmirror.com/@types/node/18.11.9
-    dev: true
-
-  registry.npmmirror.com/@types/source-list-map/0.1.2:
-    resolution: {integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/source-list-map/-/source-list-map-0.1.2.tgz}
-    name: '@types/source-list-map'
-    version: 0.1.2
-    dev: true
-
-  registry.npmmirror.com/@types/tapable/1.0.8:
-    resolution: {integrity: sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/tapable/-/tapable-1.0.8.tgz}
-    name: '@types/tapable'
-    version: 1.0.8
-    dev: true
-
-  registry.npmmirror.com/@types/uglify-js/3.17.1:
-    resolution: {integrity: sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/uglify-js/-/uglify-js-3.17.1.tgz}
-    name: '@types/uglify-js'
-    version: 3.17.1
-    dependencies:
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    dev: true
-
-  registry.npmmirror.com/@types/webpack-dev-server/3.11.6_debug@4.3.4:
-    resolution: {integrity: sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz}
-    id: registry.npmmirror.com/@types/webpack-dev-server/3.11.6
-    name: '@types/webpack-dev-server'
-    version: 3.11.6
-    dependencies:
-      '@types/connect-history-api-fallback': registry.npmmirror.com/@types/connect-history-api-fallback/1.3.5
-      '@types/express': registry.npmmirror.com/@types/express/4.17.14
-      '@types/serve-static': registry.npmmirror.com/@types/serve-static/1.15.0
-      '@types/webpack': registry.npmmirror.com/@types/webpack/4.41.33
-      http-proxy-middleware: registry.npmmirror.com/http-proxy-middleware/1.3.1_debug@4.3.4
-    transitivePeerDependencies:
-      - debug
-    dev: true
-
-  registry.npmmirror.com/@types/webpack-sources/3.2.0:
-    resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz}
-    name: '@types/webpack-sources'
-    version: 3.2.0
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/18.11.9
-      '@types/source-list-map': registry.npmmirror.com/@types/source-list-map/0.1.2
-      source-map: registry.npmmirror.com/source-map/0.7.4
-    dev: true
-
-  registry.npmmirror.com/@types/webpack/4.41.33:
-    resolution: {integrity: sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/webpack/-/webpack-4.41.33.tgz}
-    name: '@types/webpack'
-    version: 4.41.33
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/18.11.9
-      '@types/tapable': registry.npmmirror.com/@types/tapable/1.0.8
-      '@types/uglify-js': registry.npmmirror.com/@types/uglify-js/3.17.1
-      '@types/webpack-sources': registry.npmmirror.com/@types/webpack-sources/3.2.0
-      anymatch: registry.npmmirror.com/anymatch/3.1.2
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/1.4.0:
-    resolution: {integrity: sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz}
-    name: '@vue/babel-helper-vue-jsx-merge-props'
-    version: 1.4.0
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2:
-    resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz}
-    name: '@vue/babel-helper-vue-transform-on'
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.19.6:
-    resolution: {integrity: sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz}
-    id: registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1
-    name: '@vue/babel-plugin-jsx'
-    version: 1.1.1
-    dependencies:
-      '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6
-      '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6
-      '@babel/template': registry.npmmirror.com/@babel/template/7.18.10
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.1
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-      '@vue/babel-helper-vue-transform-on': registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2
-      camelcase: registry.npmmirror.com/camelcase/6.3.0
-      html-tags: registry.npmmirror.com/html-tags/3.2.0
-      svg-tags: registry.npmmirror.com/svg-tags/1.0.0
-    transitivePeerDependencies:
-      - '@babel/core'
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/1.4.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz}
-    id: registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/1.4.0
-    name: '@vue/babel-plugin-transform-vue-jsx'
-    version: 1.4.0
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6
-      '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6
-      '@vue/babel-helper-vue-jsx-merge-props': registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/1.4.0
-      html-tags: registry.npmmirror.com/html-tags/2.0.0
-      lodash.kebabcase: registry.npmmirror.com/lodash.kebabcase/4.1.1
-      svg-tags: registry.npmmirror.com/svg-tags/1.0.0
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-preset-app/4.5.19_core-js@3.26.0+vue@2.7.13:
-    resolution: {integrity: sha512-VCNRiAt2P/bLo09rYt3DLe6xXUMlhJwrvU18Ddd/lYJgC7s8+wvhgYs+MTx4OiAXdu58drGwSBO9SPx7C6J82Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-4.5.19.tgz}
-    id: registry.npmmirror.com/@vue/babel-preset-app/4.5.19
-    name: '@vue/babel-preset-app'
-    version: 4.5.19
-    peerDependencies:
-      core-js: ^3
-      vue: ^2 || ^3.0.0-0
-    peerDependenciesMeta:
-      core-js:
-        optional: true
-      vue:
-        optional: true
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.19.6
-      '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6
-      '@babel/plugin-proposal-class-properties': registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-proposal-decorators': registry.npmmirror.com/@babel/plugin-proposal-decorators/7.20.0_@babel+core@7.19.6
-      '@babel/plugin-syntax-dynamic-import': registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.19.6
-      '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6
-      '@babel/plugin-transform-runtime': registry.npmmirror.com/@babel/plugin-transform-runtime/7.19.6_@babel+core@7.19.6
-      '@babel/preset-env': registry.npmmirror.com/@babel/preset-env/7.19.4_@babel+core@7.19.6
-      '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.20.1
-      '@vue/babel-plugin-jsx': registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.19.6
-      '@vue/babel-preset-jsx': registry.npmmirror.com/@vue/babel-preset-jsx/1.4.0_6dl6k7whpivudzawllhtmuuqsm
-      babel-plugin-dynamic-import-node: registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3
-      core-js: registry.npmmirror.com/core-js/3.26.0
-      core-js-compat: registry.npmmirror.com/core-js-compat/3.26.0
-      semver: registry.npmmirror.com/semver/6.3.0
-      vue: registry.npmmirror.com/vue/2.7.13
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-preset-jsx/1.4.0_6dl6k7whpivudzawllhtmuuqsm:
-    resolution: {integrity: sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz}
-    id: registry.npmmirror.com/@vue/babel-preset-jsx/1.4.0
-    name: '@vue/babel-preset-jsx'
-    version: 1.4.0
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-      vue: '*'
-    peerDependenciesMeta:
-      vue:
-        optional: true
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@vue/babel-helper-vue-jsx-merge-props': registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/1.4.0
-      '@vue/babel-plugin-transform-vue-jsx': registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/1.4.0_@babel+core@7.19.6
-      '@vue/babel-sugar-composition-api-inject-h': registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/1.4.0_@babel+core@7.19.6
-      '@vue/babel-sugar-composition-api-render-instance': registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/1.4.0_@babel+core@7.19.6
-      '@vue/babel-sugar-functional-vue': registry.npmmirror.com/@vue/babel-sugar-functional-vue/1.4.0_@babel+core@7.19.6
-      '@vue/babel-sugar-inject-h': registry.npmmirror.com/@vue/babel-sugar-inject-h/1.4.0_@babel+core@7.19.6
-      '@vue/babel-sugar-v-model': registry.npmmirror.com/@vue/babel-sugar-v-model/1.4.0_@babel+core@7.19.6
-      '@vue/babel-sugar-v-on': registry.npmmirror.com/@vue/babel-sugar-v-on/1.4.0_@babel+core@7.19.6
-      vue: registry.npmmirror.com/vue/2.7.13
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/1.4.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz}
-    id: registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/1.4.0
-    name: '@vue/babel-sugar-composition-api-inject-h'
-    version: 1.4.0
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/1.4.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz}
-    id: registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/1.4.0
-    name: '@vue/babel-sugar-composition-api-render-instance'
-    version: 1.4.0
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-sugar-functional-vue/1.4.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz}
-    id: registry.npmmirror.com/@vue/babel-sugar-functional-vue/1.4.0
-    name: '@vue/babel-sugar-functional-vue'
-    version: 1.4.0
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-sugar-inject-h/1.4.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz}
-    id: registry.npmmirror.com/@vue/babel-sugar-inject-h/1.4.0
-    name: '@vue/babel-sugar-inject-h'
-    version: 1.4.0
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-sugar-v-model/1.4.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz}
-    id: registry.npmmirror.com/@vue/babel-sugar-v-model/1.4.0
-    name: '@vue/babel-sugar-v-model'
-    version: 1.4.0
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6
-      '@vue/babel-helper-vue-jsx-merge-props': registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/1.4.0
-      '@vue/babel-plugin-transform-vue-jsx': registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/1.4.0_@babel+core@7.19.6
-      camelcase: registry.npmmirror.com/camelcase/5.3.1
-      html-tags: registry.npmmirror.com/html-tags/2.0.0
-      svg-tags: registry.npmmirror.com/svg-tags/1.0.0
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-sugar-v-on/1.4.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz}
-    id: registry.npmmirror.com/@vue/babel-sugar-v-on/1.4.0
-    name: '@vue/babel-sugar-v-on'
-    version: 1.4.0
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6
-      '@vue/babel-plugin-transform-vue-jsx': registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/1.4.0_@babel+core@7.19.6
-      camelcase: registry.npmmirror.com/camelcase/5.3.1
-    dev: true
-
-  registry.npmmirror.com/@vue/cli-overlay/4.5.19:
-    resolution: {integrity: sha512-GdxvNSmOw7NHIazCO8gTK+xZbaOmScTtxj6eHVeMbYpDYVPJ+th3VMLWNpw/b6uOjwzzcyKlA5dRQ1DAb+gF/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-4.5.19.tgz}
-    name: '@vue/cli-overlay'
-    version: 4.5.19
-    dev: true
-
-  registry.npmmirror.com/@vue/cli-plugin-babel/4.5.19_b3cd62ule6bn6nli7qbj7fitry:
-    resolution: {integrity: sha512-8ebXzaMW9KNTMAN6+DzkhFsjty1ieqT7hIW5Lbk4v30Qhfjkms7lBWyXPGkoq+wAikXFa1Gnam2xmWOBqDDvWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.19.tgz}
-    id: registry.npmmirror.com/@vue/cli-plugin-babel/4.5.19
-    name: '@vue/cli-plugin-babel'
-    version: 4.5.19
-    peerDependencies:
-      '@vue/cli-service': ^3.0.0 || ^4.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@vue/babel-preset-app': registry.npmmirror.com/@vue/babel-preset-app/4.5.19_core-js@3.26.0+vue@2.7.13
-      '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.19_jlgjl4kly3qnzf3zpopaihjouy
-      '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.19
-      babel-loader: registry.npmmirror.com/babel-loader/8.2.5_q4ydpsrmbqywduja5orgah6fgq
-      cache-loader: registry.npmmirror.com/cache-loader/4.1.0_webpack@4.46.0
-      thread-loader: registry.npmmirror.com/thread-loader/2.1.3_webpack@4.46.0
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    transitivePeerDependencies:
-      - core-js
-      - supports-color
-      - vue
-      - webpack-cli
-      - webpack-command
-    dev: true
-
-  registry.npmmirror.com/@vue/cli-plugin-eslint/4.5.19_fepo2kslcuyry2fkxxpiwlhxb4:
-    resolution: {integrity: sha512-53sa4Pu9j5KajesFlj494CcO8vVo3e3nnZ1CCKjGGnrF90id1rUeepcFfz5XjwfEtbJZp2x/NoX/EZE6zCzSFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.19.tgz}
-    id: registry.npmmirror.com/@vue/cli-plugin-eslint/4.5.19
-    name: '@vue/cli-plugin-eslint'
-    version: 4.5.19
-    peerDependencies:
-      '@vue/cli-service': ^3.0.0 || ^4.0.0-0
-      eslint: '>= 1.6.0 < 7.0.0'
-    dependencies:
-      '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.19_jlgjl4kly3qnzf3zpopaihjouy
-      '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.19
-      eslint: registry.npmmirror.com/eslint/6.8.0
-      eslint-loader: registry.npmmirror.com/eslint-loader/2.2.1_pfvmeq6opgydpezktw7j2dwffi
-      globby: registry.npmmirror.com/globby/9.2.0
-      inquirer: registry.npmmirror.com/inquirer/7.3.3
-      webpack: registry.npmmirror.com/webpack/4.46.0
-      yorkie: registry.npmmirror.com/yorkie/2.0.0
-    transitivePeerDependencies:
-      - supports-color
-      - webpack-cli
-      - webpack-command
-    dev: true
-
-  registry.npmmirror.com/@vue/cli-plugin-router/4.5.19_@vue+cli-service@4.5.19:
-    resolution: {integrity: sha512-3icGzH1IbVYmMMsOwYa0lal/gtvZLebFXdE5hcQJo2mnTwngXGMTyYAzL56EgHBPjbMmRpyj6Iw9k4aVInVX6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.19.tgz}
-    id: registry.npmmirror.com/@vue/cli-plugin-router/4.5.19
-    name: '@vue/cli-plugin-router'
-    version: 4.5.19
-    peerDependencies:
-      '@vue/cli-service': ^3.0.0 || ^4.0.0-0
-    dependencies:
-      '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.19_jlgjl4kly3qnzf3zpopaihjouy
-      '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.19
-    dev: true
-
-  registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.19_@vue+cli-service@4.5.19:
-    resolution: {integrity: sha512-DUmfdkG3pCdkP7Iznd87RfE9Qm42mgp2hcrNcYQYSru1W1gX2dG/JcW8bxmeGSa06lsxi9LEIc/QD1yPajSCZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.19.tgz}
-    id: registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.19
-    name: '@vue/cli-plugin-vuex'
-    version: 4.5.19
-    peerDependencies:
-      '@vue/cli-service': ^3.0.0 || ^4.0.0-0
-    dependencies:
-      '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.19_jlgjl4kly3qnzf3zpopaihjouy
-    dev: true
-
-  registry.npmmirror.com/@vue/cli-service/4.5.19_jlgjl4kly3qnzf3zpopaihjouy:
-    resolution: {integrity: sha512-+Wpvj8fMTCt9ZPOLu5YaLkFCQmB4MrZ26aRmhhKiCQ/4PMoL6mLezfqdt6c+m2htM+1WV5RunRo+0WHl2DfwZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-service/-/cli-service-4.5.19.tgz}
-    id: registry.npmmirror.com/@vue/cli-service/4.5.19
-    name: '@vue/cli-service'
-    version: 4.5.19
-    engines: {node: '>=8'}
-    hasBin: true
-    peerDependencies:
-      '@vue/compiler-sfc': ^3.0.0-beta.14
-      less-loader: '*'
-      pug-plain-loader: '*'
-      raw-loader: '*'
-      sass-loader: '*'
-      stylus-loader: '*'
-      vue-template-compiler: ^2.0.0
-    peerDependenciesMeta:
-      '@vue/compiler-sfc':
-        optional: true
-      less-loader:
-        optional: true
-      pug-plain-loader:
-        optional: true
-      raw-loader:
-        optional: true
-      sass-loader:
-        optional: true
-      stylus-loader:
-        optional: true
-      vue-template-compiler:
-        optional: true
-    dependencies:
-      '@intervolga/optimize-cssnano-plugin': registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/1.0.6_webpack@4.46.0
-      '@soda/friendly-errors-webpack-plugin': registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/1.8.1_webpack@4.46.0
-      '@soda/get-current-script': registry.npmmirror.com/@soda/get-current-script/1.0.2
-      '@types/minimist': registry.npmmirror.com/@types/minimist/1.2.2
-      '@types/webpack': registry.npmmirror.com/@types/webpack/4.41.33
-      '@types/webpack-dev-server': registry.npmmirror.com/@types/webpack-dev-server/3.11.6_debug@4.3.4
-      '@vue/cli-overlay': registry.npmmirror.com/@vue/cli-overlay/4.5.19
-      '@vue/cli-plugin-router': registry.npmmirror.com/@vue/cli-plugin-router/4.5.19_@vue+cli-service@4.5.19
-      '@vue/cli-plugin-vuex': registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.19_@vue+cli-service@4.5.19
-      '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.19
-      '@vue/component-compiler-utils': registry.npmmirror.com/@vue/component-compiler-utils/3.3.0
-      '@vue/preload-webpack-plugin': registry.npmmirror.com/@vue/preload-webpack-plugin/1.1.2_kawgdd6iu7jv34d6smtvgjfc2a
-      '@vue/web-component-wrapper': registry.npmmirror.com/@vue/web-component-wrapper/1.3.0
-      acorn: registry.npmmirror.com/acorn/7.4.1
-      acorn-walk: registry.npmmirror.com/acorn-walk/7.2.0
-      address: registry.npmmirror.com/address/1.2.1
-      autoprefixer: registry.npmmirror.com/autoprefixer/9.8.8
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      cache-loader: registry.npmmirror.com/cache-loader/4.1.0_webpack@4.46.0
-      case-sensitive-paths-webpack-plugin: registry.npmmirror.com/case-sensitive-paths-webpack-plugin/2.4.0
-      cli-highlight: registry.npmmirror.com/cli-highlight/2.1.11
-      clipboardy: registry.npmmirror.com/clipboardy/2.3.0
-      cliui: registry.npmmirror.com/cliui/6.0.0
-      copy-webpack-plugin: registry.npmmirror.com/copy-webpack-plugin/5.1.2_webpack@4.46.0
-      css-loader: registry.npmmirror.com/css-loader/3.6.0_webpack@4.46.0
-      cssnano: registry.npmmirror.com/cssnano/4.1.11
-      debug: registry.npmmirror.com/debug/4.3.4
-      default-gateway: registry.npmmirror.com/default-gateway/5.0.5
-      dotenv: registry.npmmirror.com/dotenv/8.6.0
-      dotenv-expand: registry.npmmirror.com/dotenv-expand/5.1.0
-      file-loader: registry.npmmirror.com/file-loader/4.3.0_webpack@4.46.0
-      fs-extra: registry.npmmirror.com/fs-extra/7.0.1
-      globby: registry.npmmirror.com/globby/9.2.0
-      hash-sum: registry.npmmirror.com/hash-sum/2.0.0
-      html-webpack-plugin: registry.npmmirror.com/html-webpack-plugin/3.2.0_webpack@4.46.0
-      launch-editor-middleware: registry.npmmirror.com/launch-editor-middleware/2.6.0
-      lodash.defaultsdeep: registry.npmmirror.com/lodash.defaultsdeep/4.6.1
-      lodash.mapvalues: registry.npmmirror.com/lodash.mapvalues/4.6.0
-      lodash.transform: registry.npmmirror.com/lodash.transform/4.6.0
-      mini-css-extract-plugin: registry.npmmirror.com/mini-css-extract-plugin/0.9.0_webpack@4.46.0
-      minimist: registry.npmmirror.com/minimist/1.2.7
-      pnp-webpack-plugin: registry.npmmirror.com/pnp-webpack-plugin/1.7.0
-      portfinder: registry.npmmirror.com/portfinder/1.0.32
-      postcss-loader: registry.npmmirror.com/postcss-loader/3.0.0
-      sass-loader: registry.npmmirror.com/sass-loader/8.0.2_sass@1.55.0
-      ssri: registry.npmmirror.com/ssri/8.0.1
-      terser-webpack-plugin: registry.npmmirror.com/terser-webpack-plugin/1.4.5_webpack@4.46.0
-      thread-loader: registry.npmmirror.com/thread-loader/2.1.3_webpack@4.46.0
-      url-loader: registry.npmmirror.com/url-loader/2.3.0_ke5umg2s3o4akbat3qvdol7cby
-      vue-loader: registry.npmmirror.com/vue-loader/15.10.0_6vkeqrujc3ehrt5ynq3wmaimc4
-      vue-style-loader: registry.npmmirror.com/vue-style-loader/4.1.3
-      vue-template-compiler: registry.npmmirror.com/vue-template-compiler/2.7.13
-      webpack: registry.npmmirror.com/webpack/4.46.0
-      webpack-bundle-analyzer: registry.npmmirror.com/webpack-bundle-analyzer/3.9.0
-      webpack-chain: registry.npmmirror.com/webpack-chain/6.5.1
-      webpack-dev-server: registry.npmmirror.com/webpack-dev-server/3.11.3_webpack@4.46.0
-      webpack-merge: registry.npmmirror.com/webpack-merge/4.2.2
-    optionalDependencies:
-      vue-loader-v16: registry.npmmirror.com/vue-loader/16.8.3_vue@2.7.13+webpack@4.46.0
-    transitivePeerDependencies:
-      - arc-templates
-      - atpl
-      - babel-core
-      - bracket-template
-      - bufferutil
-      - coffee-script
-      - dot
-      - dust
-      - dustjs-helpers
-      - dustjs-linkedin
-      - eco
-      - ect
-      - ejs
-      - haml-coffee
-      - hamlet
-      - hamljs
-      - handlebars
-      - hogan.js
-      - htmling
-      - jade
-      - jazz
-      - jqtpl
-      - just
-      - liquid-node
-      - liquor
-      - lodash
-      - marko
-      - mote
-      - mustache
-      - nunjucks
-      - plates
-      - pug
-      - qejs
-      - ractive
-      - razor-tmpl
-      - react
-      - react-dom
-      - slm
-      - squirrelly
-      - supports-color
-      - swig
-      - swig-templates
-      - teacup
-      - templayed
-      - then-jade
-      - then-pug
-      - tinyliquid
-      - toffee
-      - twig
-      - twing
-      - typescript
-      - underscore
-      - utf-8-validate
-      - vash
-      - velocityjs
-      - vue
-      - walrus
-      - webpack-cli
-      - webpack-command
-      - whiskers
-    dev: true
-
-  registry.npmmirror.com/@vue/cli-shared-utils/4.5.19:
-    resolution: {integrity: sha512-JYpdsrC/d9elerKxbEUtmSSU6QRM60rirVubOewECHkBHj+tLNznWq/EhCjswywtePyLaMUK25eTqnTSZlEE+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.19.tgz}
-    name: '@vue/cli-shared-utils'
-    version: 4.5.19
-    dependencies:
-      '@achrinza/node-ipc': registry.npmmirror.com/@achrinza/node-ipc/9.2.2
-      '@hapi/joi': registry.npmmirror.com/@hapi/joi/15.1.1
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      execa: registry.npmmirror.com/execa/1.0.0
-      launch-editor: registry.npmmirror.com/launch-editor/2.6.0
-      lru-cache: registry.npmmirror.com/lru-cache/5.1.1
-      open: registry.npmmirror.com/open/6.4.0
-      ora: registry.npmmirror.com/ora/3.4.0
-      read-pkg: registry.npmmirror.com/read-pkg/5.2.0
-      request: registry.npmmirror.com/request/2.88.2
-      semver: registry.npmmirror.com/semver/6.3.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-    dev: true
-
-  registry.npmmirror.com/@vue/compiler-sfc/2.7.13:
-    resolution: {integrity: sha512-zzu2rLRZlgIU+OT3Atbr7Y6PG+LW4wVQpPfNRrGDH3dM9PsrcVfa+1pKb8bW467bGM3aDOvAnsYLWVpYIv3GRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.13.tgz}
-    name: '@vue/compiler-sfc'
-    version: 2.7.13
-    dependencies:
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.1
-      postcss: registry.npmmirror.com/postcss/8.4.18
-      source-map: registry.npmmirror.com/source-map/0.6.1
-
-  registry.npmmirror.com/@vue/component-compiler-utils/3.3.0:
-    resolution: {integrity: sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz}
-    name: '@vue/component-compiler-utils'
-    version: 3.3.0
-    dependencies:
-      consolidate: registry.npmmirror.com/consolidate/0.15.1
-      hash-sum: registry.npmmirror.com/hash-sum/1.0.2
-      lru-cache: registry.npmmirror.com/lru-cache/4.1.5
-      merge-source-map: registry.npmmirror.com/merge-source-map/1.1.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.10
-      source-map: registry.npmmirror.com/source-map/0.6.1
-      vue-template-es2015-compiler: registry.npmmirror.com/vue-template-es2015-compiler/1.9.1
-    optionalDependencies:
-      prettier: registry.npmmirror.com/prettier/1.19.1
-    transitivePeerDependencies:
-      - arc-templates
-      - atpl
-      - babel-core
-      - bracket-template
-      - coffee-script
-      - dot
-      - dust
-      - dustjs-helpers
-      - dustjs-linkedin
-      - eco
-      - ect
-      - ejs
-      - haml-coffee
-      - hamlet
-      - hamljs
-      - handlebars
-      - hogan.js
-      - htmling
-      - jade
-      - jazz
-      - jqtpl
-      - just
-      - liquid-node
-      - liquor
-      - lodash
-      - marko
-      - mote
-      - mustache
-      - nunjucks
-      - plates
-      - pug
-      - qejs
-      - ractive
-      - razor-tmpl
-      - react
-      - react-dom
-      - slm
-      - squirrelly
-      - swig
-      - swig-templates
-      - teacup
-      - templayed
-      - then-jade
-      - then-pug
-      - tinyliquid
-      - toffee
-      - twig
-      - twing
-      - underscore
-      - vash
-      - velocityjs
-      - walrus
-      - whiskers
-    dev: true
-
-  registry.npmmirror.com/@vue/eslint-config-prettier/6.0.0_ns5hsxkay6aet6bcrxsjzqtky4:
-    resolution: {integrity: sha512-wFQmv45c3ige5EA+ngijq40YpVcIkAy0Lihupnsnd1Dao5CBbPyfCzqtejFLZX1EwH/kCJdpz3t6s+5wd3+KxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz}
-    id: registry.npmmirror.com/@vue/eslint-config-prettier/6.0.0
-    name: '@vue/eslint-config-prettier'
-    version: 6.0.0
-    peerDependencies:
-      eslint: '>= 5.0.0'
-      eslint-plugin-prettier: ^3.1.0
-      prettier: '>= 1.13.0'
-    dependencies:
-      eslint: registry.npmmirror.com/eslint/6.8.0
-      eslint-config-prettier: registry.npmmirror.com/eslint-config-prettier/6.15.0_eslint@6.8.0
-      eslint-plugin-prettier: registry.npmmirror.com/eslint-plugin-prettier/3.4.1_3bzozwyml2ynmd3jiqxkfjk2we
-      prettier: registry.npmmirror.com/prettier/1.19.1
-    dev: true
-
-  registry.npmmirror.com/@vue/preload-webpack-plugin/1.1.2_kawgdd6iu7jv34d6smtvgjfc2a:
-    resolution: {integrity: sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz}
-    id: registry.npmmirror.com/@vue/preload-webpack-plugin/1.1.2
-    name: '@vue/preload-webpack-plugin'
-    version: 1.1.2
-    engines: {node: '>=6.0.0'}
-    peerDependencies:
-      html-webpack-plugin: '>=2.26.0'
-      webpack: '>=4.0.0'
-    dependencies:
-      html-webpack-plugin: registry.npmmirror.com/html-webpack-plugin/3.2.0_webpack@4.46.0
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/@vue/web-component-wrapper/1.3.0:
-    resolution: {integrity: sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz}
-    name: '@vue/web-component-wrapper'
-    version: 1.3.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/ast/1.9.0:
-    resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.9.0.tgz}
-    name: '@webassemblyjs/ast'
-    version: 1.9.0
-    dependencies:
-      '@webassemblyjs/helper-module-context': registry.npmmirror.com/@webassemblyjs/helper-module-context/1.9.0
-      '@webassemblyjs/helper-wasm-bytecode': registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/1.9.0
-      '@webassemblyjs/wast-parser': registry.npmmirror.com/@webassemblyjs/wast-parser/1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/1.9.0:
-    resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz}
-    name: '@webassemblyjs/floating-point-hex-parser'
-    version: 1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/helper-api-error/1.9.0:
-    resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz}
-    name: '@webassemblyjs/helper-api-error'
-    version: 1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/helper-buffer/1.9.0:
-    resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz}
-    name: '@webassemblyjs/helper-buffer'
-    version: 1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/helper-code-frame/1.9.0:
-    resolution: {integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz}
-    name: '@webassemblyjs/helper-code-frame'
-    version: 1.9.0
-    dependencies:
-      '@webassemblyjs/wast-printer': registry.npmmirror.com/@webassemblyjs/wast-printer/1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/helper-fsm/1.9.0:
-    resolution: {integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz}
-    name: '@webassemblyjs/helper-fsm'
-    version: 1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/helper-module-context/1.9.0:
-    resolution: {integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz}
-    name: '@webassemblyjs/helper-module-context'
-    version: 1.9.0
-    dependencies:
-      '@webassemblyjs/ast': registry.npmmirror.com/@webassemblyjs/ast/1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/1.9.0:
-    resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz}
-    name: '@webassemblyjs/helper-wasm-bytecode'
-    version: 1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/helper-wasm-section/1.9.0:
-    resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz}
-    name: '@webassemblyjs/helper-wasm-section'
-    version: 1.9.0
-    dependencies:
-      '@webassemblyjs/ast': registry.npmmirror.com/@webassemblyjs/ast/1.9.0
-      '@webassemblyjs/helper-buffer': registry.npmmirror.com/@webassemblyjs/helper-buffer/1.9.0
-      '@webassemblyjs/helper-wasm-bytecode': registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/1.9.0
-      '@webassemblyjs/wasm-gen': registry.npmmirror.com/@webassemblyjs/wasm-gen/1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/ieee754/1.9.0:
-    resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz}
-    name: '@webassemblyjs/ieee754'
-    version: 1.9.0
-    dependencies:
-      '@xtuc/ieee754': registry.npmmirror.com/@xtuc/ieee754/1.2.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/leb128/1.9.0:
-    resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz}
-    name: '@webassemblyjs/leb128'
-    version: 1.9.0
-    dependencies:
-      '@xtuc/long': registry.npmmirror.com/@xtuc/long/4.2.2
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/utf8/1.9.0:
-    resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz}
-    name: '@webassemblyjs/utf8'
-    version: 1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/wasm-edit/1.9.0:
-    resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz}
-    name: '@webassemblyjs/wasm-edit'
-    version: 1.9.0
-    dependencies:
-      '@webassemblyjs/ast': registry.npmmirror.com/@webassemblyjs/ast/1.9.0
-      '@webassemblyjs/helper-buffer': registry.npmmirror.com/@webassemblyjs/helper-buffer/1.9.0
-      '@webassemblyjs/helper-wasm-bytecode': registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/1.9.0
-      '@webassemblyjs/helper-wasm-section': registry.npmmirror.com/@webassemblyjs/helper-wasm-section/1.9.0
-      '@webassemblyjs/wasm-gen': registry.npmmirror.com/@webassemblyjs/wasm-gen/1.9.0
-      '@webassemblyjs/wasm-opt': registry.npmmirror.com/@webassemblyjs/wasm-opt/1.9.0
-      '@webassemblyjs/wasm-parser': registry.npmmirror.com/@webassemblyjs/wasm-parser/1.9.0
-      '@webassemblyjs/wast-printer': registry.npmmirror.com/@webassemblyjs/wast-printer/1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/wasm-gen/1.9.0:
-    resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz}
-    name: '@webassemblyjs/wasm-gen'
-    version: 1.9.0
-    dependencies:
-      '@webassemblyjs/ast': registry.npmmirror.com/@webassemblyjs/ast/1.9.0
-      '@webassemblyjs/helper-wasm-bytecode': registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/1.9.0
-      '@webassemblyjs/ieee754': registry.npmmirror.com/@webassemblyjs/ieee754/1.9.0
-      '@webassemblyjs/leb128': registry.npmmirror.com/@webassemblyjs/leb128/1.9.0
-      '@webassemblyjs/utf8': registry.npmmirror.com/@webassemblyjs/utf8/1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/wasm-opt/1.9.0:
-    resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz}
-    name: '@webassemblyjs/wasm-opt'
-    version: 1.9.0
-    dependencies:
-      '@webassemblyjs/ast': registry.npmmirror.com/@webassemblyjs/ast/1.9.0
-      '@webassemblyjs/helper-buffer': registry.npmmirror.com/@webassemblyjs/helper-buffer/1.9.0
-      '@webassemblyjs/wasm-gen': registry.npmmirror.com/@webassemblyjs/wasm-gen/1.9.0
-      '@webassemblyjs/wasm-parser': registry.npmmirror.com/@webassemblyjs/wasm-parser/1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/wasm-parser/1.9.0:
-    resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz}
-    name: '@webassemblyjs/wasm-parser'
-    version: 1.9.0
-    dependencies:
-      '@webassemblyjs/ast': registry.npmmirror.com/@webassemblyjs/ast/1.9.0
-      '@webassemblyjs/helper-api-error': registry.npmmirror.com/@webassemblyjs/helper-api-error/1.9.0
-      '@webassemblyjs/helper-wasm-bytecode': registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/1.9.0
-      '@webassemblyjs/ieee754': registry.npmmirror.com/@webassemblyjs/ieee754/1.9.0
-      '@webassemblyjs/leb128': registry.npmmirror.com/@webassemblyjs/leb128/1.9.0
-      '@webassemblyjs/utf8': registry.npmmirror.com/@webassemblyjs/utf8/1.9.0
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/wast-parser/1.9.0:
-    resolution: {integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz}
-    name: '@webassemblyjs/wast-parser'
-    version: 1.9.0
-    dependencies:
-      '@webassemblyjs/ast': registry.npmmirror.com/@webassemblyjs/ast/1.9.0
-      '@webassemblyjs/floating-point-hex-parser': registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/1.9.0
-      '@webassemblyjs/helper-api-error': registry.npmmirror.com/@webassemblyjs/helper-api-error/1.9.0
-      '@webassemblyjs/helper-code-frame': registry.npmmirror.com/@webassemblyjs/helper-code-frame/1.9.0
-      '@webassemblyjs/helper-fsm': registry.npmmirror.com/@webassemblyjs/helper-fsm/1.9.0
-      '@xtuc/long': registry.npmmirror.com/@xtuc/long/4.2.2
-    dev: true
-
-  registry.npmmirror.com/@webassemblyjs/wast-printer/1.9.0:
-    resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz}
-    name: '@webassemblyjs/wast-printer'
-    version: 1.9.0
-    dependencies:
-      '@webassemblyjs/ast': registry.npmmirror.com/@webassemblyjs/ast/1.9.0
-      '@webassemblyjs/wast-parser': registry.npmmirror.com/@webassemblyjs/wast-parser/1.9.0
-      '@xtuc/long': registry.npmmirror.com/@xtuc/long/4.2.2
-    dev: true
-
-  registry.npmmirror.com/@xtuc/ieee754/1.2.0:
-    resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz}
-    name: '@xtuc/ieee754'
-    version: 1.2.0
-    dev: true
-
-  registry.npmmirror.com/@xtuc/long/4.2.2:
-    resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz}
-    name: '@xtuc/long'
-    version: 4.2.2
-    dev: true
-
-  registry.npmmirror.com/accepts/1.3.8:
-    resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz}
-    name: accepts
-    version: 1.3.8
-    engines: {node: '>= 0.6'}
-    dependencies:
-      mime-types: registry.npmmirror.com/mime-types/2.1.35
-      negotiator: registry.npmmirror.com/negotiator/0.6.3
-    dev: true
-
-  registry.npmmirror.com/acorn-jsx/5.3.2_acorn@7.4.1:
-    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz}
-    id: registry.npmmirror.com/acorn-jsx/5.3.2
-    name: acorn-jsx
-    version: 5.3.2
-    peerDependencies:
-      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-    dependencies:
-      acorn: registry.npmmirror.com/acorn/7.4.1
-    dev: true
-
-  registry.npmmirror.com/acorn-walk/7.2.0:
-    resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz}
-    name: acorn-walk
-    version: 7.2.0
-    engines: {node: '>=0.4.0'}
-    dev: true
-
-  registry.npmmirror.com/acorn/6.4.2:
-    resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz}
-    name: acorn
-    version: 6.4.2
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/acorn/7.4.1:
-    resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz}
-    name: acorn
-    version: 7.4.1
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/acorn/8.8.1:
-    resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz}
-    name: acorn
-    version: 8.8.1
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/address/1.2.1:
-    resolution: {integrity: sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/address/-/address-1.2.1.tgz}
-    name: address
-    version: 1.2.1
-    engines: {node: '>= 10.0.0'}
-    dev: true
-
-  registry.npmmirror.com/aggregate-error/3.1.0:
-    resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz}
-    name: aggregate-error
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      clean-stack: registry.npmmirror.com/clean-stack/2.2.0
-      indent-string: registry.npmmirror.com/indent-string/4.0.0
-    dev: true
-
-  registry.npmmirror.com/ajv-errors/1.0.1_ajv@6.12.6:
-    resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz}
-    id: registry.npmmirror.com/ajv-errors/1.0.1
-    name: ajv-errors
-    version: 1.0.1
-    peerDependencies:
-      ajv: '>=5.0.0'
-    dependencies:
-      ajv: registry.npmmirror.com/ajv/6.12.6
-    dev: true
-
-  registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6:
-    resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz}
-    id: registry.npmmirror.com/ajv-keywords/3.5.2
-    name: ajv-keywords
-    version: 3.5.2
-    peerDependencies:
-      ajv: ^6.9.1
-    dependencies:
-      ajv: registry.npmmirror.com/ajv/6.12.6
-    dev: true
-
-  registry.npmmirror.com/ajv/6.12.6:
-    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz}
-    name: ajv
-    version: 6.12.6
-    dependencies:
-      fast-deep-equal: registry.npmmirror.com/fast-deep-equal/3.1.3
-      fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0
-      json-schema-traverse: registry.npmmirror.com/json-schema-traverse/0.4.1
-      uri-js: registry.npmmirror.com/uri-js/4.4.1
-    dev: true
-
-  registry.npmmirror.com/alphanum-sort/1.0.2:
-    resolution: {integrity: sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz}
-    name: alphanum-sort
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/ansi-colors/3.2.4:
-    resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz}
-    name: ansi-colors
-    version: 3.2.4
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/ansi-escapes/3.2.0:
-    resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz}
-    name: ansi-escapes
-    version: 3.2.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/ansi-escapes/4.3.2:
-    resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz}
-    name: ansi-escapes
-    version: 4.3.2
-    engines: {node: '>=8'}
-    dependencies:
-      type-fest: registry.npmmirror.com/type-fest/0.21.3
-    dev: true
-
-  registry.npmmirror.com/ansi-html-community/0.0.8:
-    resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz}
-    name: ansi-html-community
-    version: 0.0.8
-    engines: {'0': node >= 0.8.0}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/ansi-regex/2.1.1:
-    resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz}
-    name: ansi-regex
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/ansi-regex/3.0.1:
-    resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz}
-    name: ansi-regex
-    version: 3.0.1
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/ansi-regex/4.1.1:
-    resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz}
-    name: ansi-regex
-    version: 4.1.1
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/ansi-regex/5.0.1:
-    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz}
-    name: ansi-regex
-    version: 5.0.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/ansi-styles/2.2.1:
-    resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz}
-    name: ansi-styles
-    version: 2.2.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/ansi-styles/3.2.1:
-    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz}
-    name: ansi-styles
-    version: 3.2.1
-    engines: {node: '>=4'}
-    dependencies:
-      color-convert: registry.npmmirror.com/color-convert/1.9.3
-    dev: true
-
-  registry.npmmirror.com/ansi-styles/4.3.0:
-    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz}
-    name: ansi-styles
-    version: 4.3.0
-    engines: {node: '>=8'}
-    dependencies:
-      color-convert: registry.npmmirror.com/color-convert/2.0.1
-    dev: true
-
-  registry.npmmirror.com/any-observable/0.3.0_rxjs@6.6.7:
-    resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/any-observable/-/any-observable-0.3.0.tgz}
-    id: registry.npmmirror.com/any-observable/0.3.0
-    name: any-observable
-    version: 0.3.0
-    engines: {node: '>=6'}
-    peerDependencies:
-      rxjs: '*'
-      zenObservable: '*'
-    peerDependenciesMeta:
-      rxjs:
-        optional: true
-      zenObservable:
-        optional: true
-    dependencies:
-      rxjs: registry.npmmirror.com/rxjs/6.6.7
-    dev: true
-
-  registry.npmmirror.com/any-promise/1.3.0:
-    resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz}
-    name: any-promise
-    version: 1.3.0
-    dev: true
-
-  registry.npmmirror.com/anymatch/2.0.0:
-    resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz}
-    name: anymatch
-    version: 2.0.0
-    dependencies:
-      micromatch: registry.npmmirror.com/micromatch/3.1.10
-      normalize-path: registry.npmmirror.com/normalize-path/2.1.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/anymatch/2.0.0_supports-color@6.1.0:
-    resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz}
-    id: registry.npmmirror.com/anymatch/2.0.0
-    name: anymatch
-    version: 2.0.0
-    dependencies:
-      micromatch: registry.npmmirror.com/micromatch/3.1.10_supports-color@6.1.0
-      normalize-path: registry.npmmirror.com/normalize-path/2.1.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/anymatch/3.1.2:
-    resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz}
-    name: anymatch
-    version: 3.1.2
-    engines: {node: '>= 8'}
-    dependencies:
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      picomatch: registry.npmmirror.com/picomatch/2.3.1
-    dev: true
-
-  registry.npmmirror.com/aproba/1.2.0:
-    resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz}
-    name: aproba
-    version: 1.2.0
-    dev: true
-
-  registry.npmmirror.com/arch/2.2.0:
-    resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz}
-    name: arch
-    version: 2.2.0
-    dev: true
-
-  registry.npmmirror.com/argparse/1.0.10:
-    resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz}
-    name: argparse
-    version: 1.0.10
-    dependencies:
-      sprintf-js: registry.npmmirror.com/sprintf-js/1.0.3
-    dev: true
-
-  registry.npmmirror.com/arr-diff/4.0.0:
-    resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz}
-    name: arr-diff
-    version: 4.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/arr-flatten/1.1.0:
-    resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz}
-    name: arr-flatten
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/arr-union/3.1.0:
-    resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz}
-    name: arr-union
-    version: 3.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/array-flatten/1.1.1:
-    resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz}
-    name: array-flatten
-    version: 1.1.1
-    dev: true
-
-  registry.npmmirror.com/array-flatten/2.1.2:
-    resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz}
-    name: array-flatten
-    version: 2.1.2
-    dev: true
-
-  registry.npmmirror.com/array-union/1.0.2:
-    resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz}
-    name: array-union
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      array-uniq: registry.npmmirror.com/array-uniq/1.0.3
-    dev: true
-
-  registry.npmmirror.com/array-union/2.1.0:
-    resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz}
-    name: array-union
-    version: 2.1.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/array-uniq/1.0.3:
-    resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz}
-    name: array-uniq
-    version: 1.0.3
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/array-unique/0.3.2:
-    resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz}
-    name: array-unique
-    version: 0.3.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/array.prototype.reduce/1.0.4:
-    resolution: {integrity: sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz}
-    name: array.prototype.reduce
-    version: 1.0.4
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-      es-abstract: registry.npmmirror.com/es-abstract/1.20.4
-      es-array-method-boxes-properly: registry.npmmirror.com/es-array-method-boxes-properly/1.0.0
-      is-string: registry.npmmirror.com/is-string/1.0.7
-    dev: true
-
-  registry.npmmirror.com/asn1.js/5.4.1:
-    resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz}
-    name: asn1.js
-    version: 5.4.1
-    dependencies:
-      bn.js: registry.npmmirror.com/bn.js/4.12.0
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1
-      safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2
-    dev: true
-
-  registry.npmmirror.com/asn1/0.2.6:
-    resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz}
-    name: asn1
-    version: 0.2.6
-    dependencies:
-      safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2
-    dev: true
-
-  registry.npmmirror.com/assert-plus/1.0.0:
-    resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz}
-    name: assert-plus
-    version: 1.0.0
-    engines: {node: '>=0.8'}
-    dev: true
-
-  registry.npmmirror.com/assert/1.5.0:
-    resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/assert/-/assert-1.5.0.tgz}
-    name: assert
-    version: 1.5.0
-    dependencies:
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-      util: registry.npmmirror.com/util/0.10.3
-    dev: true
-
-  registry.npmmirror.com/assign-symbols/1.0.0:
-    resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz}
-    name: assign-symbols
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/astral-regex/1.0.0:
-    resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/astral-regex/-/astral-regex-1.0.0.tgz}
-    name: astral-regex
-    version: 1.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/async-each/1.0.3:
-    resolution: {integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz}
-    name: async-each
-    version: 1.0.3
-    dev: true
-
-  registry.npmmirror.com/async-limiter/1.0.1:
-    resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz}
-    name: async-limiter
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/async-validator/1.8.5:
-    resolution: {integrity: sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz}
-    name: async-validator
-    version: 1.8.5
-    dependencies:
-      babel-runtime: registry.npmmirror.com/babel-runtime/6.26.0
-    dev: false
-
-  registry.npmmirror.com/async/2.6.4:
-    resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async/-/async-2.6.4.tgz}
-    name: async
-    version: 2.6.4
-    dependencies:
-      lodash: registry.npmmirror.com/lodash/4.17.21
-    dev: true
-
-  registry.npmmirror.com/asynckit/0.4.0:
-    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz}
-    name: asynckit
-    version: 0.4.0
-    dev: true
-
-  registry.npmmirror.com/atob/2.1.2:
-    resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz}
-    name: atob
-    version: 2.1.2
-    engines: {node: '>= 4.5.0'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/autoprefixer/9.8.8:
-    resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/autoprefixer/-/autoprefixer-9.8.8.tgz}
-    name: autoprefixer
-    version: 9.8.8
-    hasBin: true
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001429
-      normalize-range: registry.npmmirror.com/normalize-range/0.1.2
-      num2fraction: registry.npmmirror.com/num2fraction/1.2.2
-      picocolors: registry.npmmirror.com/picocolors/0.2.1
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0
-    dev: true
-
-  registry.npmmirror.com/aws-sign2/0.7.0:
-    resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz}
-    name: aws-sign2
-    version: 0.7.0
-    dev: true
-
-  registry.npmmirror.com/aws4/1.11.0:
-    resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz}
-    name: aws4
-    version: 1.11.0
-    dev: true
-
-  registry.npmmirror.com/axios/0.18.1:
-    resolution: {integrity: sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-0.18.1.tgz}
-    name: axios
-    version: 0.18.1
-    deprecated: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410
-    dependencies:
-      follow-redirects: registry.npmmirror.com/follow-redirects/1.5.10
-      is-buffer: registry.npmmirror.com/is-buffer/2.0.5
-    transitivePeerDependencies:
-      - supports-color
-    dev: false
-
-  registry.npmmirror.com/babel-eslint/10.1.0_eslint@6.8.0:
-    resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-eslint/-/babel-eslint-10.1.0.tgz}
-    id: registry.npmmirror.com/babel-eslint/10.1.0
-    name: babel-eslint
-    version: 10.1.0
-    engines: {node: '>=6'}
-    deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
-    peerDependencies:
-      eslint: '>= 4.12.1'
-    dependencies:
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.1
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.1
-      '@babel/types': registry.npmmirror.com/@babel/types/7.20.0
-      eslint: registry.npmmirror.com/eslint/6.8.0
-      eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/1.3.0
-      resolve: registry.npmmirror.com/resolve/1.22.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/babel-helper-vue-jsx-merge-props/2.0.3:
-    resolution: {integrity: sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz}
-    name: babel-helper-vue-jsx-merge-props
-    version: 2.0.3
-    dev: false
-
-  registry.npmmirror.com/babel-loader/8.2.5_q4ydpsrmbqywduja5orgah6fgq:
-    resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.5.tgz}
-    id: registry.npmmirror.com/babel-loader/8.2.5
-    name: babel-loader
-    version: 8.2.5
-    engines: {node: '>= 8.9'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-      webpack: '>=2'
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      find-cache-dir: registry.npmmirror.com/find-cache-dir/3.3.2
-      loader-utils: registry.npmmirror.com/loader-utils/2.0.3
-      make-dir: registry.npmmirror.com/make-dir/3.1.0
-      schema-utils: registry.npmmirror.com/schema-utils/2.7.1
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3:
-    resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz}
-    name: babel-plugin-dynamic-import-node
-    version: 2.3.3
-    dependencies:
-      object.assign: registry.npmmirror.com/object.assign/4.1.4
-    dev: true
-
-  registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.19.6:
-    resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz}
-    id: registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.3
-    name: babel-plugin-polyfill-corejs2
-    version: 0.3.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.20.1
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.19.6
-      semver: registry.npmmirror.com/semver/6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.19.6:
-    resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz}
-    id: registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.6.0
-    name: babel-plugin-polyfill-corejs3
-    version: 0.6.0
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.19.6
-      core-js-compat: registry.npmmirror.com/core-js-compat/3.26.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.19.6:
-    resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz}
-    id: registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.4.1
-    name: babel-plugin-polyfill-regenerator
-    version: 0.4.1
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.19.6
-      '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.19.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/babel-runtime/6.26.0:
-    resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz}
-    name: babel-runtime
-    version: 6.26.0
-    dependencies:
-      core-js: registry.npmmirror.com/core-js/2.6.12
-      regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.11.1
-    dev: false
-
-  registry.npmmirror.com/balanced-match/1.0.2:
-    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz}
-    name: balanced-match
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/base/0.11.2:
-    resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/base/-/base-0.11.2.tgz}
-    name: base
-    version: 0.11.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      cache-base: registry.npmmirror.com/cache-base/1.0.1
-      class-utils: registry.npmmirror.com/class-utils/0.3.6
-      component-emitter: registry.npmmirror.com/component-emitter/1.3.0
-      define-property: registry.npmmirror.com/define-property/1.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      mixin-deep: registry.npmmirror.com/mixin-deep/1.3.2
-      pascalcase: registry.npmmirror.com/pascalcase/0.1.1
-    dev: true
-
-  registry.npmmirror.com/base64-js/1.5.1:
-    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz}
-    name: base64-js
-    version: 1.5.1
-    dev: true
-
-  registry.npmmirror.com/batch/0.6.1:
-    resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz}
-    name: batch
-    version: 0.6.1
-    dev: true
-
-  registry.npmmirror.com/bcrypt-pbkdf/1.0.2:
-    resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz}
-    name: bcrypt-pbkdf
-    version: 1.0.2
-    dependencies:
-      tweetnacl: registry.npmmirror.com/tweetnacl/0.14.5
-    dev: true
-
-  registry.npmmirror.com/bfj/6.1.2:
-    resolution: {integrity: sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bfj/-/bfj-6.1.2.tgz}
-    name: bfj
-    version: 6.1.2
-    engines: {node: '>= 6.0.0'}
-    dependencies:
-      bluebird: registry.npmmirror.com/bluebird/3.7.2
-      check-types: registry.npmmirror.com/check-types/8.0.3
-      hoopy: registry.npmmirror.com/hoopy/0.1.4
-      tryer: registry.npmmirror.com/tryer/1.0.1
-    dev: true
-
-  registry.npmmirror.com/big.js/3.2.0:
-    resolution: {integrity: sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/big.js/-/big.js-3.2.0.tgz}
-    name: big.js
-    version: 3.2.0
-    dev: true
-
-  registry.npmmirror.com/big.js/5.2.2:
-    resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz}
-    name: big.js
-    version: 5.2.2
-    dev: true
-
-  registry.npmmirror.com/binary-extensions/1.13.1:
-    resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz}
-    name: binary-extensions
-    version: 1.13.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/binary-extensions/2.2.0:
-    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz}
-    name: binary-extensions
-    version: 2.2.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/bindings/1.5.0:
-    resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz}
-    name: bindings
-    version: 1.5.0
-    dependencies:
-      file-uri-to-path: registry.npmmirror.com/file-uri-to-path/1.0.0
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/bluebird/3.7.2:
-    resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz}
-    name: bluebird
-    version: 3.7.2
-    dev: true
-
-  registry.npmmirror.com/bn.js/4.12.0:
-    resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz}
-    name: bn.js
-    version: 4.12.0
-    dev: true
-
-  registry.npmmirror.com/bn.js/5.2.1:
-    resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bn.js/-/bn.js-5.2.1.tgz}
-    name: bn.js
-    version: 5.2.1
-    dev: true
-
-  registry.npmmirror.com/body-parser/1.20.1:
-    resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz}
-    name: body-parser
-    version: 1.20.1
-    engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-    dependencies:
-      bytes: registry.npmmirror.com/bytes/3.1.2
-      content-type: registry.npmmirror.com/content-type/1.0.4
-      debug: registry.npmmirror.com/debug/2.6.9
-      depd: registry.npmmirror.com/depd/2.0.0
-      destroy: registry.npmmirror.com/destroy/1.2.0
-      http-errors: registry.npmmirror.com/http-errors/2.0.0
-      iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24
-      on-finished: registry.npmmirror.com/on-finished/2.4.1
-      qs: registry.npmmirror.com/qs/6.11.0
-      raw-body: registry.npmmirror.com/raw-body/2.5.1
-      type-is: registry.npmmirror.com/type-is/1.6.18
-      unpipe: registry.npmmirror.com/unpipe/1.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/body-parser/1.20.1_supports-color@6.1.0:
-    resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz}
-    id: registry.npmmirror.com/body-parser/1.20.1
-    name: body-parser
-    version: 1.20.1
-    engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-    dependencies:
-      bytes: registry.npmmirror.com/bytes/3.1.2
-      content-type: registry.npmmirror.com/content-type/1.0.4
-      debug: registry.npmmirror.com/debug/2.6.9_supports-color@6.1.0
-      depd: registry.npmmirror.com/depd/2.0.0
-      destroy: registry.npmmirror.com/destroy/1.2.0
-      http-errors: registry.npmmirror.com/http-errors/2.0.0
-      iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24
-      on-finished: registry.npmmirror.com/on-finished/2.4.1
-      qs: registry.npmmirror.com/qs/6.11.0
-      raw-body: registry.npmmirror.com/raw-body/2.5.1
-      type-is: registry.npmmirror.com/type-is/1.6.18
-      unpipe: registry.npmmirror.com/unpipe/1.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/bonjour/3.5.0:
-    resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bonjour/-/bonjour-3.5.0.tgz}
-    name: bonjour
-    version: 3.5.0
-    dependencies:
-      array-flatten: registry.npmmirror.com/array-flatten/2.1.2
-      deep-equal: registry.npmmirror.com/deep-equal/1.1.1
-      dns-equal: registry.npmmirror.com/dns-equal/1.0.0
-      dns-txt: registry.npmmirror.com/dns-txt/2.0.2
-      multicast-dns: registry.npmmirror.com/multicast-dns/6.2.3
-      multicast-dns-service-types: registry.npmmirror.com/multicast-dns-service-types/1.1.0
-    dev: true
-
-  registry.npmmirror.com/boolbase/1.0.0:
-    resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz}
-    name: boolbase
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/brace-expansion/1.1.11:
-    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz}
-    name: brace-expansion
-    version: 1.1.11
-    dependencies:
-      balanced-match: registry.npmmirror.com/balanced-match/1.0.2
-      concat-map: registry.npmmirror.com/concat-map/0.0.1
-    dev: true
-
-  registry.npmmirror.com/braces/2.3.2:
-    resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz}
-    name: braces
-    version: 2.3.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-flatten: registry.npmmirror.com/arr-flatten/1.1.0
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      fill-range: registry.npmmirror.com/fill-range/4.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      repeat-element: registry.npmmirror.com/repeat-element/1.1.4
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2
-      snapdragon-node: registry.npmmirror.com/snapdragon-node/2.1.1
-      split-string: registry.npmmirror.com/split-string/3.1.0
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/braces/2.3.2_supports-color@6.1.0:
-    resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz}
-    id: registry.npmmirror.com/braces/2.3.2
-    name: braces
-    version: 2.3.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-flatten: registry.npmmirror.com/arr-flatten/1.1.0
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      fill-range: registry.npmmirror.com/fill-range/4.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      repeat-element: registry.npmmirror.com/repeat-element/1.1.4
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2_supports-color@6.1.0
-      snapdragon-node: registry.npmmirror.com/snapdragon-node/2.1.1
-      split-string: registry.npmmirror.com/split-string/3.1.0
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/braces/3.0.2:
-    resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz}
-    name: braces
-    version: 3.0.2
-    engines: {node: '>=8'}
-    dependencies:
-      fill-range: registry.npmmirror.com/fill-range/7.0.1
-    dev: true
-
-  registry.npmmirror.com/brorand/1.1.0:
-    resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz}
-    name: brorand
-    version: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/browserify-aes/1.2.0:
-    resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz}
-    name: browserify-aes
-    version: 1.2.0
-    dependencies:
-      buffer-xor: registry.npmmirror.com/buffer-xor/1.0.3
-      cipher-base: registry.npmmirror.com/cipher-base/1.0.4
-      create-hash: registry.npmmirror.com/create-hash/1.2.0
-      evp_bytestokey: registry.npmmirror.com/evp_bytestokey/1.0.3
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/browserify-cipher/1.0.1:
-    resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz}
-    name: browserify-cipher
-    version: 1.0.1
-    dependencies:
-      browserify-aes: registry.npmmirror.com/browserify-aes/1.2.0
-      browserify-des: registry.npmmirror.com/browserify-des/1.0.2
-      evp_bytestokey: registry.npmmirror.com/evp_bytestokey/1.0.3
-    dev: true
-
-  registry.npmmirror.com/browserify-des/1.0.2:
-    resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz}
-    name: browserify-des
-    version: 1.0.2
-    dependencies:
-      cipher-base: registry.npmmirror.com/cipher-base/1.0.4
-      des.js: registry.npmmirror.com/des.js/1.0.1
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/browserify-rsa/4.1.0:
-    resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz}
-    name: browserify-rsa
-    version: 4.1.0
-    dependencies:
-      bn.js: registry.npmmirror.com/bn.js/5.2.1
-      randombytes: registry.npmmirror.com/randombytes/2.1.0
-    dev: true
-
-  registry.npmmirror.com/browserify-sign/4.2.1:
-    resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.1.tgz}
-    name: browserify-sign
-    version: 4.2.1
-    dependencies:
-      bn.js: registry.npmmirror.com/bn.js/5.2.1
-      browserify-rsa: registry.npmmirror.com/browserify-rsa/4.1.0
-      create-hash: registry.npmmirror.com/create-hash/1.2.0
-      create-hmac: registry.npmmirror.com/create-hmac/1.1.7
-      elliptic: registry.npmmirror.com/elliptic/6.5.4
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      parse-asn1: registry.npmmirror.com/parse-asn1/5.1.6
-      readable-stream: registry.npmmirror.com/readable-stream/3.6.0
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/browserify-zlib/0.2.0:
-    resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz}
-    name: browserify-zlib
-    version: 0.2.0
-    dependencies:
-      pako: registry.npmmirror.com/pako/1.0.11
-    dev: true
-
-  registry.npmmirror.com/browserslist/4.21.4:
-    resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz}
-    name: browserslist
-    version: 4.21.4
-    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
-    hasBin: true
-    dependencies:
-      caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001429
-      electron-to-chromium: registry.npmmirror.com/electron-to-chromium/1.4.284
-      node-releases: registry.npmmirror.com/node-releases/2.0.6
-      update-browserslist-db: registry.npmmirror.com/update-browserslist-db/1.0.10_browserslist@4.21.4
-    dev: true
-
-  registry.npmmirror.com/buffer-from/1.1.2:
-    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz}
-    name: buffer-from
-    version: 1.1.2
-    dev: true
-
-  registry.npmmirror.com/buffer-indexof/1.1.1:
-    resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz}
-    name: buffer-indexof
-    version: 1.1.1
-    dev: true
-
-  registry.npmmirror.com/buffer-json/2.0.0:
-    resolution: {integrity: sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer-json/-/buffer-json-2.0.0.tgz}
-    name: buffer-json
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/buffer-xor/1.0.3:
-    resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz}
-    name: buffer-xor
-    version: 1.0.3
-    dev: true
-
-  registry.npmmirror.com/buffer/4.9.2:
-    resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz}
-    name: buffer
-    version: 4.9.2
-    dependencies:
-      base64-js: registry.npmmirror.com/base64-js/1.5.1
-      ieee754: registry.npmmirror.com/ieee754/1.2.1
-      isarray: registry.npmmirror.com/isarray/1.0.0
-    dev: true
-
-  registry.npmmirror.com/builtin-status-codes/3.0.0:
-    resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz}
-    name: builtin-status-codes
-    version: 3.0.0
-    dev: true
-
-  registry.npmmirror.com/bytes/3.0.0:
-    resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz}
-    name: bytes
-    version: 3.0.0
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/bytes/3.1.2:
-    resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz}
-    name: bytes
-    version: 3.1.2
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/cacache/12.0.4:
-    resolution: {integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz}
-    name: cacache
-    version: 12.0.4
-    dependencies:
-      bluebird: registry.npmmirror.com/bluebird/3.7.2
-      chownr: registry.npmmirror.com/chownr/1.1.4
-      figgy-pudding: registry.npmmirror.com/figgy-pudding/3.5.2
-      glob: registry.npmmirror.com/glob/7.2.3
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      infer-owner: registry.npmmirror.com/infer-owner/1.0.4
-      lru-cache: registry.npmmirror.com/lru-cache/5.1.1
-      mississippi: registry.npmmirror.com/mississippi/3.0.0
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-      move-concurrently: registry.npmmirror.com/move-concurrently/1.0.1
-      promise-inflight: registry.npmmirror.com/promise-inflight/1.0.1_bluebird@3.7.2
-      rimraf: registry.npmmirror.com/rimraf/2.7.1
-      ssri: registry.npmmirror.com/ssri/6.0.2
-      unique-filename: registry.npmmirror.com/unique-filename/1.1.1
-      y18n: registry.npmmirror.com/y18n/4.0.3
-    dev: true
-
-  registry.npmmirror.com/cache-base/1.0.1:
-    resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz}
-    name: cache-base
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      collection-visit: registry.npmmirror.com/collection-visit/1.0.0
-      component-emitter: registry.npmmirror.com/component-emitter/1.3.0
-      get-value: registry.npmmirror.com/get-value/2.0.6
-      has-value: registry.npmmirror.com/has-value/1.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      set-value: registry.npmmirror.com/set-value/2.0.1
-      to-object-path: registry.npmmirror.com/to-object-path/0.3.0
-      union-value: registry.npmmirror.com/union-value/1.0.1
-      unset-value: registry.npmmirror.com/unset-value/1.0.0
-    dev: true
-
-  registry.npmmirror.com/cache-loader/4.1.0_webpack@4.46.0:
-    resolution: {integrity: sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cache-loader/-/cache-loader-4.1.0.tgz}
-    id: registry.npmmirror.com/cache-loader/4.1.0
-    name: cache-loader
-    version: 4.1.0
-    engines: {node: '>= 8.9.0'}
-    peerDependencies:
-      webpack: ^4.0.0
-    dependencies:
-      buffer-json: registry.npmmirror.com/buffer-json/2.0.0
-      find-cache-dir: registry.npmmirror.com/find-cache-dir/3.3.2
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-      neo-async: registry.npmmirror.com/neo-async/2.6.2
-      schema-utils: registry.npmmirror.com/schema-utils/2.7.1
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/call-bind/1.0.2:
-    resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz}
-    name: call-bind
-    version: 1.0.2
-    dependencies:
-      function-bind: registry.npmmirror.com/function-bind/1.1.1
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.3
-
-  registry.npmmirror.com/call-me-maybe/1.0.2:
-    resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz}
-    name: call-me-maybe
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/caller-callsite/2.0.0:
-    resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz}
-    name: caller-callsite
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      callsites: registry.npmmirror.com/callsites/2.0.0
-    dev: true
-
-  registry.npmmirror.com/caller-path/2.0.0:
-    resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caller-path/-/caller-path-2.0.0.tgz}
-    name: caller-path
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      caller-callsite: registry.npmmirror.com/caller-callsite/2.0.0
-    dev: true
-
-  registry.npmmirror.com/callsites/2.0.0:
-    resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/callsites/-/callsites-2.0.0.tgz}
-    name: callsites
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/callsites/3.1.0:
-    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz}
-    name: callsites
-    version: 3.1.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/camel-case/3.0.0:
-    resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camel-case/-/camel-case-3.0.0.tgz}
-    name: camel-case
-    version: 3.0.0
-    dependencies:
-      no-case: registry.npmmirror.com/no-case/2.3.2
-      upper-case: registry.npmmirror.com/upper-case/1.1.3
-    dev: true
-
-  registry.npmmirror.com/camelcase/5.3.1:
-    resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz}
-    name: camelcase
-    version: 5.3.1
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/camelcase/6.3.0:
-    resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz}
-    name: camelcase
-    version: 6.3.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/caniuse-api/3.0.0:
-    resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz}
-    name: caniuse-api
-    version: 3.0.0
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001429
-      lodash.memoize: registry.npmmirror.com/lodash.memoize/4.1.2
-      lodash.uniq: registry.npmmirror.com/lodash.uniq/4.5.0
-    dev: true
-
-  registry.npmmirror.com/caniuse-lite/1.0.30001429:
-    resolution: {integrity: sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz}
-    name: caniuse-lite
-    version: 1.0.30001429
-    dev: true
-
-  registry.npmmirror.com/case-sensitive-paths-webpack-plugin/2.4.0:
-    resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz}
-    name: case-sensitive-paths-webpack-plugin
-    version: 2.4.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/caseless/0.12.0:
-    resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz}
-    name: caseless
-    version: 0.12.0
-    dev: true
-
-  registry.npmmirror.com/chalk/1.1.3:
-    resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz}
-    name: chalk
-    version: 1.1.3
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/2.2.1
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
-      has-ansi: registry.npmmirror.com/has-ansi/2.0.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1
-      supports-color: registry.npmmirror.com/supports-color/2.0.0
-    dev: true
-
-  registry.npmmirror.com/chalk/2.4.2:
-    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz}
-    name: chalk
-    version: 2.4.2
-    engines: {node: '>=4'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
-      supports-color: registry.npmmirror.com/supports-color/5.5.0
-    dev: true
-
-  registry.npmmirror.com/chalk/3.0.0:
-    resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz}
-    name: chalk
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0
-      supports-color: registry.npmmirror.com/supports-color/7.2.0
-    dev: true
-
-  registry.npmmirror.com/chalk/4.1.2:
-    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz}
-    name: chalk
-    version: 4.1.2
-    engines: {node: '>=10'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0
-      supports-color: registry.npmmirror.com/supports-color/7.2.0
-    dev: true
-
-  registry.npmmirror.com/chardet/0.7.0:
-    resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz}
-    name: chardet
-    version: 0.7.0
-    dev: true
-
-  registry.npmmirror.com/check-types/8.0.3:
-    resolution: {integrity: sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/check-types/-/check-types-8.0.3.tgz}
-    name: check-types
-    version: 8.0.3
-    dev: true
-
-  registry.npmmirror.com/chokidar/2.1.8:
-    resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz}
-    name: chokidar
-    version: 2.1.8
-    deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
-    dependencies:
-      anymatch: registry.npmmirror.com/anymatch/2.0.0
-      async-each: registry.npmmirror.com/async-each/1.0.3
-      braces: registry.npmmirror.com/braces/2.3.2
-      glob-parent: registry.npmmirror.com/glob-parent/3.1.0
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      is-binary-path: registry.npmmirror.com/is-binary-path/1.0.1
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      path-is-absolute: registry.npmmirror.com/path-is-absolute/1.0.1
-      readdirp: registry.npmmirror.com/readdirp/2.2.1
-      upath: registry.npmmirror.com/upath/1.2.0
-    optionalDependencies:
-      fsevents: registry.npmmirror.com/fsevents/1.2.13
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/chokidar/2.1.8_supports-color@6.1.0:
-    resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz}
-    id: registry.npmmirror.com/chokidar/2.1.8
-    name: chokidar
-    version: 2.1.8
-    deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
-    dependencies:
-      anymatch: registry.npmmirror.com/anymatch/2.0.0_supports-color@6.1.0
-      async-each: registry.npmmirror.com/async-each/1.0.3
-      braces: registry.npmmirror.com/braces/2.3.2_supports-color@6.1.0
-      glob-parent: registry.npmmirror.com/glob-parent/3.1.0
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      is-binary-path: registry.npmmirror.com/is-binary-path/1.0.1
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      path-is-absolute: registry.npmmirror.com/path-is-absolute/1.0.1
-      readdirp: registry.npmmirror.com/readdirp/2.2.1_supports-color@6.1.0
-      upath: registry.npmmirror.com/upath/1.2.0
-    optionalDependencies:
-      fsevents: registry.npmmirror.com/fsevents/1.2.13
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/chokidar/3.5.3:
-    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz}
-    name: chokidar
-    version: 3.5.3
-    engines: {node: '>= 8.10.0'}
-    dependencies:
-      anymatch: registry.npmmirror.com/anymatch/3.1.2
-      braces: registry.npmmirror.com/braces/3.0.2
-      glob-parent: registry.npmmirror.com/glob-parent/5.1.2
-      is-binary-path: registry.npmmirror.com/is-binary-path/2.1.0
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      readdirp: registry.npmmirror.com/readdirp/3.6.0
-    optionalDependencies:
-      fsevents: registry.npmmirror.com/fsevents/2.3.2
-    dev: true
-
-  registry.npmmirror.com/chownr/1.1.4:
-    resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz}
-    name: chownr
-    version: 1.1.4
-    dev: true
-
-  registry.npmmirror.com/chrome-trace-event/1.0.3:
-    resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz}
-    name: chrome-trace-event
-    version: 1.0.3
-    engines: {node: '>=6.0'}
-    dev: true
-
-  registry.npmmirror.com/ci-info/1.6.0:
-    resolution: {integrity: sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ci-info/-/ci-info-1.6.0.tgz}
-    name: ci-info
-    version: 1.6.0
-    dev: true
-
-  registry.npmmirror.com/cipher-base/1.0.4:
-    resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz}
-    name: cipher-base
-    version: 1.0.4
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/class-utils/0.3.6:
-    resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz}
-    name: class-utils
-    version: 0.3.6
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-union: registry.npmmirror.com/arr-union/3.1.0
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      static-extend: registry.npmmirror.com/static-extend/0.1.2
-    dev: true
-
-  registry.npmmirror.com/clean-css/4.2.4:
-    resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz}
-    name: clean-css
-    version: 4.2.4
-    engines: {node: '>= 4.0'}
-    dependencies:
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    dev: true
-
-  registry.npmmirror.com/clean-stack/2.2.0:
-    resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz}
-    name: clean-stack
-    version: 2.2.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/cli-cursor/2.1.0:
-    resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz}
-    name: cli-cursor
-    version: 2.1.0
-    engines: {node: '>=4'}
-    dependencies:
-      restore-cursor: registry.npmmirror.com/restore-cursor/2.0.0
-    dev: true
-
-  registry.npmmirror.com/cli-cursor/3.1.0:
-    resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz}
-    name: cli-cursor
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      restore-cursor: registry.npmmirror.com/restore-cursor/3.1.0
-    dev: true
-
-  registry.npmmirror.com/cli-highlight/2.1.11:
-    resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz}
-    name: cli-highlight
-    version: 2.1.11
-    engines: {node: '>=8.0.0', npm: '>=5.0.0'}
-    hasBin: true
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      highlight.js: registry.npmmirror.com/highlight.js/10.7.3
-      mz: registry.npmmirror.com/mz/2.7.0
-      parse5: registry.npmmirror.com/parse5/5.1.1
-      parse5-htmlparser2-tree-adapter: registry.npmmirror.com/parse5-htmlparser2-tree-adapter/6.0.1
-      yargs: registry.npmmirror.com/yargs/16.2.0
-    dev: true
-
-  registry.npmmirror.com/cli-spinners/2.7.0:
-    resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.7.0.tgz}
-    name: cli-spinners
-    version: 2.7.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/cli-truncate/0.2.1:
-    resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-truncate/-/cli-truncate-0.2.1.tgz}
-    name: cli-truncate
-    version: 0.2.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      slice-ansi: registry.npmmirror.com/slice-ansi/0.0.4
-      string-width: registry.npmmirror.com/string-width/1.0.2
-    dev: true
-
-  registry.npmmirror.com/cli-width/3.0.0:
-    resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz}
-    name: cli-width
-    version: 3.0.0
-    engines: {node: '>= 10'}
-    dev: true
-
-  registry.npmmirror.com/clipboardy/2.3.0:
-    resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz}
-    name: clipboardy
-    version: 2.3.0
-    engines: {node: '>=8'}
-    dependencies:
-      arch: registry.npmmirror.com/arch/2.2.0
-      execa: registry.npmmirror.com/execa/1.0.0
-      is-wsl: registry.npmmirror.com/is-wsl/2.2.0
-    dev: true
-
-  registry.npmmirror.com/cliui/5.0.0:
-    resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz}
-    name: cliui
-    version: 5.0.0
-    dependencies:
-      string-width: registry.npmmirror.com/string-width/3.1.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0
-      wrap-ansi: registry.npmmirror.com/wrap-ansi/5.1.0
-    dev: true
-
-  registry.npmmirror.com/cliui/6.0.0:
-    resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz}
-    name: cliui
-    version: 6.0.0
-    dependencies:
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      wrap-ansi: registry.npmmirror.com/wrap-ansi/6.2.0
-    dev: true
-
-  registry.npmmirror.com/cliui/7.0.4:
-    resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz}
-    name: cliui
-    version: 7.0.4
-    dependencies:
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      wrap-ansi: registry.npmmirror.com/wrap-ansi/7.0.0
-    dev: true
-
-  registry.npmmirror.com/clone-deep/4.0.1:
-    resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz}
-    name: clone-deep
-    version: 4.0.1
-    engines: {node: '>=6'}
-    dependencies:
-      is-plain-object: registry.npmmirror.com/is-plain-object/2.0.4
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-      shallow-clone: registry.npmmirror.com/shallow-clone/3.0.1
-    dev: true
-
-  registry.npmmirror.com/clone/1.0.4:
-    resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz}
-    name: clone
-    version: 1.0.4
-    engines: {node: '>=0.8'}
-    dev: true
-
-  registry.npmmirror.com/coa/2.0.2:
-    resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz}
-    name: coa
-    version: 2.0.2
-    engines: {node: '>= 4.0'}
-    dependencies:
-      '@types/q': registry.npmmirror.com/@types/q/1.5.5
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      q: registry.npmmirror.com/q/1.5.1
-    dev: true
-
-  registry.npmmirror.com/code-point-at/1.1.0:
-    resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/code-point-at/-/code-point-at-1.1.0.tgz}
-    name: code-point-at
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/collection-visit/1.0.0:
-    resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz}
-    name: collection-visit
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      map-visit: registry.npmmirror.com/map-visit/1.0.0
-      object-visit: registry.npmmirror.com/object-visit/1.0.1
-    dev: true
-
-  registry.npmmirror.com/color-convert/1.9.3:
-    resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz}
-    name: color-convert
-    version: 1.9.3
-    dependencies:
-      color-name: registry.npmmirror.com/color-name/1.1.3
-    dev: true
-
-  registry.npmmirror.com/color-convert/2.0.1:
-    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz}
-    name: color-convert
-    version: 2.0.1
-    engines: {node: '>=7.0.0'}
-    dependencies:
-      color-name: registry.npmmirror.com/color-name/1.1.4
-    dev: true
-
-  registry.npmmirror.com/color-name/1.1.3:
-    resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz}
-    name: color-name
-    version: 1.1.3
-    dev: true
-
-  registry.npmmirror.com/color-name/1.1.4:
-    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz}
-    name: color-name
-    version: 1.1.4
-    dev: true
-
-  registry.npmmirror.com/color-string/1.9.1:
-    resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz}
-    name: color-string
-    version: 1.9.1
-    dependencies:
-      color-name: registry.npmmirror.com/color-name/1.1.4
-      simple-swizzle: registry.npmmirror.com/simple-swizzle/0.2.2
-    dev: true
-
-  registry.npmmirror.com/color/3.2.1:
-    resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color/-/color-3.2.1.tgz}
-    name: color
-    version: 3.2.1
-    dependencies:
-      color-convert: registry.npmmirror.com/color-convert/1.9.3
-      color-string: registry.npmmirror.com/color-string/1.9.1
-    dev: true
-
-  registry.npmmirror.com/combined-stream/1.0.8:
-    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz}
-    name: combined-stream
-    version: 1.0.8
-    engines: {node: '>= 0.8'}
-    dependencies:
-      delayed-stream: registry.npmmirror.com/delayed-stream/1.0.0
-    dev: true
-
-  registry.npmmirror.com/commander/2.17.1:
-    resolution: {integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz}
-    name: commander
-    version: 2.17.1
-    dev: true
-
-  registry.npmmirror.com/commander/2.19.0:
-    resolution: {integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-2.19.0.tgz}
-    name: commander
-    version: 2.19.0
-    dev: true
-
-  registry.npmmirror.com/commander/2.20.3:
-    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz}
-    name: commander
-    version: 2.20.3
-    dev: true
-
-  registry.npmmirror.com/commondir/1.0.1:
-    resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz}
-    name: commondir
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/component-emitter/1.3.0:
-    resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz}
-    name: component-emitter
-    version: 1.3.0
-    dev: true
-
-  registry.npmmirror.com/compressible/2.0.18:
-    resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz}
-    name: compressible
-    version: 2.0.18
-    engines: {node: '>= 0.6'}
-    dependencies:
-      mime-db: registry.npmmirror.com/mime-db/1.52.0
-    dev: true
-
-  registry.npmmirror.com/compression/1.7.4_supports-color@6.1.0:
-    resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz}
-    id: registry.npmmirror.com/compression/1.7.4
-    name: compression
-    version: 1.7.4
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      accepts: registry.npmmirror.com/accepts/1.3.8
-      bytes: registry.npmmirror.com/bytes/3.0.0
-      compressible: registry.npmmirror.com/compressible/2.0.18
-      debug: registry.npmmirror.com/debug/2.6.9_supports-color@6.1.0
-      on-headers: registry.npmmirror.com/on-headers/1.0.2
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2
-      vary: registry.npmmirror.com/vary/1.1.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/concat-map/0.0.1:
-    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz}
-    name: concat-map
-    version: 0.0.1
-    dev: true
-
-  registry.npmmirror.com/concat-stream/1.6.2:
-    resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz}
-    name: concat-stream
-    version: 1.6.2
-    engines: {'0': node >= 0.8}
-    dependencies:
-      buffer-from: registry.npmmirror.com/buffer-from/1.1.2
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-      typedarray: registry.npmmirror.com/typedarray/0.0.6
-    dev: true
-
-  registry.npmmirror.com/connect-history-api-fallback/1.6.0:
-    resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz}
-    name: connect-history-api-fallback
-    version: 1.6.0
-    engines: {node: '>=0.8'}
-    dev: true
-
-  registry.npmmirror.com/console-browserify/1.2.0:
-    resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz}
-    name: console-browserify
-    version: 1.2.0
-    dev: true
-
-  registry.npmmirror.com/consolidate/0.15.1:
-    resolution: {integrity: sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz}
-    name: consolidate
-    version: 0.15.1
-    engines: {node: '>= 0.10.0'}
-    peerDependencies:
-      arc-templates: ^0.5.3
-      atpl: '>=0.7.6'
-      babel-core: ^6.26.3
-      bracket-template: ^1.1.5
-      coffee-script: ^1.12.7
-      dot: ^1.1.3
-      dust: ^0.3.0
-      dustjs-helpers: ^1.7.4
-      dustjs-linkedin: ^2.7.5
-      eco: ^1.1.0-rc-3
-      ect: ^0.5.9
-      ejs: ^3.1.5
-      haml-coffee: ^1.14.1
-      hamlet: ^0.3.3
-      hamljs: ^0.6.2
-      handlebars: ^4.7.6
-      hogan.js: ^3.0.2
-      htmling: ^0.0.8
-      jade: ^1.11.0
-      jazz: ^0.0.18
-      jqtpl: ~1.1.0
-      just: ^0.1.8
-      liquid-node: ^3.0.1
-      liquor: ^0.0.5
-      lodash: ^4.17.20
-      marko: ^3.14.4
-      mote: ^0.2.0
-      mustache: ^3.0.0
-      nunjucks: ^3.2.2
-      plates: ~0.4.11
-      pug: ^3.0.0
-      qejs: ^3.0.5
-      ractive: ^1.3.12
-      razor-tmpl: ^1.3.1
-      react: ^16.13.1
-      react-dom: ^16.13.1
-      slm: ^2.0.0
-      squirrelly: ^5.1.0
-      swig: ^1.4.2
-      swig-templates: ^2.0.3
-      teacup: ^2.0.0
-      templayed: '>=0.2.3'
-      then-jade: '*'
-      then-pug: '*'
-      tinyliquid: ^0.2.34
-      toffee: ^0.3.6
-      twig: ^1.15.2
-      twing: ^5.0.2
-      underscore: ^1.11.0
-      vash: ^0.13.0
-      velocityjs: ^2.0.1
-      walrus: ^0.10.1
-      whiskers: ^0.4.0
-    peerDependenciesMeta:
-      arc-templates:
-        optional: true
-      atpl:
-        optional: true
-      babel-core:
-        optional: true
-      bracket-template:
-        optional: true
-      coffee-script:
-        optional: true
-      dot:
-        optional: true
-      dust:
-        optional: true
-      dustjs-helpers:
-        optional: true
-      dustjs-linkedin:
-        optional: true
-      eco:
-        optional: true
-      ect:
-        optional: true
-      ejs:
-        optional: true
-      haml-coffee:
-        optional: true
-      hamlet:
-        optional: true
-      hamljs:
-        optional: true
-      handlebars:
-        optional: true
-      hogan.js:
-        optional: true
-      htmling:
-        optional: true
-      jade:
-        optional: true
-      jazz:
-        optional: true
-      jqtpl:
-        optional: true
-      just:
-        optional: true
-      liquid-node:
-        optional: true
-      liquor:
-        optional: true
-      lodash:
-        optional: true
-      marko:
-        optional: true
-      mote:
-        optional: true
-      mustache:
-        optional: true
-      nunjucks:
-        optional: true
-      plates:
-        optional: true
-      pug:
-        optional: true
-      qejs:
-        optional: true
-      ractive:
-        optional: true
-      razor-tmpl:
-        optional: true
-      react:
-        optional: true
-      react-dom:
-        optional: true
-      slm:
-        optional: true
-      squirrelly:
-        optional: true
-      swig:
-        optional: true
-      swig-templates:
-        optional: true
-      teacup:
-        optional: true
-      templayed:
-        optional: true
-      then-jade:
-        optional: true
-      then-pug:
-        optional: true
-      tinyliquid:
-        optional: true
-      toffee:
-        optional: true
-      twig:
-        optional: true
-      twing:
-        optional: true
-      underscore:
-        optional: true
-      vash:
-        optional: true
-      velocityjs:
-        optional: true
-      walrus:
-        optional: true
-      whiskers:
-        optional: true
-    dependencies:
-      bluebird: registry.npmmirror.com/bluebird/3.7.2
-    dev: true
-
-  registry.npmmirror.com/constants-browserify/1.0.0:
-    resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz}
-    name: constants-browserify
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/content-disposition/0.5.4:
-    resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz}
-    name: content-disposition
-    version: 0.5.4
-    engines: {node: '>= 0.6'}
-    dependencies:
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/content-type/1.0.4:
-    resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/content-type/-/content-type-1.0.4.tgz}
-    name: content-type
-    version: 1.0.4
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/convert-source-map/1.9.0:
-    resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz}
-    name: convert-source-map
-    version: 1.9.0
-    dev: true
-
-  registry.npmmirror.com/cookie-signature/1.0.6:
-    resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz}
-    name: cookie-signature
-    version: 1.0.6
-    dev: true
-
-  registry.npmmirror.com/cookie/0.5.0:
-    resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz}
-    name: cookie
-    version: 0.5.0
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/copy-concurrently/1.0.5:
-    resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz}
-    name: copy-concurrently
-    version: 1.0.5
-    dependencies:
-      aproba: registry.npmmirror.com/aproba/1.2.0
-      fs-write-stream-atomic: registry.npmmirror.com/fs-write-stream-atomic/1.0.10
-      iferr: registry.npmmirror.com/iferr/0.1.5
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-      rimraf: registry.npmmirror.com/rimraf/2.7.1
-      run-queue: registry.npmmirror.com/run-queue/1.0.3
-    dev: true
-
-  registry.npmmirror.com/copy-descriptor/0.1.1:
-    resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz}
-    name: copy-descriptor
-    version: 0.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/copy-webpack-plugin/5.1.2_webpack@4.46.0:
-    resolution: {integrity: sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz}
-    id: registry.npmmirror.com/copy-webpack-plugin/5.1.2
-    name: copy-webpack-plugin
-    version: 5.1.2
-    engines: {node: '>= 6.9.0'}
-    peerDependencies:
-      webpack: ^4.0.0 || ^5.0.0
-    dependencies:
-      cacache: registry.npmmirror.com/cacache/12.0.4
-      find-cache-dir: registry.npmmirror.com/find-cache-dir/2.1.0
-      glob-parent: registry.npmmirror.com/glob-parent/3.1.0
-      globby: registry.npmmirror.com/globby/7.1.1
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      p-limit: registry.npmmirror.com/p-limit/2.3.0
-      schema-utils: registry.npmmirror.com/schema-utils/1.0.0
-      serialize-javascript: registry.npmmirror.com/serialize-javascript/4.0.0
-      webpack: registry.npmmirror.com/webpack/4.46.0
-      webpack-log: registry.npmmirror.com/webpack-log/2.0.0
-    dev: true
-
-  registry.npmmirror.com/core-js-compat/3.26.0:
-    resolution: {integrity: sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.26.0.tgz}
-    name: core-js-compat
-    version: 3.26.0
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-    dev: true
-
-  registry.npmmirror.com/core-js/2.6.12:
-    resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz}
-    name: core-js
-    version: 2.6.12
-    deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
-    requiresBuild: true
-    dev: false
-
-  registry.npmmirror.com/core-js/3.26.0:
-    resolution: {integrity: sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js/-/core-js-3.26.0.tgz}
-    name: core-js
-    version: 3.26.0
-    requiresBuild: true
-
-  registry.npmmirror.com/core-util-is/1.0.2:
-    resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz}
-    name: core-util-is
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/core-util-is/1.0.3:
-    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz}
-    name: core-util-is
-    version: 1.0.3
-    dev: true
-
-  registry.npmmirror.com/cosmiconfig/5.2.1:
-    resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz}
-    name: cosmiconfig
-    version: 5.2.1
-    engines: {node: '>=4'}
-    dependencies:
-      import-fresh: registry.npmmirror.com/import-fresh/2.0.0
-      is-directory: registry.npmmirror.com/is-directory/0.3.1
-      js-yaml: registry.npmmirror.com/js-yaml/3.14.1
-      parse-json: registry.npmmirror.com/parse-json/4.0.0
-    dev: true
-
-  registry.npmmirror.com/create-ecdh/4.0.4:
-    resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz}
-    name: create-ecdh
-    version: 4.0.4
-    dependencies:
-      bn.js: registry.npmmirror.com/bn.js/4.12.0
-      elliptic: registry.npmmirror.com/elliptic/6.5.4
-    dev: true
-
-  registry.npmmirror.com/create-hash/1.2.0:
-    resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz}
-    name: create-hash
-    version: 1.2.0
-    dependencies:
-      cipher-base: registry.npmmirror.com/cipher-base/1.0.4
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      md5.js: registry.npmmirror.com/md5.js/1.3.5
-      ripemd160: registry.npmmirror.com/ripemd160/2.0.2
-      sha.js: registry.npmmirror.com/sha.js/2.4.11
-    dev: true
-
-  registry.npmmirror.com/create-hmac/1.1.7:
-    resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz}
-    name: create-hmac
-    version: 1.1.7
-    dependencies:
-      cipher-base: registry.npmmirror.com/cipher-base/1.0.4
-      create-hash: registry.npmmirror.com/create-hash/1.2.0
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      ripemd160: registry.npmmirror.com/ripemd160/2.0.2
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-      sha.js: registry.npmmirror.com/sha.js/2.4.11
-    dev: true
-
-  registry.npmmirror.com/cropperjs/1.5.12:
-    resolution: {integrity: sha512-re7UdjE5UnwdrovyhNzZ6gathI4Rs3KGCBSc8HCIjUo5hO42CtzyblmWLj6QWVw7huHyDMfpKxhiO2II77nhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cropperjs/-/cropperjs-1.5.12.tgz}
-    name: cropperjs
-    version: 1.5.12
-    dev: false
-
-  registry.npmmirror.com/cross-spawn/5.1.0:
-    resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz}
-    name: cross-spawn
-    version: 5.1.0
-    dependencies:
-      lru-cache: registry.npmmirror.com/lru-cache/4.1.5
-      shebang-command: registry.npmmirror.com/shebang-command/1.2.0
-      which: registry.npmmirror.com/which/1.3.1
-    dev: true
-
-  registry.npmmirror.com/cross-spawn/6.0.5:
-    resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz}
-    name: cross-spawn
-    version: 6.0.5
-    engines: {node: '>=4.8'}
-    dependencies:
-      nice-try: registry.npmmirror.com/nice-try/1.0.5
-      path-key: registry.npmmirror.com/path-key/2.0.1
-      semver: registry.npmmirror.com/semver/5.7.1
-      shebang-command: registry.npmmirror.com/shebang-command/1.2.0
-      which: registry.npmmirror.com/which/1.3.1
-    dev: true
-
-  registry.npmmirror.com/cross-spawn/7.0.3:
-    resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz}
-    name: cross-spawn
-    version: 7.0.3
-    engines: {node: '>= 8'}
-    dependencies:
-      path-key: registry.npmmirror.com/path-key/3.1.1
-      shebang-command: registry.npmmirror.com/shebang-command/2.0.0
-      which: registry.npmmirror.com/which/2.0.2
-    dev: true
-
-  registry.npmmirror.com/crypto-browserify/3.12.0:
-    resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz}
-    name: crypto-browserify
-    version: 3.12.0
-    dependencies:
-      browserify-cipher: registry.npmmirror.com/browserify-cipher/1.0.1
-      browserify-sign: registry.npmmirror.com/browserify-sign/4.2.1
-      create-ecdh: registry.npmmirror.com/create-ecdh/4.0.4
-      create-hash: registry.npmmirror.com/create-hash/1.2.0
-      create-hmac: registry.npmmirror.com/create-hmac/1.1.7
-      diffie-hellman: registry.npmmirror.com/diffie-hellman/5.0.3
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      pbkdf2: registry.npmmirror.com/pbkdf2/3.1.2
-      public-encrypt: registry.npmmirror.com/public-encrypt/4.0.3
-      randombytes: registry.npmmirror.com/randombytes/2.1.0
-      randomfill: registry.npmmirror.com/randomfill/1.0.4
-    dev: true
-
-  registry.npmmirror.com/crypto-js/4.1.1:
-    resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz}
-    name: crypto-js
-    version: 4.1.1
-    dev: false
-
-  registry.npmmirror.com/css-color-names/0.0.4:
-    resolution: {integrity: sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-color-names/-/css-color-names-0.0.4.tgz}
-    name: css-color-names
-    version: 0.0.4
-    dev: true
-
-  registry.npmmirror.com/css-declaration-sorter/4.0.1:
-    resolution: {integrity: sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz}
-    name: css-declaration-sorter
-    version: 4.0.1
-    engines: {node: '>4'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      timsort: registry.npmmirror.com/timsort/0.3.0
-    dev: true
-
-  registry.npmmirror.com/css-loader/3.6.0_webpack@4.46.0:
-    resolution: {integrity: sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-loader/-/css-loader-3.6.0.tgz}
-    id: registry.npmmirror.com/css-loader/3.6.0
-    name: css-loader
-    version: 3.6.0
-    engines: {node: '>= 8.9.0'}
-    peerDependencies:
-      webpack: ^4.0.0 || ^5.0.0
-    dependencies:
-      camelcase: registry.npmmirror.com/camelcase/5.3.1
-      cssesc: registry.npmmirror.com/cssesc/3.0.0
-      icss-utils: registry.npmmirror.com/icss-utils/4.1.1
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-modules-extract-imports: registry.npmmirror.com/postcss-modules-extract-imports/2.0.0
-      postcss-modules-local-by-default: registry.npmmirror.com/postcss-modules-local-by-default/3.0.3
-      postcss-modules-scope: registry.npmmirror.com/postcss-modules-scope/2.2.0
-      postcss-modules-values: registry.npmmirror.com/postcss-modules-values/3.0.0
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0
-      schema-utils: registry.npmmirror.com/schema-utils/2.7.1
-      semver: registry.npmmirror.com/semver/6.3.0
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/css-select-base-adapter/0.1.1:
-    resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz}
-    name: css-select-base-adapter
-    version: 0.1.1
-    dev: true
-
-  registry.npmmirror.com/css-select/2.1.0:
-    resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz}
-    name: css-select
-    version: 2.1.0
-    dependencies:
-      boolbase: registry.npmmirror.com/boolbase/1.0.0
-      css-what: registry.npmmirror.com/css-what/3.4.2
-      domutils: registry.npmmirror.com/domutils/1.7.0
-      nth-check: registry.npmmirror.com/nth-check/1.0.2
-    dev: true
-
-  registry.npmmirror.com/css-select/4.3.0:
-    resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz}
-    name: css-select
-    version: 4.3.0
-    dependencies:
-      boolbase: registry.npmmirror.com/boolbase/1.0.0
-      css-what: registry.npmmirror.com/css-what/6.1.0
-      domhandler: registry.npmmirror.com/domhandler/4.3.1
-      domutils: registry.npmmirror.com/domutils/2.8.0
-      nth-check: registry.npmmirror.com/nth-check/2.1.1
-    dev: true
-
-  registry.npmmirror.com/css-tree/1.0.0-alpha.37:
-    resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz}
-    name: css-tree
-    version: 1.0.0-alpha.37
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      mdn-data: registry.npmmirror.com/mdn-data/2.0.4
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    dev: true
-
-  registry.npmmirror.com/css-tree/1.1.3:
-    resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz}
-    name: css-tree
-    version: 1.1.3
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      mdn-data: registry.npmmirror.com/mdn-data/2.0.14
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    dev: true
-
-  registry.npmmirror.com/css-what/3.4.2:
-    resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz}
-    name: css-what
-    version: 3.4.2
-    engines: {node: '>= 6'}
-    dev: true
-
-  registry.npmmirror.com/css-what/6.1.0:
-    resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz}
-    name: css-what
-    version: 6.1.0
-    engines: {node: '>= 6'}
-    dev: true
-
-  registry.npmmirror.com/cssesc/3.0.0:
-    resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz}
-    name: cssesc
-    version: 3.0.0
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/cssnano-preset-default/4.0.8:
-    resolution: {integrity: sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz}
-    name: cssnano-preset-default
-    version: 4.0.8
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      css-declaration-sorter: registry.npmmirror.com/css-declaration-sorter/4.0.1
-      cssnano-util-raw-cache: registry.npmmirror.com/cssnano-util-raw-cache/4.0.1
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-calc: registry.npmmirror.com/postcss-calc/7.0.5
-      postcss-colormin: registry.npmmirror.com/postcss-colormin/4.0.3
-      postcss-convert-values: registry.npmmirror.com/postcss-convert-values/4.0.1
-      postcss-discard-comments: registry.npmmirror.com/postcss-discard-comments/4.0.2
-      postcss-discard-duplicates: registry.npmmirror.com/postcss-discard-duplicates/4.0.2
-      postcss-discard-empty: registry.npmmirror.com/postcss-discard-empty/4.0.1
-      postcss-discard-overridden: registry.npmmirror.com/postcss-discard-overridden/4.0.1
-      postcss-merge-longhand: registry.npmmirror.com/postcss-merge-longhand/4.0.11
-      postcss-merge-rules: registry.npmmirror.com/postcss-merge-rules/4.0.3
-      postcss-minify-font-values: registry.npmmirror.com/postcss-minify-font-values/4.0.2
-      postcss-minify-gradients: registry.npmmirror.com/postcss-minify-gradients/4.0.2
-      postcss-minify-params: registry.npmmirror.com/postcss-minify-params/4.0.2
-      postcss-minify-selectors: registry.npmmirror.com/postcss-minify-selectors/4.0.2
-      postcss-normalize-charset: registry.npmmirror.com/postcss-normalize-charset/4.0.1
-      postcss-normalize-display-values: registry.npmmirror.com/postcss-normalize-display-values/4.0.2
-      postcss-normalize-positions: registry.npmmirror.com/postcss-normalize-positions/4.0.2
-      postcss-normalize-repeat-style: registry.npmmirror.com/postcss-normalize-repeat-style/4.0.2
-      postcss-normalize-string: registry.npmmirror.com/postcss-normalize-string/4.0.2
-      postcss-normalize-timing-functions: registry.npmmirror.com/postcss-normalize-timing-functions/4.0.2
-      postcss-normalize-unicode: registry.npmmirror.com/postcss-normalize-unicode/4.0.1
-      postcss-normalize-url: registry.npmmirror.com/postcss-normalize-url/4.0.1
-      postcss-normalize-whitespace: registry.npmmirror.com/postcss-normalize-whitespace/4.0.2
-      postcss-ordered-values: registry.npmmirror.com/postcss-ordered-values/4.1.2
-      postcss-reduce-initial: registry.npmmirror.com/postcss-reduce-initial/4.0.3
-      postcss-reduce-transforms: registry.npmmirror.com/postcss-reduce-transforms/4.0.2
-      postcss-svgo: registry.npmmirror.com/postcss-svgo/4.0.3
-      postcss-unique-selectors: registry.npmmirror.com/postcss-unique-selectors/4.0.1
-    dev: true
-
-  registry.npmmirror.com/cssnano-util-get-arguments/4.0.0:
-    resolution: {integrity: sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz}
-    name: cssnano-util-get-arguments
-    version: 4.0.0
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/cssnano-util-get-match/4.0.0:
-    resolution: {integrity: sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz}
-    name: cssnano-util-get-match
-    version: 4.0.0
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/cssnano-util-raw-cache/4.0.1:
-    resolution: {integrity: sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz}
-    name: cssnano-util-raw-cache
-    version: 4.0.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/cssnano-util-same-parent/4.0.1:
-    resolution: {integrity: sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz}
-    name: cssnano-util-same-parent
-    version: 4.0.1
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/cssnano/4.1.11:
-    resolution: {integrity: sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano/-/cssnano-4.1.11.tgz}
-    name: cssnano
-    version: 4.1.11
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      cosmiconfig: registry.npmmirror.com/cosmiconfig/5.2.1
-      cssnano-preset-default: registry.npmmirror.com/cssnano-preset-default/4.0.8
-      is-resolvable: registry.npmmirror.com/is-resolvable/1.1.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/csso/4.2.0:
-    resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz}
-    name: csso
-    version: 4.2.0
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      css-tree: registry.npmmirror.com/css-tree/1.1.3
-    dev: true
-
-  registry.npmmirror.com/csstype/3.1.1:
-    resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-3.1.1.tgz}
-    name: csstype
-    version: 3.1.1
-
-  registry.npmmirror.com/cyclist/1.0.1:
-    resolution: {integrity: sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cyclist/-/cyclist-1.0.1.tgz}
-    name: cyclist
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/dashdash/1.14.1:
-    resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz}
-    name: dashdash
-    version: 1.14.1
-    engines: {node: '>=0.10'}
-    dependencies:
-      assert-plus: registry.npmmirror.com/assert-plus/1.0.0
-    dev: true
-
-  registry.npmmirror.com/date-fns/1.30.1:
-    resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/date-fns/-/date-fns-1.30.1.tgz}
-    name: date-fns
-    version: 1.30.1
-    dev: true
-
-  registry.npmmirror.com/de-indent/1.0.2:
-    resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz}
-    name: de-indent
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/debug/2.6.9:
-    resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz}
-    name: debug
-    version: 2.6.9
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.0.0
-    dev: true
-
-  registry.npmmirror.com/debug/2.6.9_supports-color@6.1.0:
-    resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz}
-    id: registry.npmmirror.com/debug/2.6.9
-    name: debug
-    version: 2.6.9
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.0.0
-      supports-color: registry.npmmirror.com/supports-color/6.1.0
-    dev: true
-
-  registry.npmmirror.com/debug/3.1.0:
-    resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz}
-    name: debug
-    version: 3.1.0
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.0.0
-    dev: false
-
-  registry.npmmirror.com/debug/3.2.7:
-    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz}
-    name: debug
-    version: 3.2.7
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.1.3
-    dev: true
-
-  registry.npmmirror.com/debug/3.2.7_supports-color@6.1.0:
-    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz}
-    id: registry.npmmirror.com/debug/3.2.7
-    name: debug
-    version: 3.2.7
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.1.3
-      supports-color: registry.npmmirror.com/supports-color/6.1.0
-    dev: true
-
-  registry.npmmirror.com/debug/4.3.4:
-    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz}
-    name: debug
-    version: 4.3.4
-    engines: {node: '>=6.0'}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.1.2
-    dev: true
-
-  registry.npmmirror.com/debug/4.3.4_supports-color@6.1.0:
-    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz}
-    id: registry.npmmirror.com/debug/4.3.4
-    name: debug
-    version: 4.3.4
-    engines: {node: '>=6.0'}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.1.2
-      supports-color: registry.npmmirror.com/supports-color/6.1.0
-    dev: true
-
-  registry.npmmirror.com/decamelize/1.2.0:
-    resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz}
-    name: decamelize
-    version: 1.2.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/decode-uri-component/0.2.0:
-    resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz}
-    name: decode-uri-component
-    version: 0.2.0
-    engines: {node: '>=0.10'}
-    dev: true
-
-  registry.npmmirror.com/dedent/0.7.0:
-    resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz}
-    name: dedent
-    version: 0.7.0
-    dev: true
-
-  registry.npmmirror.com/deep-equal/1.1.1:
-    resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz}
-    name: deep-equal
-    version: 1.1.1
-    dependencies:
-      is-arguments: registry.npmmirror.com/is-arguments/1.1.1
-      is-date-object: registry.npmmirror.com/is-date-object/1.0.5
-      is-regex: registry.npmmirror.com/is-regex/1.1.4
-      object-is: registry.npmmirror.com/object-is/1.1.5
-      object-keys: registry.npmmirror.com/object-keys/1.1.1
-      regexp.prototype.flags: registry.npmmirror.com/regexp.prototype.flags/1.4.3
-    dev: true
-
-  registry.npmmirror.com/deep-is/0.1.4:
-    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz}
-    name: deep-is
-    version: 0.1.4
-    dev: true
-
-  registry.npmmirror.com/deepmerge/1.5.2:
-    resolution: {integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz}
-    name: deepmerge
-    version: 1.5.2
-    engines: {node: '>=0.10.0'}
-
-  registry.npmmirror.com/deepmerge/4.2.2:
-    resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deepmerge/-/deepmerge-4.2.2.tgz}
-    name: deepmerge
-    version: 4.2.2
-    engines: {node: '>=0.10.0'}
-    dev: false
-
-  registry.npmmirror.com/default-gateway/4.2.0:
-    resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/default-gateway/-/default-gateway-4.2.0.tgz}
-    name: default-gateway
-    version: 4.2.0
-    engines: {node: '>=6'}
-    dependencies:
-      execa: registry.npmmirror.com/execa/1.0.0
-      ip-regex: registry.npmmirror.com/ip-regex/2.1.0
-    dev: true
-
-  registry.npmmirror.com/default-gateway/5.0.5:
-    resolution: {integrity: sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/default-gateway/-/default-gateway-5.0.5.tgz}
-    name: default-gateway
-    version: 5.0.5
-    engines: {node: ^8.12.0 || >=9.7.0}
-    dependencies:
-      execa: registry.npmmirror.com/execa/3.4.0
-    dev: true
-
-  registry.npmmirror.com/defaults/1.0.4:
-    resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz}
-    name: defaults
-    version: 1.0.4
-    dependencies:
-      clone: registry.npmmirror.com/clone/1.0.4
-    dev: true
-
-  registry.npmmirror.com/define-properties/1.1.4:
-    resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-properties/-/define-properties-1.1.4.tgz}
-    name: define-properties
-    version: 1.1.4
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-property-descriptors: registry.npmmirror.com/has-property-descriptors/1.0.0
-      object-keys: registry.npmmirror.com/object-keys/1.1.1
-    dev: true
-
-  registry.npmmirror.com/define-property/0.2.5:
-    resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz}
-    name: define-property
-    version: 0.2.5
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-descriptor: registry.npmmirror.com/is-descriptor/0.1.6
-    dev: true
-
-  registry.npmmirror.com/define-property/1.0.0:
-    resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz}
-    name: define-property
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-descriptor: registry.npmmirror.com/is-descriptor/1.0.2
-    dev: true
-
-  registry.npmmirror.com/define-property/2.0.2:
-    resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz}
-    name: define-property
-    version: 2.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-descriptor: registry.npmmirror.com/is-descriptor/1.0.2
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/del/4.1.1:
-    resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/del/-/del-4.1.1.tgz}
-    name: del
-    version: 4.1.1
-    engines: {node: '>=6'}
-    dependencies:
-      '@types/glob': registry.npmmirror.com/@types/glob/7.2.0
-      globby: registry.npmmirror.com/globby/6.1.0
-      is-path-cwd: registry.npmmirror.com/is-path-cwd/2.2.0
-      is-path-in-cwd: registry.npmmirror.com/is-path-in-cwd/2.1.0
-      p-map: registry.npmmirror.com/p-map/2.1.0
-      pify: registry.npmmirror.com/pify/4.0.1
-      rimraf: registry.npmmirror.com/rimraf/2.7.1
-    dev: true
-
-  registry.npmmirror.com/del/5.1.0:
-    resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/del/-/del-5.1.0.tgz}
-    name: del
-    version: 5.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      globby: registry.npmmirror.com/globby/10.0.2
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      is-path-cwd: registry.npmmirror.com/is-path-cwd/2.2.0
-      is-path-inside: registry.npmmirror.com/is-path-inside/3.0.3
-      p-map: registry.npmmirror.com/p-map/3.0.0
-      rimraf: registry.npmmirror.com/rimraf/3.0.2
-      slash: registry.npmmirror.com/slash/3.0.0
-    dev: true
-
-  registry.npmmirror.com/delayed-stream/1.0.0:
-    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz}
-    name: delayed-stream
-    version: 1.0.0
-    engines: {node: '>=0.4.0'}
-    dev: true
-
-  registry.npmmirror.com/depd/1.1.2:
-    resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz}
-    name: depd
-    version: 1.1.2
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/depd/2.0.0:
-    resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz}
-    name: depd
-    version: 2.0.0
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/des.js/1.0.1:
-    resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/des.js/-/des.js-1.0.1.tgz}
-    name: des.js
-    version: 1.0.1
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1
-    dev: true
-
-  registry.npmmirror.com/destroy/1.2.0:
-    resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz}
-    name: destroy
-    version: 1.2.0
-    engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-    dev: true
-
-  registry.npmmirror.com/detect-node/2.1.0:
-    resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz}
-    name: detect-node
-    version: 2.1.0
-    dev: true
-
-  registry.npmmirror.com/diffie-hellman/5.0.3:
-    resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz}
-    name: diffie-hellman
-    version: 5.0.3
-    dependencies:
-      bn.js: registry.npmmirror.com/bn.js/4.12.0
-      miller-rabin: registry.npmmirror.com/miller-rabin/4.0.1
-      randombytes: registry.npmmirror.com/randombytes/2.1.0
-    dev: true
-
-  registry.npmmirror.com/dir-glob/2.2.2:
-    resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dir-glob/-/dir-glob-2.2.2.tgz}
-    name: dir-glob
-    version: 2.2.2
-    engines: {node: '>=4'}
-    dependencies:
-      path-type: registry.npmmirror.com/path-type/3.0.0
-    dev: true
-
-  registry.npmmirror.com/dir-glob/3.0.1:
-    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz}
-    name: dir-glob
-    version: 3.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      path-type: registry.npmmirror.com/path-type/4.0.0
-    dev: true
-
-  registry.npmmirror.com/dns-equal/1.0.0:
-    resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz}
-    name: dns-equal
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/dns-packet/1.3.4:
-    resolution: {integrity: sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dns-packet/-/dns-packet-1.3.4.tgz}
-    name: dns-packet
-    version: 1.3.4
-    dependencies:
-      ip: registry.npmmirror.com/ip/1.1.8
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/dns-txt/2.0.2:
-    resolution: {integrity: sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dns-txt/-/dns-txt-2.0.2.tgz}
-    name: dns-txt
-    version: 2.0.2
-    dependencies:
-      buffer-indexof: registry.npmmirror.com/buffer-indexof/1.1.1
-    dev: true
-
-  registry.npmmirror.com/doctrine/3.0.0:
-    resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz}
-    name: doctrine
-    version: 3.0.0
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      esutils: registry.npmmirror.com/esutils/2.0.3
-    dev: true
-
-  registry.npmmirror.com/dom-converter/0.2.0:
-    resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz}
-    name: dom-converter
-    version: 0.2.0
-    dependencies:
-      utila: registry.npmmirror.com/utila/0.4.0
-    dev: true
-
-  registry.npmmirror.com/dom-serializer/0.2.2:
-    resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz}
-    name: dom-serializer
-    version: 0.2.2
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-      entities: registry.npmmirror.com/entities/2.2.0
-    dev: true
-
-  registry.npmmirror.com/dom-serializer/1.4.1:
-    resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz}
-    name: dom-serializer
-    version: 1.4.1
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-      domhandler: registry.npmmirror.com/domhandler/4.3.1
-      entities: registry.npmmirror.com/entities/2.2.0
-    dev: true
-
-  registry.npmmirror.com/domain-browser/1.2.0:
-    resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz}
-    name: domain-browser
-    version: 1.2.0
-    engines: {node: '>=0.4', npm: '>=1.2'}
-    dev: true
-
-  registry.npmmirror.com/domelementtype/1.3.1:
-    resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz}
-    name: domelementtype
-    version: 1.3.1
-    dev: true
-
-  registry.npmmirror.com/domelementtype/2.3.0:
-    resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz}
-    name: domelementtype
-    version: 2.3.0
-    dev: true
-
-  registry.npmmirror.com/domhandler/4.3.1:
-    resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz}
-    name: domhandler
-    version: 4.3.1
-    engines: {node: '>= 4'}
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-    dev: true
-
-  registry.npmmirror.com/domutils/1.7.0:
-    resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz}
-    name: domutils
-    version: 1.7.0
-    dependencies:
-      dom-serializer: registry.npmmirror.com/dom-serializer/0.2.2
-      domelementtype: registry.npmmirror.com/domelementtype/1.3.1
-    dev: true
-
-  registry.npmmirror.com/domutils/2.8.0:
-    resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz}
-    name: domutils
-    version: 2.8.0
-    dependencies:
-      dom-serializer: registry.npmmirror.com/dom-serializer/1.4.1
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-      domhandler: registry.npmmirror.com/domhandler/4.3.1
-    dev: true
-
-  registry.npmmirror.com/dot-prop/5.3.0:
-    resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz}
-    name: dot-prop
-    version: 5.3.0
-    engines: {node: '>=8'}
-    dependencies:
-      is-obj: registry.npmmirror.com/is-obj/2.0.0
-    dev: true
-
-  registry.npmmirror.com/dotenv-expand/5.1.0:
-    resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz}
-    name: dotenv-expand
-    version: 5.1.0
-    dev: true
-
-  registry.npmmirror.com/dotenv/8.6.0:
-    resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dotenv/-/dotenv-8.6.0.tgz}
-    name: dotenv
-    version: 8.6.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/duplexer/0.1.2:
-    resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz}
-    name: duplexer
-    version: 0.1.2
-    dev: true
-
-  registry.npmmirror.com/duplexify/3.7.1:
-    resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz}
-    name: duplexify
-    version: 3.7.1
-    dependencies:
-      end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-      stream-shift: registry.npmmirror.com/stream-shift/1.0.1
-    dev: true
-
-  registry.npmmirror.com/easy-stack/1.0.1:
-    resolution: {integrity: sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz}
-    name: easy-stack
-    version: 1.0.1
-    engines: {node: '>=6.0.0'}
-    dev: true
-
-  registry.npmmirror.com/ecc-jsbn/0.1.2:
-    resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz}
-    name: ecc-jsbn
-    version: 0.1.2
-    dependencies:
-      jsbn: registry.npmmirror.com/jsbn/0.1.1
-      safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2
-    dev: true
-
-  registry.npmmirror.com/ee-first/1.1.1:
-    resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz}
-    name: ee-first
-    version: 1.1.1
-    dev: true
-
-  registry.npmmirror.com/ejs/2.7.4:
-    resolution: {integrity: sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ejs/-/ejs-2.7.4.tgz}
-    name: ejs
-    version: 2.7.4
-    engines: {node: '>=0.10.0'}
-    requiresBuild: true
-    dev: true
-
-  registry.npmmirror.com/electron-to-chromium/1.4.284:
-    resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz}
-    name: electron-to-chromium
-    version: 1.4.284
-    dev: true
-
-  registry.npmmirror.com/elegant-spinner/1.0.1:
-    resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz}
-    name: elegant-spinner
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/element-ui/2.15.10_vue@2.7.13:
-    resolution: {integrity: sha512-jmD++mU2wKXbisvx4fxOl2mHaU+HWHTAq/3Wf8x9Bwyu4GdDZPLABb+CGi3DWN6fPqdgRcd74aX39DO+YHObLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/element-ui/-/element-ui-2.15.10.tgz}
-    id: registry.npmmirror.com/element-ui/2.15.10
-    name: element-ui
-    version: 2.15.10
-    peerDependencies:
-      vue: ^2.5.17
-    dependencies:
-      async-validator: registry.npmmirror.com/async-validator/1.8.5
-      babel-helper-vue-jsx-merge-props: registry.npmmirror.com/babel-helper-vue-jsx-merge-props/2.0.3
-      deepmerge: registry.npmmirror.com/deepmerge/1.5.2
-      normalize-wheel: registry.npmmirror.com/normalize-wheel/1.0.1
-      resize-observer-polyfill: registry.npmmirror.com/resize-observer-polyfill/1.5.1
-      throttle-debounce: registry.npmmirror.com/throttle-debounce/1.1.0
-      vue: registry.npmmirror.com/vue/2.7.13
-    dev: false
-
-  registry.npmmirror.com/elliptic/6.5.4:
-    resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz}
-    name: elliptic
-    version: 6.5.4
-    dependencies:
-      bn.js: registry.npmmirror.com/bn.js/4.12.0
-      brorand: registry.npmmirror.com/brorand/1.1.0
-      hash.js: registry.npmmirror.com/hash.js/1.1.7
-      hmac-drbg: registry.npmmirror.com/hmac-drbg/1.0.1
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1
-      minimalistic-crypto-utils: registry.npmmirror.com/minimalistic-crypto-utils/1.0.1
-    dev: true
-
-  registry.npmmirror.com/emoji-regex/7.0.3:
-    resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz}
-    name: emoji-regex
-    version: 7.0.3
-    dev: true
-
-  registry.npmmirror.com/emoji-regex/8.0.0:
-    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz}
-    name: emoji-regex
-    version: 8.0.0
-    dev: true
-
-  registry.npmmirror.com/emojis-list/2.1.0:
-    resolution: {integrity: sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emojis-list/-/emojis-list-2.1.0.tgz}
-    name: emojis-list
-    version: 2.1.0
-    engines: {node: '>= 0.10'}
-    dev: true
-
-  registry.npmmirror.com/emojis-list/3.0.0:
-    resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz}
-    name: emojis-list
-    version: 3.0.0
-    engines: {node: '>= 4'}
-    dev: true
-
-  registry.npmmirror.com/encodeurl/1.0.2:
-    resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz}
-    name: encodeurl
-    version: 1.0.2
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/end-of-stream/1.4.4:
-    resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz}
-    name: end-of-stream
-    version: 1.4.4
-    dependencies:
-      once: registry.npmmirror.com/once/1.4.0
-    dev: true
-
-  registry.npmmirror.com/enhanced-resolve/4.5.0:
-    resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz}
-    name: enhanced-resolve
-    version: 4.5.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      memory-fs: registry.npmmirror.com/memory-fs/0.5.0
-      tapable: registry.npmmirror.com/tapable/1.1.3
-    dev: true
-
-  registry.npmmirror.com/entities/2.2.0:
-    resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz}
-    name: entities
-    version: 2.2.0
-    dev: true
-
-  registry.npmmirror.com/errno/0.1.8:
-    resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz}
-    name: errno
-    version: 0.1.8
-    hasBin: true
-    dependencies:
-      prr: registry.npmmirror.com/prr/1.0.1
-    dev: true
-
-  registry.npmmirror.com/error-ex/1.3.2:
-    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz}
-    name: error-ex
-    version: 1.3.2
-    dependencies:
-      is-arrayish: registry.npmmirror.com/is-arrayish/0.2.1
-    dev: true
-
-  registry.npmmirror.com/error-stack-parser/2.1.4:
-    resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz}
-    name: error-stack-parser
-    version: 2.1.4
-    dependencies:
-      stackframe: registry.npmmirror.com/stackframe/1.3.4
-    dev: true
-
-  registry.npmmirror.com/es-abstract/1.20.4:
-    resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-abstract/-/es-abstract-1.20.4.tgz}
-    name: es-abstract
-    version: 1.20.4
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      es-to-primitive: registry.npmmirror.com/es-to-primitive/1.2.1
-      function-bind: registry.npmmirror.com/function-bind/1.1.1
-      function.prototype.name: registry.npmmirror.com/function.prototype.name/1.1.5
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.3
-      get-symbol-description: registry.npmmirror.com/get-symbol-description/1.0.0
-      has: registry.npmmirror.com/has/1.0.3
-      has-property-descriptors: registry.npmmirror.com/has-property-descriptors/1.0.0
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-      internal-slot: registry.npmmirror.com/internal-slot/1.0.3
-      is-callable: registry.npmmirror.com/is-callable/1.2.7
-      is-negative-zero: registry.npmmirror.com/is-negative-zero/2.0.2
-      is-regex: registry.npmmirror.com/is-regex/1.1.4
-      is-shared-array-buffer: registry.npmmirror.com/is-shared-array-buffer/1.0.2
-      is-string: registry.npmmirror.com/is-string/1.0.7
-      is-weakref: registry.npmmirror.com/is-weakref/1.0.2
-      object-inspect: registry.npmmirror.com/object-inspect/1.12.2
-      object-keys: registry.npmmirror.com/object-keys/1.1.1
-      object.assign: registry.npmmirror.com/object.assign/4.1.4
-      regexp.prototype.flags: registry.npmmirror.com/regexp.prototype.flags/1.4.3
-      safe-regex-test: registry.npmmirror.com/safe-regex-test/1.0.0
-      string.prototype.trimend: registry.npmmirror.com/string.prototype.trimend/1.0.5
-      string.prototype.trimstart: registry.npmmirror.com/string.prototype.trimstart/1.0.5
-      unbox-primitive: registry.npmmirror.com/unbox-primitive/1.0.2
-    dev: true
-
-  registry.npmmirror.com/es-array-method-boxes-properly/1.0.0:
-    resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz}
-    name: es-array-method-boxes-properly
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/es-to-primitive/1.2.1:
-    resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz}
-    name: es-to-primitive
-    version: 1.2.1
-    engines: {node: '>= 0.4'}
-    dependencies:
-      is-callable: registry.npmmirror.com/is-callable/1.2.7
-      is-date-object: registry.npmmirror.com/is-date-object/1.0.5
-      is-symbol: registry.npmmirror.com/is-symbol/1.0.4
-    dev: true
-
-  registry.npmmirror.com/escalade/3.1.1:
-    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz}
-    name: escalade
-    version: 3.1.1
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/escape-html/1.0.3:
-    resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz}
-    name: escape-html
-    version: 1.0.3
-    dev: true
-
-  registry.npmmirror.com/escape-string-regexp/1.0.5:
-    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz}
-    name: escape-string-regexp
-    version: 1.0.5
-    engines: {node: '>=0.8.0'}
-    dev: true
-
-  registry.npmmirror.com/eslint-config-prettier/6.15.0_eslint@6.8.0:
-    resolution: {integrity: sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz}
-    id: registry.npmmirror.com/eslint-config-prettier/6.15.0
-    name: eslint-config-prettier
-    version: 6.15.0
-    hasBin: true
-    peerDependencies:
-      eslint: '>=3.14.1'
-    dependencies:
-      eslint: registry.npmmirror.com/eslint/6.8.0
-      get-stdin: registry.npmmirror.com/get-stdin/6.0.0
-    dev: true
-
-  registry.npmmirror.com/eslint-loader/2.2.1_pfvmeq6opgydpezktw7j2dwffi:
-    resolution: {integrity: sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-loader/-/eslint-loader-2.2.1.tgz}
-    id: registry.npmmirror.com/eslint-loader/2.2.1
-    name: eslint-loader
-    version: 2.2.1
-    deprecated: This loader has been deprecated. Please use eslint-webpack-plugin
-    peerDependencies:
-      eslint: '>=1.6.0 <7.0.0'
-      webpack: '>=2.0.0 <5.0.0'
-    dependencies:
-      eslint: registry.npmmirror.com/eslint/6.8.0
-      loader-fs-cache: registry.npmmirror.com/loader-fs-cache/1.0.3
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-      object-hash: registry.npmmirror.com/object-hash/1.3.1
-      rimraf: registry.npmmirror.com/rimraf/2.7.1
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/eslint-plugin-prettier/3.4.1_3bzozwyml2ynmd3jiqxkfjk2we:
-    resolution: {integrity: sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz}
-    id: registry.npmmirror.com/eslint-plugin-prettier/3.4.1
-    name: eslint-plugin-prettier
-    version: 3.4.1
-    engines: {node: '>=6.0.0'}
-    peerDependencies:
-      eslint: '>=5.0.0'
-      eslint-config-prettier: '*'
-      prettier: '>=1.13.0'
-    peerDependenciesMeta:
-      eslint-config-prettier:
-        optional: true
-    dependencies:
-      eslint: registry.npmmirror.com/eslint/6.8.0
-      prettier: registry.npmmirror.com/prettier/1.19.1
-      prettier-linter-helpers: registry.npmmirror.com/prettier-linter-helpers/1.0.0
-    dev: true
-
-  registry.npmmirror.com/eslint-plugin-vue/6.2.2_eslint@6.8.0:
-    resolution: {integrity: sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz}
-    id: registry.npmmirror.com/eslint-plugin-vue/6.2.2
-    name: eslint-plugin-vue
-    version: 6.2.2
-    engines: {node: '>=8.10'}
-    peerDependencies:
-      eslint: ^5.0.0 || ^6.0.0
-    dependencies:
-      eslint: registry.npmmirror.com/eslint/6.8.0
-      natural-compare: registry.npmmirror.com/natural-compare/1.4.0
-      semver: registry.npmmirror.com/semver/5.7.1
-      vue-eslint-parser: registry.npmmirror.com/vue-eslint-parser/7.11.0_eslint@6.8.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/eslint-scope/4.0.3:
-    resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-scope/-/eslint-scope-4.0.3.tgz}
-    name: eslint-scope
-    version: 4.0.3
-    engines: {node: '>=4.0.0'}
-    dependencies:
-      esrecurse: registry.npmmirror.com/esrecurse/4.3.0
-      estraverse: registry.npmmirror.com/estraverse/4.3.0
-    dev: true
-
-  registry.npmmirror.com/eslint-scope/5.1.1:
-    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz}
-    name: eslint-scope
-    version: 5.1.1
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      esrecurse: registry.npmmirror.com/esrecurse/4.3.0
-      estraverse: registry.npmmirror.com/estraverse/4.3.0
-    dev: true
-
-  registry.npmmirror.com/eslint-utils/1.4.3:
-    resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-utils/-/eslint-utils-1.4.3.tgz}
-    name: eslint-utils
-    version: 1.4.3
-    engines: {node: '>=6'}
-    dependencies:
-      eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/1.3.0
-    dev: true
-
-  registry.npmmirror.com/eslint-visitor-keys/1.3.0:
-    resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz}
-    name: eslint-visitor-keys
-    version: 1.3.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/eslint/6.8.0:
-    resolution: {integrity: sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint/-/eslint-6.8.0.tgz}
-    name: eslint
-    version: 6.8.0
-    engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
-    hasBin: true
-    dependencies:
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      ajv: registry.npmmirror.com/ajv/6.12.6
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      cross-spawn: registry.npmmirror.com/cross-spawn/6.0.5
-      debug: registry.npmmirror.com/debug/4.3.4
-      doctrine: registry.npmmirror.com/doctrine/3.0.0
-      eslint-scope: registry.npmmirror.com/eslint-scope/5.1.1
-      eslint-utils: registry.npmmirror.com/eslint-utils/1.4.3
-      eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/1.3.0
-      espree: registry.npmmirror.com/espree/6.2.1
-      esquery: registry.npmmirror.com/esquery/1.4.0
-      esutils: registry.npmmirror.com/esutils/2.0.3
-      file-entry-cache: registry.npmmirror.com/file-entry-cache/5.0.1
-      functional-red-black-tree: registry.npmmirror.com/functional-red-black-tree/1.0.1
-      glob-parent: registry.npmmirror.com/glob-parent/5.1.2
-      globals: registry.npmmirror.com/globals/12.4.0
-      ignore: registry.npmmirror.com/ignore/4.0.6
-      import-fresh: registry.npmmirror.com/import-fresh/3.3.0
-      imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4
-      inquirer: registry.npmmirror.com/inquirer/7.3.3
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      js-yaml: registry.npmmirror.com/js-yaml/3.14.1
-      json-stable-stringify-without-jsonify: registry.npmmirror.com/json-stable-stringify-without-jsonify/1.0.1
-      levn: registry.npmmirror.com/levn/0.3.0
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-      natural-compare: registry.npmmirror.com/natural-compare/1.4.0
-      optionator: registry.npmmirror.com/optionator/0.8.3
-      progress: registry.npmmirror.com/progress/2.0.3
-      regexpp: registry.npmmirror.com/regexpp/2.0.1
-      semver: registry.npmmirror.com/semver/6.3.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0
-      strip-json-comments: registry.npmmirror.com/strip-json-comments/3.1.1
-      table: registry.npmmirror.com/table/5.4.6
-      text-table: registry.npmmirror.com/text-table/0.2.0
-      v8-compile-cache: registry.npmmirror.com/v8-compile-cache/2.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/espree/6.2.1:
-    resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/espree/-/espree-6.2.1.tgz}
-    name: espree
-    version: 6.2.1
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      acorn: registry.npmmirror.com/acorn/7.4.1
-      acorn-jsx: registry.npmmirror.com/acorn-jsx/5.3.2_acorn@7.4.1
-      eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/1.3.0
-    dev: true
-
-  registry.npmmirror.com/esprima/4.0.1:
-    resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz}
-    name: esprima
-    version: 4.0.1
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/esquery/1.4.0:
-    resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz}
-    name: esquery
-    version: 1.4.0
-    engines: {node: '>=0.10'}
-    dependencies:
-      estraverse: registry.npmmirror.com/estraverse/5.3.0
-    dev: true
-
-  registry.npmmirror.com/esrecurse/4.3.0:
-    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz}
-    name: esrecurse
-    version: 4.3.0
-    engines: {node: '>=4.0'}
-    dependencies:
-      estraverse: registry.npmmirror.com/estraverse/5.3.0
-    dev: true
-
-  registry.npmmirror.com/estraverse/4.3.0:
-    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz}
-    name: estraverse
-    version: 4.3.0
-    engines: {node: '>=4.0'}
-    dev: true
-
-  registry.npmmirror.com/estraverse/5.3.0:
-    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz}
-    name: estraverse
-    version: 5.3.0
-    engines: {node: '>=4.0'}
-    dev: true
-
-  registry.npmmirror.com/esutils/2.0.3:
-    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz}
-    name: esutils
-    version: 2.0.3
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/etag/1.8.1:
-    resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz}
-    name: etag
-    version: 1.8.1
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/event-pubsub/4.3.0:
-    resolution: {integrity: sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz}
-    name: event-pubsub
-    version: 4.3.0
-    engines: {node: '>=4.0.0'}
-    dev: true
-
-  registry.npmmirror.com/eventemitter3/4.0.7:
-    resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz}
-    name: eventemitter3
-    version: 4.0.7
-    dev: true
-
-  registry.npmmirror.com/events/3.3.0:
-    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/events/-/events-3.3.0.tgz}
-    name: events
-    version: 3.3.0
-    engines: {node: '>=0.8.x'}
-    dev: true
-
-  registry.npmmirror.com/eventsource/2.0.2:
-    resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eventsource/-/eventsource-2.0.2.tgz}
-    name: eventsource
-    version: 2.0.2
-    engines: {node: '>=12.0.0'}
-    dev: true
-
-  registry.npmmirror.com/evp_bytestokey/1.0.3:
-    resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz}
-    name: evp_bytestokey
-    version: 1.0.3
-    dependencies:
-      md5.js: registry.npmmirror.com/md5.js/1.3.5
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/execa/0.8.0:
-    resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-0.8.0.tgz}
-    name: execa
-    version: 0.8.0
-    engines: {node: '>=4'}
-    dependencies:
-      cross-spawn: registry.npmmirror.com/cross-spawn/5.1.0
-      get-stream: registry.npmmirror.com/get-stream/3.0.0
-      is-stream: registry.npmmirror.com/is-stream/1.1.0
-      npm-run-path: registry.npmmirror.com/npm-run-path/2.0.2
-      p-finally: registry.npmmirror.com/p-finally/1.0.0
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-      strip-eof: registry.npmmirror.com/strip-eof/1.0.0
-    dev: true
-
-  registry.npmmirror.com/execa/1.0.0:
-    resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz}
-    name: execa
-    version: 1.0.0
-    engines: {node: '>=6'}
-    dependencies:
-      cross-spawn: registry.npmmirror.com/cross-spawn/6.0.5
-      get-stream: registry.npmmirror.com/get-stream/4.1.0
-      is-stream: registry.npmmirror.com/is-stream/1.1.0
-      npm-run-path: registry.npmmirror.com/npm-run-path/2.0.2
-      p-finally: registry.npmmirror.com/p-finally/1.0.0
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-      strip-eof: registry.npmmirror.com/strip-eof/1.0.0
-    dev: true
-
-  registry.npmmirror.com/execa/2.1.0:
-    resolution: {integrity: sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-2.1.0.tgz}
-    name: execa
-    version: 2.1.0
-    engines: {node: ^8.12.0 || >=9.7.0}
-    dependencies:
-      cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3
-      get-stream: registry.npmmirror.com/get-stream/5.2.0
-      is-stream: registry.npmmirror.com/is-stream/2.0.1
-      merge-stream: registry.npmmirror.com/merge-stream/2.0.0
-      npm-run-path: registry.npmmirror.com/npm-run-path/3.1.0
-      onetime: registry.npmmirror.com/onetime/5.1.2
-      p-finally: registry.npmmirror.com/p-finally/2.0.1
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-      strip-final-newline: registry.npmmirror.com/strip-final-newline/2.0.0
-    dev: true
-
-  registry.npmmirror.com/execa/3.4.0:
-    resolution: {integrity: sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-3.4.0.tgz}
-    name: execa
-    version: 3.4.0
-    engines: {node: ^8.12.0 || >=9.7.0}
-    dependencies:
-      cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3
-      get-stream: registry.npmmirror.com/get-stream/5.2.0
-      human-signals: registry.npmmirror.com/human-signals/1.1.1
-      is-stream: registry.npmmirror.com/is-stream/2.0.1
-      merge-stream: registry.npmmirror.com/merge-stream/2.0.0
-      npm-run-path: registry.npmmirror.com/npm-run-path/4.0.1
-      onetime: registry.npmmirror.com/onetime/5.1.2
-      p-finally: registry.npmmirror.com/p-finally/2.0.1
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-      strip-final-newline: registry.npmmirror.com/strip-final-newline/2.0.0
-    dev: true
-
-  registry.npmmirror.com/expand-brackets/2.1.4:
-    resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz}
-    name: expand-brackets
-    version: 2.1.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/2.6.9
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      posix-character-classes: registry.npmmirror.com/posix-character-classes/0.1.1
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/expand-brackets/2.1.4_supports-color@6.1.0:
-    resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz}
-    id: registry.npmmirror.com/expand-brackets/2.1.4
-    name: expand-brackets
-    version: 2.1.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/2.6.9_supports-color@6.1.0
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      posix-character-classes: registry.npmmirror.com/posix-character-classes/0.1.1
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2_supports-color@6.1.0
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/express/4.18.2:
-    resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/express/-/express-4.18.2.tgz}
-    name: express
-    version: 4.18.2
-    engines: {node: '>= 0.10.0'}
-    dependencies:
-      accepts: registry.npmmirror.com/accepts/1.3.8
-      array-flatten: registry.npmmirror.com/array-flatten/1.1.1
-      body-parser: registry.npmmirror.com/body-parser/1.20.1
-      content-disposition: registry.npmmirror.com/content-disposition/0.5.4
-      content-type: registry.npmmirror.com/content-type/1.0.4
-      cookie: registry.npmmirror.com/cookie/0.5.0
-      cookie-signature: registry.npmmirror.com/cookie-signature/1.0.6
-      debug: registry.npmmirror.com/debug/2.6.9
-      depd: registry.npmmirror.com/depd/2.0.0
-      encodeurl: registry.npmmirror.com/encodeurl/1.0.2
-      escape-html: registry.npmmirror.com/escape-html/1.0.3
-      etag: registry.npmmirror.com/etag/1.8.1
-      finalhandler: registry.npmmirror.com/finalhandler/1.2.0
-      fresh: registry.npmmirror.com/fresh/0.5.2
-      http-errors: registry.npmmirror.com/http-errors/2.0.0
-      merge-descriptors: registry.npmmirror.com/merge-descriptors/1.0.1
-      methods: registry.npmmirror.com/methods/1.1.2
-      on-finished: registry.npmmirror.com/on-finished/2.4.1
-      parseurl: registry.npmmirror.com/parseurl/1.3.3
-      path-to-regexp: registry.npmmirror.com/path-to-regexp/0.1.7
-      proxy-addr: registry.npmmirror.com/proxy-addr/2.0.7
-      qs: registry.npmmirror.com/qs/6.11.0
-      range-parser: registry.npmmirror.com/range-parser/1.2.1
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-      send: registry.npmmirror.com/send/0.18.0
-      serve-static: registry.npmmirror.com/serve-static/1.15.0
-      setprototypeof: registry.npmmirror.com/setprototypeof/1.2.0
-      statuses: registry.npmmirror.com/statuses/2.0.1
-      type-is: registry.npmmirror.com/type-is/1.6.18
-      utils-merge: registry.npmmirror.com/utils-merge/1.0.1
-      vary: registry.npmmirror.com/vary/1.1.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/express/4.18.2_supports-color@6.1.0:
-    resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/express/-/express-4.18.2.tgz}
-    id: registry.npmmirror.com/express/4.18.2
-    name: express
-    version: 4.18.2
-    engines: {node: '>= 0.10.0'}
-    dependencies:
-      accepts: registry.npmmirror.com/accepts/1.3.8
-      array-flatten: registry.npmmirror.com/array-flatten/1.1.1
-      body-parser: registry.npmmirror.com/body-parser/1.20.1_supports-color@6.1.0
-      content-disposition: registry.npmmirror.com/content-disposition/0.5.4
-      content-type: registry.npmmirror.com/content-type/1.0.4
-      cookie: registry.npmmirror.com/cookie/0.5.0
-      cookie-signature: registry.npmmirror.com/cookie-signature/1.0.6
-      debug: registry.npmmirror.com/debug/2.6.9_supports-color@6.1.0
-      depd: registry.npmmirror.com/depd/2.0.0
-      encodeurl: registry.npmmirror.com/encodeurl/1.0.2
-      escape-html: registry.npmmirror.com/escape-html/1.0.3
-      etag: registry.npmmirror.com/etag/1.8.1
-      finalhandler: registry.npmmirror.com/finalhandler/1.2.0_supports-color@6.1.0
-      fresh: registry.npmmirror.com/fresh/0.5.2
-      http-errors: registry.npmmirror.com/http-errors/2.0.0
-      merge-descriptors: registry.npmmirror.com/merge-descriptors/1.0.1
-      methods: registry.npmmirror.com/methods/1.1.2
-      on-finished: registry.npmmirror.com/on-finished/2.4.1
-      parseurl: registry.npmmirror.com/parseurl/1.3.3
-      path-to-regexp: registry.npmmirror.com/path-to-regexp/0.1.7
-      proxy-addr: registry.npmmirror.com/proxy-addr/2.0.7
-      qs: registry.npmmirror.com/qs/6.11.0
-      range-parser: registry.npmmirror.com/range-parser/1.2.1
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-      send: registry.npmmirror.com/send/0.18.0_supports-color@6.1.0
-      serve-static: registry.npmmirror.com/serve-static/1.15.0_supports-color@6.1.0
-      setprototypeof: registry.npmmirror.com/setprototypeof/1.2.0
-      statuses: registry.npmmirror.com/statuses/2.0.1
-      type-is: registry.npmmirror.com/type-is/1.6.18
-      utils-merge: registry.npmmirror.com/utils-merge/1.0.1
-      vary: registry.npmmirror.com/vary/1.1.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/extend-shallow/2.0.1:
-    resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz}
-    name: extend-shallow
-    version: 2.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-extendable: registry.npmmirror.com/is-extendable/0.1.1
-    dev: true
-
-  registry.npmmirror.com/extend-shallow/3.0.2:
-    resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz}
-    name: extend-shallow
-    version: 3.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      assign-symbols: registry.npmmirror.com/assign-symbols/1.0.0
-      is-extendable: registry.npmmirror.com/is-extendable/1.0.1
-    dev: true
-
-  registry.npmmirror.com/extend/3.0.2:
-    resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz}
-    name: extend
-    version: 3.0.2
-    dev: true
-
-  registry.npmmirror.com/external-editor/3.1.0:
-    resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz}
-    name: external-editor
-    version: 3.1.0
-    engines: {node: '>=4'}
-    dependencies:
-      chardet: registry.npmmirror.com/chardet/0.7.0
-      iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24
-      tmp: registry.npmmirror.com/tmp/0.0.33
-    dev: true
-
-  registry.npmmirror.com/extglob/2.0.4:
-    resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz}
-    name: extglob
-    version: 2.0.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      define-property: registry.npmmirror.com/define-property/1.0.0
-      expand-brackets: registry.npmmirror.com/expand-brackets/2.1.4
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/extglob/2.0.4_supports-color@6.1.0:
-    resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz}
-    id: registry.npmmirror.com/extglob/2.0.4
-    name: extglob
-    version: 2.0.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      define-property: registry.npmmirror.com/define-property/1.0.0
-      expand-brackets: registry.npmmirror.com/expand-brackets/2.1.4_supports-color@6.1.0
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2_supports-color@6.1.0
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/extsprintf/1.3.0:
-    resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz}
-    name: extsprintf
-    version: 1.3.0
-    engines: {'0': node >=0.6.0}
-    dev: true
-
-  registry.npmmirror.com/fast-deep-equal/3.1.3:
-    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz}
-    name: fast-deep-equal
-    version: 3.1.3
-    dev: true
-
-  registry.npmmirror.com/fast-diff/1.2.0:
-    resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-diff/-/fast-diff-1.2.0.tgz}
-    name: fast-diff
-    version: 1.2.0
-    dev: true
-
-  registry.npmmirror.com/fast-glob/2.2.7:
-    resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-2.2.7.tgz}
-    name: fast-glob
-    version: 2.2.7
-    engines: {node: '>=4.0.0'}
-    dependencies:
-      '@mrmlnc/readdir-enhanced': registry.npmmirror.com/@mrmlnc/readdir-enhanced/2.2.1
-      '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/1.1.3
-      glob-parent: registry.npmmirror.com/glob-parent/3.1.0
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      merge2: registry.npmmirror.com/merge2/1.4.1
-      micromatch: registry.npmmirror.com/micromatch/3.1.10
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/fast-glob/3.2.12:
-    resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz}
-    name: fast-glob
-    version: 3.2.12
-    engines: {node: '>=8.6.0'}
-    dependencies:
-      '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5
-      '@nodelib/fs.walk': registry.npmmirror.com/@nodelib/fs.walk/1.2.8
-      glob-parent: registry.npmmirror.com/glob-parent/5.1.2
-      merge2: registry.npmmirror.com/merge2/1.4.1
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-    dev: true
-
-  registry.npmmirror.com/fast-json-stable-stringify/2.1.0:
-    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz}
-    name: fast-json-stable-stringify
-    version: 2.1.0
-    dev: true
-
-  registry.npmmirror.com/fast-levenshtein/2.0.6:
-    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz}
-    name: fast-levenshtein
-    version: 2.0.6
-    dev: true
-
-  registry.npmmirror.com/fastq/1.13.0:
-    resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz}
-    name: fastq
-    version: 1.13.0
-    dependencies:
-      reusify: registry.npmmirror.com/reusify/1.0.4
-    dev: true
-
-  registry.npmmirror.com/faye-websocket/0.11.4:
-    resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz}
-    name: faye-websocket
-    version: 0.11.4
-    engines: {node: '>=0.8.0'}
-    dependencies:
-      websocket-driver: registry.npmmirror.com/websocket-driver/0.7.4
-    dev: true
-
-  registry.npmmirror.com/figgy-pudding/3.5.2:
-    resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz}
-    name: figgy-pudding
-    version: 3.5.2
-    dev: true
-
-  registry.npmmirror.com/figures/1.7.0:
-    resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/figures/-/figures-1.7.0.tgz}
-    name: figures
-    version: 1.7.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-    dev: true
-
-  registry.npmmirror.com/figures/2.0.0:
-    resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz}
-    name: figures
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
-    dev: true
-
-  registry.npmmirror.com/figures/3.2.0:
-    resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz}
-    name: figures
-    version: 3.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
-    dev: true
-
-  registry.npmmirror.com/file-entry-cache/5.0.1:
-    resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz}
-    name: file-entry-cache
-    version: 5.0.1
-    engines: {node: '>=4'}
-    dependencies:
-      flat-cache: registry.npmmirror.com/flat-cache/2.0.1
-    dev: true
-
-  registry.npmmirror.com/file-loader/4.3.0_webpack@4.46.0:
-    resolution: {integrity: sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-loader/-/file-loader-4.3.0.tgz}
-    id: registry.npmmirror.com/file-loader/4.3.0
-    name: file-loader
-    version: 4.3.0
-    engines: {node: '>= 8.9.0'}
-    peerDependencies:
-      webpack: ^4.0.0
-    dependencies:
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      schema-utils: registry.npmmirror.com/schema-utils/2.7.1
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/file-uri-to-path/1.0.0:
-    resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz}
-    name: file-uri-to-path
-    version: 1.0.0
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/filesize/3.6.1:
-    resolution: {integrity: sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/filesize/-/filesize-3.6.1.tgz}
-    name: filesize
-    version: 3.6.1
-    engines: {node: '>= 0.4.0'}
-    dev: true
-
-  registry.npmmirror.com/fill-range/4.0.0:
-    resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz}
-    name: fill-range
-    version: 4.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      is-number: registry.npmmirror.com/is-number/3.0.0
-      repeat-string: registry.npmmirror.com/repeat-string/1.6.1
-      to-regex-range: registry.npmmirror.com/to-regex-range/2.1.1
-    dev: true
-
-  registry.npmmirror.com/fill-range/7.0.1:
-    resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz}
-    name: fill-range
-    version: 7.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      to-regex-range: registry.npmmirror.com/to-regex-range/5.0.1
-    dev: true
-
-  registry.npmmirror.com/finalhandler/1.2.0:
-    resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz}
-    name: finalhandler
-    version: 1.2.0
-    engines: {node: '>= 0.8'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/2.6.9
-      encodeurl: registry.npmmirror.com/encodeurl/1.0.2
-      escape-html: registry.npmmirror.com/escape-html/1.0.3
-      on-finished: registry.npmmirror.com/on-finished/2.4.1
-      parseurl: registry.npmmirror.com/parseurl/1.3.3
-      statuses: registry.npmmirror.com/statuses/2.0.1
-      unpipe: registry.npmmirror.com/unpipe/1.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/finalhandler/1.2.0_supports-color@6.1.0:
-    resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz}
-    id: registry.npmmirror.com/finalhandler/1.2.0
-    name: finalhandler
-    version: 1.2.0
-    engines: {node: '>= 0.8'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/2.6.9_supports-color@6.1.0
-      encodeurl: registry.npmmirror.com/encodeurl/1.0.2
-      escape-html: registry.npmmirror.com/escape-html/1.0.3
-      on-finished: registry.npmmirror.com/on-finished/2.4.1
-      parseurl: registry.npmmirror.com/parseurl/1.3.3
-      statuses: registry.npmmirror.com/statuses/2.0.1
-      unpipe: registry.npmmirror.com/unpipe/1.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/find-cache-dir/0.1.1:
-    resolution: {integrity: sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz}
-    name: find-cache-dir
-    version: 0.1.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      commondir: registry.npmmirror.com/commondir/1.0.1
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-      pkg-dir: registry.npmmirror.com/pkg-dir/1.0.0
-    dev: true
-
-  registry.npmmirror.com/find-cache-dir/2.1.0:
-    resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz}
-    name: find-cache-dir
-    version: 2.1.0
-    engines: {node: '>=6'}
-    dependencies:
-      commondir: registry.npmmirror.com/commondir/1.0.1
-      make-dir: registry.npmmirror.com/make-dir/2.1.0
-      pkg-dir: registry.npmmirror.com/pkg-dir/3.0.0
-    dev: true
-
-  registry.npmmirror.com/find-cache-dir/3.3.2:
-    resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz}
-    name: find-cache-dir
-    version: 3.3.2
-    engines: {node: '>=8'}
-    dependencies:
-      commondir: registry.npmmirror.com/commondir/1.0.1
-      make-dir: registry.npmmirror.com/make-dir/3.1.0
-      pkg-dir: registry.npmmirror.com/pkg-dir/4.2.0
-    dev: true
-
-  registry.npmmirror.com/find-up/1.1.2:
-    resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz}
-    name: find-up
-    version: 1.1.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      path-exists: registry.npmmirror.com/path-exists/2.1.0
-      pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1
-    dev: true
-
-  registry.npmmirror.com/find-up/3.0.0:
-    resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz}
-    name: find-up
-    version: 3.0.0
-    engines: {node: '>=6'}
-    dependencies:
-      locate-path: registry.npmmirror.com/locate-path/3.0.0
-    dev: true
-
-  registry.npmmirror.com/find-up/4.1.0:
-    resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz}
-    name: find-up
-    version: 4.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      locate-path: registry.npmmirror.com/locate-path/5.0.0
-      path-exists: registry.npmmirror.com/path-exists/4.0.0
-    dev: true
-
-  registry.npmmirror.com/flat-cache/2.0.1:
-    resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flat-cache/-/flat-cache-2.0.1.tgz}
-    name: flat-cache
-    version: 2.0.1
-    engines: {node: '>=4'}
-    dependencies:
-      flatted: registry.npmmirror.com/flatted/2.0.2
-      rimraf: registry.npmmirror.com/rimraf/2.6.3
-      write: registry.npmmirror.com/write/1.0.3
-    dev: true
-
-  registry.npmmirror.com/flatted/2.0.2:
-    resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flatted/-/flatted-2.0.2.tgz}
-    name: flatted
-    version: 2.0.2
-    dev: true
-
-  registry.npmmirror.com/flush-write-stream/1.1.1:
-    resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz}
-    name: flush-write-stream
-    version: 1.1.1
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-    dev: true
-
-  registry.npmmirror.com/follow-redirects/1.15.2_debug@4.3.4:
-    resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz}
-    id: registry.npmmirror.com/follow-redirects/1.15.2
-    name: follow-redirects
-    version: 1.15.2
-    engines: {node: '>=4.0'}
-    peerDependencies:
-      debug: '*'
-    peerDependenciesMeta:
-      debug:
-        optional: true
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-    dev: true
-
-  registry.npmmirror.com/follow-redirects/1.5.10:
-    resolution: {integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz}
-    name: follow-redirects
-    version: 1.5.10
-    engines: {node: '>=4.0'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/3.1.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: false
-
-  registry.npmmirror.com/for-in/1.0.2:
-    resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz}
-    name: for-in
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/forever-agent/0.6.1:
-    resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz}
-    name: forever-agent
-    version: 0.6.1
-    dev: true
-
-  registry.npmmirror.com/form-data/2.3.3:
-    resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz}
-    name: form-data
-    version: 2.3.3
-    engines: {node: '>= 0.12'}
-    dependencies:
-      asynckit: registry.npmmirror.com/asynckit/0.4.0
-      combined-stream: registry.npmmirror.com/combined-stream/1.0.8
-      mime-types: registry.npmmirror.com/mime-types/2.1.35
-    dev: true
-
-  registry.npmmirror.com/forwarded/0.2.0:
-    resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz}
-    name: forwarded
-    version: 0.2.0
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/fragment-cache/0.2.1:
-    resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz}
-    name: fragment-cache
-    version: 0.2.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      map-cache: registry.npmmirror.com/map-cache/0.2.2
-    dev: true
-
-  registry.npmmirror.com/fresh/0.5.2:
-    resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz}
-    name: fresh
-    version: 0.5.2
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/from2/2.3.0:
-    resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz}
-    name: from2
-    version: 2.3.0
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-    dev: true
-
-  registry.npmmirror.com/fs-extra/7.0.1:
-    resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-7.0.1.tgz}
-    name: fs-extra
-    version: 7.0.1
-    engines: {node: '>=6 <7 || >=8'}
-    dependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      jsonfile: registry.npmmirror.com/jsonfile/4.0.0
-      universalify: registry.npmmirror.com/universalify/0.1.2
-    dev: true
-
-  registry.npmmirror.com/fs-write-stream-atomic/1.0.10:
-    resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz}
-    name: fs-write-stream-atomic
-    version: 1.0.10
-    dependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      iferr: registry.npmmirror.com/iferr/0.1.5
-      imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-    dev: true
-
-  registry.npmmirror.com/fs.realpath/1.0.0:
-    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz}
-    name: fs.realpath
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/fsevents/1.2.13:
-    resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz}
-    name: fsevents
-    version: 1.2.13
-    engines: {node: '>= 4.0'}
-    os: [darwin]
-    deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
-    requiresBuild: true
-    dependencies:
-      bindings: registry.npmmirror.com/bindings/1.5.0
-      nan: registry.npmmirror.com/nan/2.17.0
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/fsevents/2.3.2:
-    resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
-    name: fsevents
-    version: 2.3.2
-    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/function-bind/1.1.1:
-    resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz}
-    name: function-bind
-    version: 1.1.1
-
-  registry.npmmirror.com/function.prototype.name/1.1.5:
-    resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz}
-    name: function.prototype.name
-    version: 1.1.5
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-      es-abstract: registry.npmmirror.com/es-abstract/1.20.4
-      functions-have-names: registry.npmmirror.com/functions-have-names/1.2.3
-    dev: true
-
-  registry.npmmirror.com/functional-red-black-tree/1.0.1:
-    resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz}
-    name: functional-red-black-tree
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/functions-have-names/1.2.3:
-    resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz}
-    name: functions-have-names
-    version: 1.2.3
-    dev: true
-
-  registry.npmmirror.com/gensync/1.0.0-beta.2:
-    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz}
-    name: gensync
-    version: 1.0.0-beta.2
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/get-caller-file/2.0.5:
-    resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz}
-    name: get-caller-file
-    version: 2.0.5
-    engines: {node: 6.* || 8.* || >= 10.*}
-    dev: true
-
-  registry.npmmirror.com/get-intrinsic/1.1.3:
-    resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz}
-    name: get-intrinsic
-    version: 1.1.3
-    dependencies:
-      function-bind: registry.npmmirror.com/function-bind/1.1.1
-      has: registry.npmmirror.com/has/1.0.3
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-
-  registry.npmmirror.com/get-own-enumerable-property-symbols/3.0.2:
-    resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz}
-    name: get-own-enumerable-property-symbols
-    version: 3.0.2
-    dev: true
-
-  registry.npmmirror.com/get-stdin/6.0.0:
-    resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stdin/-/get-stdin-6.0.0.tgz}
-    name: get-stdin
-    version: 6.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/get-stream/3.0.0:
-    resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz}
-    name: get-stream
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/get-stream/4.1.0:
-    resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz}
-    name: get-stream
-    version: 4.1.0
-    engines: {node: '>=6'}
-    dependencies:
-      pump: registry.npmmirror.com/pump/3.0.0
-    dev: true
-
-  registry.npmmirror.com/get-stream/5.2.0:
-    resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz}
-    name: get-stream
-    version: 5.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      pump: registry.npmmirror.com/pump/3.0.0
-    dev: true
-
-  registry.npmmirror.com/get-symbol-description/1.0.0:
-    resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz}
-    name: get-symbol-description
-    version: 1.0.0
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.3
-    dev: true
-
-  registry.npmmirror.com/get-value/2.0.6:
-    resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz}
-    name: get-value
-    version: 2.0.6
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/getpass/0.1.7:
-    resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz}
-    name: getpass
-    version: 0.1.7
-    dependencies:
-      assert-plus: registry.npmmirror.com/assert-plus/1.0.0
-    dev: true
-
-  registry.npmmirror.com/glob-parent/3.1.0:
-    resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz}
-    name: glob-parent
-    version: 3.1.0
-    dependencies:
-      is-glob: registry.npmmirror.com/is-glob/3.1.0
-      path-dirname: registry.npmmirror.com/path-dirname/1.0.2
-    dev: true
-
-  registry.npmmirror.com/glob-parent/5.1.2:
-    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz}
-    name: glob-parent
-    version: 5.1.2
-    engines: {node: '>= 6'}
-    dependencies:
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-    dev: true
-
-  registry.npmmirror.com/glob-to-regexp/0.3.0:
-    resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz}
-    name: glob-to-regexp
-    version: 0.3.0
-    dev: true
-
-  registry.npmmirror.com/glob/7.2.3:
-    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz}
-    name: glob
-    version: 7.2.3
-    dependencies:
-      fs.realpath: registry.npmmirror.com/fs.realpath/1.0.0
-      inflight: registry.npmmirror.com/inflight/1.0.6
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-      once: registry.npmmirror.com/once/1.4.0
-      path-is-absolute: registry.npmmirror.com/path-is-absolute/1.0.1
-    dev: true
-
-  registry.npmmirror.com/globals/11.12.0:
-    resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz}
-    name: globals
-    version: 11.12.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/globals/12.4.0:
-    resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globals/-/globals-12.4.0.tgz}
-    name: globals
-    version: 12.4.0
-    engines: {node: '>=8'}
-    dependencies:
-      type-fest: registry.npmmirror.com/type-fest/0.8.1
-    dev: true
-
-  registry.npmmirror.com/globby/10.0.2:
-    resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-10.0.2.tgz}
-    name: globby
-    version: 10.0.2
-    engines: {node: '>=8'}
-    dependencies:
-      '@types/glob': registry.npmmirror.com/@types/glob/7.2.0
-      array-union: registry.npmmirror.com/array-union/2.1.0
-      dir-glob: registry.npmmirror.com/dir-glob/3.0.1
-      fast-glob: registry.npmmirror.com/fast-glob/3.2.12
-      glob: registry.npmmirror.com/glob/7.2.3
-      ignore: registry.npmmirror.com/ignore/5.2.0
-      merge2: registry.npmmirror.com/merge2/1.4.1
-      slash: registry.npmmirror.com/slash/3.0.0
-    dev: true
-
-  registry.npmmirror.com/globby/6.1.0:
-    resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-6.1.0.tgz}
-    name: globby
-    version: 6.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      array-union: registry.npmmirror.com/array-union/1.0.2
-      glob: registry.npmmirror.com/glob/7.2.3
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-      pify: registry.npmmirror.com/pify/2.3.0
-      pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1
-    dev: true
-
-  registry.npmmirror.com/globby/7.1.1:
-    resolution: {integrity: sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-7.1.1.tgz}
-    name: globby
-    version: 7.1.1
-    engines: {node: '>=4'}
-    dependencies:
-      array-union: registry.npmmirror.com/array-union/1.0.2
-      dir-glob: registry.npmmirror.com/dir-glob/2.2.2
-      glob: registry.npmmirror.com/glob/7.2.3
-      ignore: registry.npmmirror.com/ignore/3.3.10
-      pify: registry.npmmirror.com/pify/3.0.0
-      slash: registry.npmmirror.com/slash/1.0.0
-    dev: true
-
-  registry.npmmirror.com/globby/9.2.0:
-    resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-9.2.0.tgz}
-    name: globby
-    version: 9.2.0
-    engines: {node: '>=6'}
-    dependencies:
-      '@types/glob': registry.npmmirror.com/@types/glob/7.2.0
-      array-union: registry.npmmirror.com/array-union/1.0.2
-      dir-glob: registry.npmmirror.com/dir-glob/2.2.2
-      fast-glob: registry.npmmirror.com/fast-glob/2.2.7
-      glob: registry.npmmirror.com/glob/7.2.3
-      ignore: registry.npmmirror.com/ignore/4.0.6
-      pify: registry.npmmirror.com/pify/4.0.1
-      slash: registry.npmmirror.com/slash/2.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/graceful-fs/4.2.10:
-    resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz}
-    name: graceful-fs
-    version: 4.2.10
-    dev: true
-
-  registry.npmmirror.com/gzip-size/5.1.1:
-    resolution: {integrity: sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gzip-size/-/gzip-size-5.1.1.tgz}
-    name: gzip-size
-    version: 5.1.1
-    engines: {node: '>=6'}
-    dependencies:
-      duplexer: registry.npmmirror.com/duplexer/0.1.2
-      pify: registry.npmmirror.com/pify/4.0.1
-    dev: true
-
-  registry.npmmirror.com/handle-thing/2.0.1:
-    resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz}
-    name: handle-thing
-    version: 2.0.1
-    dev: true
-
-  registry.npmmirror.com/har-schema/2.0.0:
-    resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz}
-    name: har-schema
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/har-validator/5.1.5:
-    resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz}
-    name: har-validator
-    version: 5.1.5
-    engines: {node: '>=6'}
-    deprecated: this library is no longer supported
-    dependencies:
-      ajv: registry.npmmirror.com/ajv/6.12.6
-      har-schema: registry.npmmirror.com/har-schema/2.0.0
-    dev: true
-
-  registry.npmmirror.com/has-ansi/2.0.0:
-    resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz}
-    name: has-ansi
-    version: 2.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      ansi-regex: registry.npmmirror.com/ansi-regex/2.1.1
-    dev: true
-
-  registry.npmmirror.com/has-bigints/1.0.2:
-    resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz}
-    name: has-bigints
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/has-flag/3.0.0:
-    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz}
-    name: has-flag
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/has-flag/4.0.0:
-    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz}
-    name: has-flag
-    version: 4.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/has-property-descriptors/1.0.0:
-    resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz}
-    name: has-property-descriptors
-    version: 1.0.0
-    dependencies:
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.3
-    dev: true
-
-  registry.npmmirror.com/has-symbols/1.0.3:
-    resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz}
-    name: has-symbols
-    version: 1.0.3
-    engines: {node: '>= 0.4'}
-
-  registry.npmmirror.com/has-tostringtag/1.0.0:
-    resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz}
-    name: has-tostringtag
-    version: 1.0.0
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-    dev: true
-
-  registry.npmmirror.com/has-value/0.3.1:
-    resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz}
-    name: has-value
-    version: 0.3.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      get-value: registry.npmmirror.com/get-value/2.0.6
-      has-values: registry.npmmirror.com/has-values/0.1.4
-      isobject: registry.npmmirror.com/isobject/2.1.0
-    dev: true
-
-  registry.npmmirror.com/has-value/1.0.0:
-    resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz}
-    name: has-value
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      get-value: registry.npmmirror.com/get-value/2.0.6
-      has-values: registry.npmmirror.com/has-values/1.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/has-values/0.1.4:
-    resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz}
-    name: has-values
-    version: 0.1.4
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/has-values/1.0.0:
-    resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz}
-    name: has-values
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-number: registry.npmmirror.com/is-number/3.0.0
-      kind-of: registry.npmmirror.com/kind-of/4.0.0
-    dev: true
-
-  registry.npmmirror.com/has/1.0.3:
-    resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz}
-    name: has
-    version: 1.0.3
-    engines: {node: '>= 0.4.0'}
-    dependencies:
-      function-bind: registry.npmmirror.com/function-bind/1.1.1
-
-  registry.npmmirror.com/hash-base/3.1.0:
-    resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz}
-    name: hash-base
-    version: 3.1.0
-    engines: {node: '>=4'}
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      readable-stream: registry.npmmirror.com/readable-stream/3.6.0
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/hash-sum/1.0.2:
-    resolution: {integrity: sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz}
-    name: hash-sum
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/hash-sum/2.0.0:
-    resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz}
-    name: hash-sum
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/hash.js/1.1.7:
-    resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz}
-    name: hash.js
-    version: 1.1.7
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1
-    dev: true
-
-  registry.npmmirror.com/he/1.2.0:
-    resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/he/-/he-1.2.0.tgz}
-    name: he
-    version: 1.2.0
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/hex-color-regex/1.1.0:
-    resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz}
-    name: hex-color-regex
-    version: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/highlight.js/10.7.3:
-    resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz}
-    name: highlight.js
-    version: 10.7.3
-    dev: true
-
-  registry.npmmirror.com/hmac-drbg/1.0.1:
-    resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz}
-    name: hmac-drbg
-    version: 1.0.1
-    dependencies:
-      hash.js: registry.npmmirror.com/hash.js/1.1.7
-      minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1
-      minimalistic-crypto-utils: registry.npmmirror.com/minimalistic-crypto-utils/1.0.1
-    dev: true
-
-  registry.npmmirror.com/hoopy/0.1.4:
-    resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hoopy/-/hoopy-0.1.4.tgz}
-    name: hoopy
-    version: 0.1.4
-    engines: {node: '>= 6.0.0'}
-    dev: true
-
-  registry.npmmirror.com/hosted-git-info/2.8.9:
-    resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz}
-    name: hosted-git-info
-    version: 2.8.9
-    dev: true
-
-  registry.npmmirror.com/hpack.js/2.1.6:
-    resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz}
-    name: hpack.js
-    version: 2.1.6
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      obuf: registry.npmmirror.com/obuf/1.1.2
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-      wbuf: registry.npmmirror.com/wbuf/1.7.3
-    dev: true
-
-  registry.npmmirror.com/hsl-regex/1.0.0:
-    resolution: {integrity: sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hsl-regex/-/hsl-regex-1.0.0.tgz}
-    name: hsl-regex
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/hsla-regex/1.0.0:
-    resolution: {integrity: sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hsla-regex/-/hsla-regex-1.0.0.tgz}
-    name: hsla-regex
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/html-entities/1.4.0:
-    resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-entities/-/html-entities-1.4.0.tgz}
-    name: html-entities
-    version: 1.4.0
-    dev: true
-
-  registry.npmmirror.com/html-minifier/3.5.21:
-    resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-minifier/-/html-minifier-3.5.21.tgz}
-    name: html-minifier
-    version: 3.5.21
-    engines: {node: '>=4'}
-    hasBin: true
-    dependencies:
-      camel-case: registry.npmmirror.com/camel-case/3.0.0
-      clean-css: registry.npmmirror.com/clean-css/4.2.4
-      commander: registry.npmmirror.com/commander/2.17.1
-      he: registry.npmmirror.com/he/1.2.0
-      param-case: registry.npmmirror.com/param-case/2.1.1
-      relateurl: registry.npmmirror.com/relateurl/0.2.7
-      uglify-js: registry.npmmirror.com/uglify-js/3.4.10
-    dev: true
-
-  registry.npmmirror.com/html-tags/2.0.0:
-    resolution: {integrity: sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz}
-    name: html-tags
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/html-tags/3.2.0:
-    resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-tags/-/html-tags-3.2.0.tgz}
-    name: html-tags
-    version: 3.2.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/html-webpack-plugin/3.2.0_webpack@4.46.0:
-    resolution: {integrity: sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz}
-    id: registry.npmmirror.com/html-webpack-plugin/3.2.0
-    name: html-webpack-plugin
-    version: 3.2.0
-    engines: {node: '>=6.9'}
-    deprecated: 3.x is no longer supported
-    peerDependencies:
-      webpack: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
-    dependencies:
-      html-minifier: registry.npmmirror.com/html-minifier/3.5.21
-      loader-utils: registry.npmmirror.com/loader-utils/0.2.17
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      pretty-error: registry.npmmirror.com/pretty-error/2.1.2
-      tapable: registry.npmmirror.com/tapable/1.1.3
-      toposort: registry.npmmirror.com/toposort/1.0.7
-      util.promisify: registry.npmmirror.com/util.promisify/1.0.0
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/htmlparser2/6.1.0:
-    resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz}
-    name: htmlparser2
-    version: 6.1.0
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-      domhandler: registry.npmmirror.com/domhandler/4.3.1
-      domutils: registry.npmmirror.com/domutils/2.8.0
-      entities: registry.npmmirror.com/entities/2.2.0
-    dev: true
-
-  registry.npmmirror.com/http-deceiver/1.2.7:
-    resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz}
-    name: http-deceiver
-    version: 1.2.7
-    dev: true
-
-  registry.npmmirror.com/http-errors/1.6.3:
-    resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz}
-    name: http-errors
-    version: 1.6.3
-    engines: {node: '>= 0.6'}
-    dependencies:
-      depd: registry.npmmirror.com/depd/1.1.2
-      inherits: registry.npmmirror.com/inherits/2.0.3
-      setprototypeof: registry.npmmirror.com/setprototypeof/1.1.0
-      statuses: registry.npmmirror.com/statuses/1.5.0
-    dev: true
-
-  registry.npmmirror.com/http-errors/2.0.0:
-    resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz}
-    name: http-errors
-    version: 2.0.0
-    engines: {node: '>= 0.8'}
-    dependencies:
-      depd: registry.npmmirror.com/depd/2.0.0
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      setprototypeof: registry.npmmirror.com/setprototypeof/1.2.0
-      statuses: registry.npmmirror.com/statuses/2.0.1
-      toidentifier: registry.npmmirror.com/toidentifier/1.0.1
-    dev: true
-
-  registry.npmmirror.com/http-parser-js/0.5.8:
-    resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz}
-    name: http-parser-js
-    version: 0.5.8
-    dev: true
-
-  registry.npmmirror.com/http-proxy-middleware/0.19.1_tmpgdztspuwvsxzgjkhoqk7duq:
-    resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz}
-    id: registry.npmmirror.com/http-proxy-middleware/0.19.1
-    name: http-proxy-middleware
-    version: 0.19.1
-    engines: {node: '>=4.0.0'}
-    dependencies:
-      http-proxy: registry.npmmirror.com/http-proxy/1.18.1_debug@4.3.4
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      micromatch: registry.npmmirror.com/micromatch/3.1.10_supports-color@6.1.0
-    transitivePeerDependencies:
-      - debug
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/http-proxy-middleware/1.3.1_debug@4.3.4:
-    resolution: {integrity: sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz}
-    id: registry.npmmirror.com/http-proxy-middleware/1.3.1
-    name: http-proxy-middleware
-    version: 1.3.1
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      '@types/http-proxy': registry.npmmirror.com/@types/http-proxy/1.17.9
-      http-proxy: registry.npmmirror.com/http-proxy/1.18.1_debug@4.3.4
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      is-plain-obj: registry.npmmirror.com/is-plain-obj/3.0.0
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-    transitivePeerDependencies:
-      - debug
-    dev: true
-
-  registry.npmmirror.com/http-proxy/1.18.1_debug@4.3.4:
-    resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz}
-    id: registry.npmmirror.com/http-proxy/1.18.1
-    name: http-proxy
-    version: 1.18.1
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      eventemitter3: registry.npmmirror.com/eventemitter3/4.0.7
-      follow-redirects: registry.npmmirror.com/follow-redirects/1.15.2_debug@4.3.4
-      requires-port: registry.npmmirror.com/requires-port/1.0.0
-    transitivePeerDependencies:
-      - debug
-    dev: true
-
-  registry.npmmirror.com/http-signature/1.2.0:
-    resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz}
-    name: http-signature
-    version: 1.2.0
-    engines: {node: '>=0.8', npm: '>=1.3.7'}
-    dependencies:
-      assert-plus: registry.npmmirror.com/assert-plus/1.0.0
-      jsprim: registry.npmmirror.com/jsprim/1.4.2
-      sshpk: registry.npmmirror.com/sshpk/1.17.0
-    dev: true
-
-  registry.npmmirror.com/https-browserify/1.0.0:
-    resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/https-browserify/-/https-browserify-1.0.0.tgz}
-    name: https-browserify
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/human-signals/1.1.1:
-    resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz}
-    name: human-signals
-    version: 1.1.1
-    engines: {node: '>=8.12.0'}
-    dev: true
-
-  registry.npmmirror.com/iconv-lite/0.4.24:
-    resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz}
-    name: iconv-lite
-    version: 0.4.24
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2
-    dev: true
-
-  registry.npmmirror.com/icss-utils/4.1.1:
-    resolution: {integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/icss-utils/-/icss-utils-4.1.1.tgz}
-    name: icss-utils
-    version: 4.1.1
-    engines: {node: '>= 6'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/ieee754/1.2.1:
-    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz}
-    name: ieee754
-    version: 1.2.1
-    dev: true
-
-  registry.npmmirror.com/iferr/0.1.5:
-    resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz}
-    name: iferr
-    version: 0.1.5
-    dev: true
-
-  registry.npmmirror.com/ignore/3.3.10:
-    resolution: {integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ignore/-/ignore-3.3.10.tgz}
-    name: ignore
-    version: 3.3.10
-    dev: true
-
-  registry.npmmirror.com/ignore/4.0.6:
-    resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz}
-    name: ignore
-    version: 4.0.6
-    engines: {node: '>= 4'}
-    dev: true
-
-  registry.npmmirror.com/ignore/5.2.0:
-    resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz}
-    name: ignore
-    version: 5.2.0
-    engines: {node: '>= 4'}
-    dev: true
-
-  registry.npmmirror.com/immutable/4.1.0:
-    resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.1.0.tgz}
-    name: immutable
-    version: 4.1.0
-    dev: true
-
-  registry.npmmirror.com/import-cwd/2.1.0:
-    resolution: {integrity: sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz}
-    name: import-cwd
-    version: 2.1.0
-    engines: {node: '>=4'}
-    dependencies:
-      import-from: registry.npmmirror.com/import-from/2.1.0
-    dev: true
-
-  registry.npmmirror.com/import-fresh/2.0.0:
-    resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz}
-    name: import-fresh
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      caller-path: registry.npmmirror.com/caller-path/2.0.0
-      resolve-from: registry.npmmirror.com/resolve-from/3.0.0
-    dev: true
-
-  registry.npmmirror.com/import-fresh/3.3.0:
-    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz}
-    name: import-fresh
-    version: 3.3.0
-    engines: {node: '>=6'}
-    dependencies:
-      parent-module: registry.npmmirror.com/parent-module/1.0.1
-      resolve-from: registry.npmmirror.com/resolve-from/4.0.0
-    dev: true
-
-  registry.npmmirror.com/import-from/2.1.0:
-    resolution: {integrity: sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-from/-/import-from-2.1.0.tgz}
-    name: import-from
-    version: 2.1.0
-    engines: {node: '>=4'}
-    dependencies:
-      resolve-from: registry.npmmirror.com/resolve-from/3.0.0
-    dev: true
-
-  registry.npmmirror.com/import-local/2.0.0:
-    resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-local/-/import-local-2.0.0.tgz}
-    name: import-local
-    version: 2.0.0
-    engines: {node: '>=6'}
-    hasBin: true
-    dependencies:
-      pkg-dir: registry.npmmirror.com/pkg-dir/3.0.0
-      resolve-cwd: registry.npmmirror.com/resolve-cwd/2.0.0
-    dev: true
-
-  registry.npmmirror.com/imurmurhash/0.1.4:
-    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz}
-    name: imurmurhash
-    version: 0.1.4
-    engines: {node: '>=0.8.19'}
-    dev: true
-
-  registry.npmmirror.com/indent-string/3.2.0:
-    resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-3.2.0.tgz}
-    name: indent-string
-    version: 3.2.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/indent-string/4.0.0:
-    resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz}
-    name: indent-string
-    version: 4.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/indexes-of/1.0.1:
-    resolution: {integrity: sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/indexes-of/-/indexes-of-1.0.1.tgz}
-    name: indexes-of
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/infer-owner/1.0.4:
-    resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz}
-    name: infer-owner
-    version: 1.0.4
-    dev: true
-
-  registry.npmmirror.com/inflight/1.0.6:
-    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz}
-    name: inflight
-    version: 1.0.6
-    dependencies:
-      once: registry.npmmirror.com/once/1.4.0
-      wrappy: registry.npmmirror.com/wrappy/1.0.2
-    dev: true
-
-  registry.npmmirror.com/inherits/2.0.1:
-    resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.1.tgz}
-    name: inherits
-    version: 2.0.1
-    dev: true
-
-  registry.npmmirror.com/inherits/2.0.3:
-    resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz}
-    name: inherits
-    version: 2.0.3
-    dev: true
-
-  registry.npmmirror.com/inherits/2.0.4:
-    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz}
-    name: inherits
-    version: 2.0.4
-    dev: true
-
-  registry.npmmirror.com/inquirer/7.3.3:
-    resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inquirer/-/inquirer-7.3.3.tgz}
-    name: inquirer
-    version: 7.3.3
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      ansi-escapes: registry.npmmirror.com/ansi-escapes/4.3.2
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      cli-cursor: registry.npmmirror.com/cli-cursor/3.1.0
-      cli-width: registry.npmmirror.com/cli-width/3.0.0
-      external-editor: registry.npmmirror.com/external-editor/3.1.0
-      figures: registry.npmmirror.com/figures/3.2.0
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      mute-stream: registry.npmmirror.com/mute-stream/0.0.8
-      run-async: registry.npmmirror.com/run-async/2.4.1
-      rxjs: registry.npmmirror.com/rxjs/6.6.7
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      through: registry.npmmirror.com/through/2.3.8
-    dev: true
-
-  registry.npmmirror.com/internal-ip/4.3.0:
-    resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz}
-    name: internal-ip
-    version: 4.3.0
-    engines: {node: '>=6'}
-    dependencies:
-      default-gateway: registry.npmmirror.com/default-gateway/4.2.0
-      ipaddr.js: registry.npmmirror.com/ipaddr.js/1.9.1
-    dev: true
-
-  registry.npmmirror.com/internal-slot/1.0.3:
-    resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz}
-    name: internal-slot
-    version: 1.0.3
-    engines: {node: '>= 0.4'}
-    dependencies:
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.3
-      has: registry.npmmirror.com/has/1.0.3
-      side-channel: registry.npmmirror.com/side-channel/1.0.4
-    dev: true
-
-  registry.npmmirror.com/ip-regex/2.1.0:
-    resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ip-regex/-/ip-regex-2.1.0.tgz}
-    name: ip-regex
-    version: 2.1.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/ip/1.1.8:
-    resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ip/-/ip-1.1.8.tgz}
-    name: ip
-    version: 1.1.8
-    dev: true
-
-  registry.npmmirror.com/ipaddr.js/1.9.1:
-    resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz}
-    name: ipaddr.js
-    version: 1.9.1
-    engines: {node: '>= 0.10'}
-    dev: true
-
-  registry.npmmirror.com/is-absolute-url/2.1.0:
-    resolution: {integrity: sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz}
-    name: is-absolute-url
-    version: 2.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-absolute-url/3.0.3:
-    resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz}
-    name: is-absolute-url
-    version: 3.0.3
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/is-accessor-descriptor/0.1.6:
-    resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz}
-    name: is-accessor-descriptor
-    version: 0.1.6
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/is-accessor-descriptor/1.0.0:
-    resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz}
-    name: is-accessor-descriptor
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-    dev: true
-
-  registry.npmmirror.com/is-arguments/1.1.1:
-    resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz}
-    name: is-arguments
-    version: 1.1.1
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-arrayish/0.2.1:
-    resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz}
-    name: is-arrayish
-    version: 0.2.1
-    dev: true
-
-  registry.npmmirror.com/is-arrayish/0.3.2:
-    resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz}
-    name: is-arrayish
-    version: 0.3.2
-    dev: true
-
-  registry.npmmirror.com/is-bigint/1.0.4:
-    resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz}
-    name: is-bigint
-    version: 1.0.4
-    dependencies:
-      has-bigints: registry.npmmirror.com/has-bigints/1.0.2
-    dev: true
-
-  registry.npmmirror.com/is-binary-path/1.0.1:
-    resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz}
-    name: is-binary-path
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      binary-extensions: registry.npmmirror.com/binary-extensions/1.13.1
-    dev: true
-
-  registry.npmmirror.com/is-binary-path/2.1.0:
-    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz}
-    name: is-binary-path
-    version: 2.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      binary-extensions: registry.npmmirror.com/binary-extensions/2.2.0
-    dev: true
-
-  registry.npmmirror.com/is-boolean-object/1.1.2:
-    resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz}
-    name: is-boolean-object
-    version: 1.1.2
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-buffer/1.1.6:
-    resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz}
-    name: is-buffer
-    version: 1.1.6
-    dev: true
-
-  registry.npmmirror.com/is-buffer/2.0.5:
-    resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz}
-    name: is-buffer
-    version: 2.0.5
-    engines: {node: '>=4'}
-    dev: false
-
-  registry.npmmirror.com/is-callable/1.2.7:
-    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz}
-    name: is-callable
-    version: 1.2.7
-    engines: {node: '>= 0.4'}
-    dev: true
-
-  registry.npmmirror.com/is-ci/1.2.1:
-    resolution: {integrity: sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-ci/-/is-ci-1.2.1.tgz}
-    name: is-ci
-    version: 1.2.1
-    hasBin: true
-    dependencies:
-      ci-info: registry.npmmirror.com/ci-info/1.6.0
-    dev: true
-
-  registry.npmmirror.com/is-color-stop/1.1.0:
-    resolution: {integrity: sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-color-stop/-/is-color-stop-1.1.0.tgz}
-    name: is-color-stop
-    version: 1.1.0
-    dependencies:
-      css-color-names: registry.npmmirror.com/css-color-names/0.0.4
-      hex-color-regex: registry.npmmirror.com/hex-color-regex/1.1.0
-      hsl-regex: registry.npmmirror.com/hsl-regex/1.0.0
-      hsla-regex: registry.npmmirror.com/hsla-regex/1.0.0
-      rgb-regex: registry.npmmirror.com/rgb-regex/1.0.1
-      rgba-regex: registry.npmmirror.com/rgba-regex/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-core-module/2.11.0:
-    resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz}
-    name: is-core-module
-    version: 2.11.0
-    dependencies:
-      has: registry.npmmirror.com/has/1.0.3
-    dev: true
-
-  registry.npmmirror.com/is-data-descriptor/0.1.4:
-    resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz}
-    name: is-data-descriptor
-    version: 0.1.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/is-data-descriptor/1.0.0:
-    resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz}
-    name: is-data-descriptor
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-    dev: true
-
-  registry.npmmirror.com/is-date-object/1.0.5:
-    resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz}
-    name: is-date-object
-    version: 1.0.5
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-descriptor/0.1.6:
-    resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz}
-    name: is-descriptor
-    version: 0.1.6
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-accessor-descriptor: registry.npmmirror.com/is-accessor-descriptor/0.1.6
-      is-data-descriptor: registry.npmmirror.com/is-data-descriptor/0.1.4
-      kind-of: registry.npmmirror.com/kind-of/5.1.0
-    dev: true
-
-  registry.npmmirror.com/is-descriptor/1.0.2:
-    resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz}
-    name: is-descriptor
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-accessor-descriptor: registry.npmmirror.com/is-accessor-descriptor/1.0.0
-      is-data-descriptor: registry.npmmirror.com/is-data-descriptor/1.0.0
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-    dev: true
-
-  registry.npmmirror.com/is-directory/0.3.1:
-    resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-directory/-/is-directory-0.3.1.tgz}
-    name: is-directory
-    version: 0.3.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-docker/2.2.1:
-    resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz}
-    name: is-docker
-    version: 2.2.1
-    engines: {node: '>=8'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/is-extendable/0.1.1:
-    resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz}
-    name: is-extendable
-    version: 0.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-extendable/1.0.1:
-    resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz}
-    name: is-extendable
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-plain-object: registry.npmmirror.com/is-plain-object/2.0.4
-    dev: true
-
-  registry.npmmirror.com/is-extglob/2.1.1:
-    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz}
-    name: is-extglob
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-fullwidth-code-point/1.0.0:
-    resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz}
-    name: is-fullwidth-code-point
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      number-is-nan: registry.npmmirror.com/number-is-nan/1.0.1
-    dev: true
-
-  registry.npmmirror.com/is-fullwidth-code-point/2.0.0:
-    resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz}
-    name: is-fullwidth-code-point
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/is-fullwidth-code-point/3.0.0:
-    resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz}
-    name: is-fullwidth-code-point
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/is-glob/3.1.0:
-    resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz}
-    name: is-glob
-    version: 3.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-extglob: registry.npmmirror.com/is-extglob/2.1.1
-    dev: true
-
-  registry.npmmirror.com/is-glob/4.0.3:
-    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz}
-    name: is-glob
-    version: 4.0.3
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-extglob: registry.npmmirror.com/is-extglob/2.1.1
-    dev: true
-
-  registry.npmmirror.com/is-negative-zero/2.0.2:
-    resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz}
-    name: is-negative-zero
-    version: 2.0.2
-    engines: {node: '>= 0.4'}
-    dev: true
-
-  registry.npmmirror.com/is-number-object/1.0.7:
-    resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz}
-    name: is-number-object
-    version: 1.0.7
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-number/3.0.0:
-    resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz}
-    name: is-number
-    version: 3.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/is-number/7.0.0:
-    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz}
-    name: is-number
-    version: 7.0.0
-    engines: {node: '>=0.12.0'}
-    dev: true
-
-  registry.npmmirror.com/is-obj/1.0.1:
-    resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz}
-    name: is-obj
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-obj/2.0.0:
-    resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz}
-    name: is-obj
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/is-observable/1.1.0:
-    resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-observable/-/is-observable-1.1.0.tgz}
-    name: is-observable
-    version: 1.1.0
-    engines: {node: '>=4'}
-    dependencies:
-      symbol-observable: registry.npmmirror.com/symbol-observable/1.2.0
-    dev: true
-
-  registry.npmmirror.com/is-path-cwd/2.2.0:
-    resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz}
-    name: is-path-cwd
-    version: 2.2.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/is-path-in-cwd/2.1.0:
-    resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz}
-    name: is-path-in-cwd
-    version: 2.1.0
-    engines: {node: '>=6'}
-    dependencies:
-      is-path-inside: registry.npmmirror.com/is-path-inside/2.1.0
-    dev: true
-
-  registry.npmmirror.com/is-path-inside/2.1.0:
-    resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-path-inside/-/is-path-inside-2.1.0.tgz}
-    name: is-path-inside
-    version: 2.1.0
-    engines: {node: '>=6'}
-    dependencies:
-      path-is-inside: registry.npmmirror.com/path-is-inside/1.0.2
-    dev: true
-
-  registry.npmmirror.com/is-path-inside/3.0.3:
-    resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz}
-    name: is-path-inside
-    version: 3.0.3
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/is-plain-obj/1.1.0:
-    resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz}
-    name: is-plain-obj
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-plain-obj/3.0.0:
-    resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz}
-    name: is-plain-obj
-    version: 3.0.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/is-plain-object/2.0.4:
-    resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz}
-    name: is-plain-object
-    version: 2.0.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/is-promise/2.2.2:
-    resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-promise/-/is-promise-2.2.2.tgz}
-    name: is-promise
-    version: 2.2.2
-    dev: true
-
-  registry.npmmirror.com/is-regex/1.1.4:
-    resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz}
-    name: is-regex
-    version: 1.1.4
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-regexp/1.0.0:
-    resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz}
-    name: is-regexp
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-resolvable/1.1.0:
-    resolution: {integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-resolvable/-/is-resolvable-1.1.0.tgz}
-    name: is-resolvable
-    version: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/is-shared-array-buffer/1.0.2:
-    resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz}
-    name: is-shared-array-buffer
-    version: 1.0.2
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-    dev: true
-
-  registry.npmmirror.com/is-stream/1.1.0:
-    resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz}
-    name: is-stream
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-stream/2.0.1:
-    resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz}
-    name: is-stream
-    version: 2.0.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/is-string/1.0.7:
-    resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz}
-    name: is-string
-    version: 1.0.7
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-symbol/1.0.4:
-    resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz}
-    name: is-symbol
-    version: 1.0.4
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-    dev: true
-
-  registry.npmmirror.com/is-typedarray/1.0.0:
-    resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz}
-    name: is-typedarray
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-weakref/1.0.2:
-    resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz}
-    name: is-weakref
-    version: 1.0.2
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-    dev: true
-
-  registry.npmmirror.com/is-windows/1.0.2:
-    resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz}
-    name: is-windows
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-wsl/1.1.0:
-    resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz}
-    name: is-wsl
-    version: 1.1.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/is-wsl/2.2.0:
-    resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz}
-    name: is-wsl
-    version: 2.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      is-docker: registry.npmmirror.com/is-docker/2.2.1
-    dev: true
-
-  registry.npmmirror.com/isarray/1.0.0:
-    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz}
-    name: isarray
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/isexe/2.0.0:
-    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz}
-    name: isexe
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/isobject/2.1.0:
-    resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz}
-    name: isobject
-    version: 2.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      isarray: registry.npmmirror.com/isarray/1.0.0
-    dev: true
-
-  registry.npmmirror.com/isobject/3.0.1:
-    resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz}
-    name: isobject
-    version: 3.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/isstream/0.1.2:
-    resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz}
-    name: isstream
-    version: 0.1.2
-    dev: true
-
-  registry.npmmirror.com/javascript-stringify/2.1.0:
-    resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz}
-    name: javascript-stringify
-    version: 2.1.0
-    dev: true
-
-  registry.npmmirror.com/js-md5/0.7.3:
-    resolution: {integrity: sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz}
-    name: js-md5
-    version: 0.7.3
-    dev: false
-
-  registry.npmmirror.com/js-message/1.0.7:
-    resolution: {integrity: sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz}
-    name: js-message
-    version: 1.0.7
-    engines: {node: '>=0.6.0'}
-    dev: true
-
-  registry.npmmirror.com/js-tokens/4.0.0:
-    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz}
-    name: js-tokens
-    version: 4.0.0
-    dev: true
-
-  registry.npmmirror.com/js-yaml/3.14.1:
-    resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz}
-    name: js-yaml
-    version: 3.14.1
-    hasBin: true
-    dependencies:
-      argparse: registry.npmmirror.com/argparse/1.0.10
-      esprima: registry.npmmirror.com/esprima/4.0.1
-    dev: true
-
-  registry.npmmirror.com/jsbarcode/3.11.5:
-    resolution: {integrity: sha512-zv3KsH51zD00I/LrFzFSM6dst7rDn0vIMzaiZFL7qusTjPZiPtxg3zxetp0RR7obmjTw4f6NyGgbdkBCgZUIrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsbarcode/-/jsbarcode-3.11.5.tgz}
-    name: jsbarcode
-    version: 3.11.5
-    hasBin: true
-    dev: false
-
-  registry.npmmirror.com/jsbn/0.1.1:
-    resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz}
-    name: jsbn
-    version: 0.1.1
-    dev: true
-
-  registry.npmmirror.com/jsesc/0.5.0:
-    resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz}
-    name: jsesc
-    version: 0.5.0
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/jsesc/2.5.2:
-    resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz}
-    name: jsesc
-    version: 2.5.2
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/json-parse-better-errors/1.0.2:
-    resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz}
-    name: json-parse-better-errors
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/json-parse-even-better-errors/2.3.1:
-    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz}
-    name: json-parse-even-better-errors
-    version: 2.3.1
-    dev: true
-
-  registry.npmmirror.com/json-schema-traverse/0.4.1:
-    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz}
-    name: json-schema-traverse
-    version: 0.4.1
-    dev: true
-
-  registry.npmmirror.com/json-schema/0.4.0:
-    resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz}
-    name: json-schema
-    version: 0.4.0
-    dev: true
-
-  registry.npmmirror.com/json-stable-stringify-without-jsonify/1.0.1:
-    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz}
-    name: json-stable-stringify-without-jsonify
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/json-stringify-safe/5.0.1:
-    resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz}
-    name: json-stringify-safe
-    version: 5.0.1
-    dev: true
-
-  registry.npmmirror.com/json5/0.5.1:
-    resolution: {integrity: sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz}
-    name: json5
-    version: 0.5.1
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/json5/1.0.1:
-    resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz}
-    name: json5
-    version: 1.0.1
-    hasBin: true
-    dependencies:
-      minimist: registry.npmmirror.com/minimist/1.2.7
-    dev: true
-
-  registry.npmmirror.com/json5/2.2.1:
-    resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz}
-    name: json5
-    version: 2.2.1
-    engines: {node: '>=6'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/jsonfile/4.0.0:
-    resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz}
-    name: jsonfile
-    version: 4.0.0
-    optionalDependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-    dev: true
-
-  registry.npmmirror.com/jsprim/1.4.2:
-    resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz}
-    name: jsprim
-    version: 1.4.2
-    engines: {node: '>=0.6.0'}
-    dependencies:
-      assert-plus: registry.npmmirror.com/assert-plus/1.0.0
-      extsprintf: registry.npmmirror.com/extsprintf/1.3.0
-      json-schema: registry.npmmirror.com/json-schema/0.4.0
-      verror: registry.npmmirror.com/verror/1.10.0
-    dev: true
-
-  registry.npmmirror.com/killable/1.0.1:
-    resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/killable/-/killable-1.0.1.tgz}
-    name: killable
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/kind-of/3.2.2:
-    resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz}
-    name: kind-of
-    version: 3.2.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-buffer: registry.npmmirror.com/is-buffer/1.1.6
-    dev: true
-
-  registry.npmmirror.com/kind-of/4.0.0:
-    resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz}
-    name: kind-of
-    version: 4.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-buffer: registry.npmmirror.com/is-buffer/1.1.6
-    dev: true
-
-  registry.npmmirror.com/kind-of/5.1.0:
-    resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz}
-    name: kind-of
-    version: 5.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/kind-of/6.0.3:
-    resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz}
-    name: kind-of
-    version: 6.0.3
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/launch-editor-middleware/2.6.0:
-    resolution: {integrity: sha512-K2yxgljj5TdCeRN1lBtO3/J26+AIDDDw+04y6VAiZbWcTdBwsYN6RrZBnW5DN/QiSIdKNjKdATLUUluWWFYTIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.6.0.tgz}
-    name: launch-editor-middleware
-    version: 2.6.0
-    dependencies:
-      launch-editor: registry.npmmirror.com/launch-editor/2.6.0
-    dev: true
-
-  registry.npmmirror.com/launch-editor/2.6.0:
-    resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.0.tgz}
-    name: launch-editor
-    version: 2.6.0
-    dependencies:
-      picocolors: registry.npmmirror.com/picocolors/1.0.0
-      shell-quote: registry.npmmirror.com/shell-quote/1.7.4
-    dev: true
-
-  registry.npmmirror.com/levn/0.3.0:
-    resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz}
-    name: levn
-    version: 0.3.0
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      prelude-ls: registry.npmmirror.com/prelude-ls/1.1.2
-      type-check: registry.npmmirror.com/type-check/0.3.2
-    dev: true
-
-  registry.npmmirror.com/lines-and-columns/1.2.4:
-    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz}
-    name: lines-and-columns
-    version: 1.2.4
-    dev: true
-
-  registry.npmmirror.com/lint-staged/9.5.0:
-    resolution: {integrity: sha512-nawMob9cb/G1J98nb8v3VC/E8rcX1rryUYXVZ69aT9kde6YWX+uvNOEHY5yf2gcWcTJGiD0kqXmCnS3oD75GIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lint-staged/-/lint-staged-9.5.0.tgz}
-    name: lint-staged
-    version: 9.5.0
-    hasBin: true
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      commander: registry.npmmirror.com/commander/2.20.3
-      cosmiconfig: registry.npmmirror.com/cosmiconfig/5.2.1
-      debug: registry.npmmirror.com/debug/4.3.4
-      dedent: registry.npmmirror.com/dedent/0.7.0
-      del: registry.npmmirror.com/del/5.1.0
-      execa: registry.npmmirror.com/execa/2.1.0
-      listr: registry.npmmirror.com/listr/0.14.3
-      log-symbols: registry.npmmirror.com/log-symbols/3.0.0
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      please-upgrade-node: registry.npmmirror.com/please-upgrade-node/3.2.0
-      string-argv: registry.npmmirror.com/string-argv/0.3.1
-      stringify-object: registry.npmmirror.com/stringify-object/3.3.0
-    transitivePeerDependencies:
-      - supports-color
-      - zen-observable
-      - zenObservable
-    dev: true
-
-  registry.npmmirror.com/listr-silent-renderer/1.1.1:
-    resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz}
-    name: listr-silent-renderer
-    version: 1.1.1
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/listr-update-renderer/0.5.0_listr@0.14.3:
-    resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz}
-    id: registry.npmmirror.com/listr-update-renderer/0.5.0
-    name: listr-update-renderer
-    version: 0.5.0
-    engines: {node: '>=6'}
-    peerDependencies:
-      listr: ^0.14.2
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/1.1.3
-      cli-truncate: registry.npmmirror.com/cli-truncate/0.2.1
-      elegant-spinner: registry.npmmirror.com/elegant-spinner/1.0.1
-      figures: registry.npmmirror.com/figures/1.7.0
-      indent-string: registry.npmmirror.com/indent-string/3.2.0
-      listr: registry.npmmirror.com/listr/0.14.3
-      log-symbols: registry.npmmirror.com/log-symbols/1.0.2
-      log-update: registry.npmmirror.com/log-update/2.3.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1
-    dev: true
-
-  registry.npmmirror.com/listr-verbose-renderer/0.5.0:
-    resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz}
-    name: listr-verbose-renderer
-    version: 0.5.0
-    engines: {node: '>=4'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      cli-cursor: registry.npmmirror.com/cli-cursor/2.1.0
-      date-fns: registry.npmmirror.com/date-fns/1.30.1
-      figures: registry.npmmirror.com/figures/2.0.0
-    dev: true
-
-  registry.npmmirror.com/listr/0.14.3:
-    resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/listr/-/listr-0.14.3.tgz}
-    name: listr
-    version: 0.14.3
-    engines: {node: '>=6'}
-    dependencies:
-      '@samverschueren/stream-to-observable': registry.npmmirror.com/@samverschueren/stream-to-observable/0.3.1_rxjs@6.6.7
-      is-observable: registry.npmmirror.com/is-observable/1.1.0
-      is-promise: registry.npmmirror.com/is-promise/2.2.2
-      is-stream: registry.npmmirror.com/is-stream/1.1.0
-      listr-silent-renderer: registry.npmmirror.com/listr-silent-renderer/1.1.1
-      listr-update-renderer: registry.npmmirror.com/listr-update-renderer/0.5.0_listr@0.14.3
-      listr-verbose-renderer: registry.npmmirror.com/listr-verbose-renderer/0.5.0
-      p-map: registry.npmmirror.com/p-map/2.1.0
-      rxjs: registry.npmmirror.com/rxjs/6.6.7
-    transitivePeerDependencies:
-      - zen-observable
-      - zenObservable
-    dev: true
-
-  registry.npmmirror.com/loader-fs-cache/1.0.3:
-    resolution: {integrity: sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz}
-    name: loader-fs-cache
-    version: 1.0.3
-    dependencies:
-      find-cache-dir: registry.npmmirror.com/find-cache-dir/0.1.1
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-    dev: true
-
-  registry.npmmirror.com/loader-runner/2.4.0:
-    resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-runner/-/loader-runner-2.4.0.tgz}
-    name: loader-runner
-    version: 2.4.0
-    engines: {node: '>=4.3.0 <5.0.0 || >=5.10'}
-    dev: true
-
-  registry.npmmirror.com/loader-utils/0.2.17:
-    resolution: {integrity: sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-0.2.17.tgz}
-    name: loader-utils
-    version: 0.2.17
-    dependencies:
-      big.js: registry.npmmirror.com/big.js/3.2.0
-      emojis-list: registry.npmmirror.com/emojis-list/2.1.0
-      json5: registry.npmmirror.com/json5/0.5.1
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-    dev: true
-
-  registry.npmmirror.com/loader-utils/1.4.0:
-    resolution: {integrity: sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.0.tgz}
-    name: loader-utils
-    version: 1.4.0
-    engines: {node: '>=4.0.0'}
-    dependencies:
-      big.js: registry.npmmirror.com/big.js/5.2.2
-      emojis-list: registry.npmmirror.com/emojis-list/3.0.0
-      json5: registry.npmmirror.com/json5/1.0.1
-    dev: true
-
-  registry.npmmirror.com/loader-utils/2.0.3:
-    resolution: {integrity: sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.3.tgz}
-    name: loader-utils
-    version: 2.0.3
-    engines: {node: '>=8.9.0'}
-    dependencies:
-      big.js: registry.npmmirror.com/big.js/5.2.2
-      emojis-list: registry.npmmirror.com/emojis-list/3.0.0
-      json5: registry.npmmirror.com/json5/2.2.1
-    dev: true
-
-  registry.npmmirror.com/locate-path/3.0.0:
-    resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz}
-    name: locate-path
-    version: 3.0.0
-    engines: {node: '>=6'}
-    dependencies:
-      p-locate: registry.npmmirror.com/p-locate/3.0.0
-      path-exists: registry.npmmirror.com/path-exists/3.0.0
-    dev: true
-
-  registry.npmmirror.com/locate-path/5.0.0:
-    resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz}
-    name: locate-path
-    version: 5.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      p-locate: registry.npmmirror.com/p-locate/4.1.0
-    dev: true
-
-  registry.npmmirror.com/lodash.debounce/4.0.8:
-    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz}
-    name: lodash.debounce
-    version: 4.0.8
-    dev: true
-
-  registry.npmmirror.com/lodash.defaultsdeep/4.6.1:
-    resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz}
-    name: lodash.defaultsdeep
-    version: 4.6.1
-    dev: true
-
-  registry.npmmirror.com/lodash.kebabcase/4.1.1:
-    resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz}
-    name: lodash.kebabcase
-    version: 4.1.1
-    dev: true
-
-  registry.npmmirror.com/lodash.mapvalues/4.6.0:
-    resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz}
-    name: lodash.mapvalues
-    version: 4.6.0
-    dev: true
-
-  registry.npmmirror.com/lodash.memoize/4.1.2:
-    resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz}
-    name: lodash.memoize
-    version: 4.1.2
-    dev: true
-
-  registry.npmmirror.com/lodash.transform/4.6.0:
-    resolution: {integrity: sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.transform/-/lodash.transform-4.6.0.tgz}
-    name: lodash.transform
-    version: 4.6.0
-    dev: true
-
-  registry.npmmirror.com/lodash.uniq/4.5.0:
-    resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz}
-    name: lodash.uniq
-    version: 4.5.0
-    dev: true
-
-  registry.npmmirror.com/lodash/4.17.21:
-    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz}
-    name: lodash
-    version: 4.17.21
-    dev: true
-
-  registry.npmmirror.com/log-symbols/1.0.2:
-    resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-1.0.2.tgz}
-    name: log-symbols
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/1.1.3
-    dev: true
-
-  registry.npmmirror.com/log-symbols/2.2.0:
-    resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-2.2.0.tgz}
-    name: log-symbols
-    version: 2.2.0
-    engines: {node: '>=4'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/2.4.2
-    dev: true
-
-  registry.npmmirror.com/log-symbols/3.0.0:
-    resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-3.0.0.tgz}
-    name: log-symbols
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/2.4.2
-    dev: true
-
-  registry.npmmirror.com/log-update/2.3.0:
-    resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz}
-    name: log-update
-    version: 2.3.0
-    engines: {node: '>=4'}
-    dependencies:
-      ansi-escapes: registry.npmmirror.com/ansi-escapes/3.2.0
-      cli-cursor: registry.npmmirror.com/cli-cursor/2.1.0
-      wrap-ansi: registry.npmmirror.com/wrap-ansi/3.0.1
-    dev: true
-
-  registry.npmmirror.com/loglevel/1.8.0:
-    resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loglevel/-/loglevel-1.8.0.tgz}
-    name: loglevel
-    version: 1.8.0
-    engines: {node: '>= 0.6.0'}
-    dev: true
-
-  registry.npmmirror.com/lower-case/1.1.4:
-    resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz}
-    name: lower-case
-    version: 1.1.4
-    dev: true
-
-  registry.npmmirror.com/lru-cache/4.1.5:
-    resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz}
-    name: lru-cache
-    version: 4.1.5
-    dependencies:
-      pseudomap: registry.npmmirror.com/pseudomap/1.0.2
-      yallist: registry.npmmirror.com/yallist/2.1.2
-    dev: true
-
-  registry.npmmirror.com/lru-cache/5.1.1:
-    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz}
-    name: lru-cache
-    version: 5.1.1
-    dependencies:
-      yallist: registry.npmmirror.com/yallist/3.1.1
-    dev: true
-
-  registry.npmmirror.com/make-dir/2.1.0:
-    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz}
-    name: make-dir
-    version: 2.1.0
-    engines: {node: '>=6'}
-    dependencies:
-      pify: registry.npmmirror.com/pify/4.0.1
-      semver: registry.npmmirror.com/semver/5.7.1
-    dev: true
-
-  registry.npmmirror.com/make-dir/3.1.0:
-    resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz}
-    name: make-dir
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      semver: registry.npmmirror.com/semver/6.3.0
-    dev: true
-
-  registry.npmmirror.com/map-cache/0.2.2:
-    resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz}
-    name: map-cache
-    version: 0.2.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/map-visit/1.0.0:
-    resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz}
-    name: map-visit
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      object-visit: registry.npmmirror.com/object-visit/1.0.1
-    dev: true
-
-  registry.npmmirror.com/md5.js/1.3.5:
-    resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz}
-    name: md5.js
-    version: 1.3.5
-    dependencies:
-      hash-base: registry.npmmirror.com/hash-base/3.1.0
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/mdn-data/2.0.14:
-    resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz}
-    name: mdn-data
-    version: 2.0.14
-    dev: true
-
-  registry.npmmirror.com/mdn-data/2.0.4:
-    resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz}
-    name: mdn-data
-    version: 2.0.4
-    dev: true
-
-  registry.npmmirror.com/media-typer/0.3.0:
-    resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz}
-    name: media-typer
-    version: 0.3.0
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/memory-fs/0.4.1:
-    resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz}
-    name: memory-fs
-    version: 0.4.1
-    dependencies:
-      errno: registry.npmmirror.com/errno/0.1.8
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-    dev: true
-
-  registry.npmmirror.com/memory-fs/0.5.0:
-    resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz}
-    name: memory-fs
-    version: 0.5.0
-    engines: {node: '>=4.3.0 <5.0.0 || >=5.10'}
-    dependencies:
-      errno: registry.npmmirror.com/errno/0.1.8
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-    dev: true
-
-  registry.npmmirror.com/merge-descriptors/1.0.1:
-    resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz}
-    name: merge-descriptors
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/merge-source-map/1.1.0:
-    resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz}
-    name: merge-source-map
-    version: 1.1.0
-    dependencies:
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    dev: true
-
-  registry.npmmirror.com/merge-stream/2.0.0:
-    resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz}
-    name: merge-stream
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/merge2/1.4.1:
-    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz}
-    name: merge2
-    version: 1.4.1
-    engines: {node: '>= 8'}
-    dev: true
-
-  registry.npmmirror.com/methods/1.1.2:
-    resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz}
-    name: methods
-    version: 1.1.2
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/micromatch/3.1.10:
-    resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz}
-    name: micromatch
-    version: 3.1.10
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-diff: registry.npmmirror.com/arr-diff/4.0.0
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      braces: registry.npmmirror.com/braces/2.3.2
-      define-property: registry.npmmirror.com/define-property/2.0.2
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-      extglob: registry.npmmirror.com/extglob/2.0.4
-      fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-      nanomatch: registry.npmmirror.com/nanomatch/1.2.13
-      object.pick: registry.npmmirror.com/object.pick/1.3.0
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/micromatch/3.1.10_supports-color@6.1.0:
-    resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz}
-    id: registry.npmmirror.com/micromatch/3.1.10
-    name: micromatch
-    version: 3.1.10
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-diff: registry.npmmirror.com/arr-diff/4.0.0
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      braces: registry.npmmirror.com/braces/2.3.2_supports-color@6.1.0
-      define-property: registry.npmmirror.com/define-property/2.0.2
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-      extglob: registry.npmmirror.com/extglob/2.0.4_supports-color@6.1.0
-      fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-      nanomatch: registry.npmmirror.com/nanomatch/1.2.13_supports-color@6.1.0
-      object.pick: registry.npmmirror.com/object.pick/1.3.0
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2_supports-color@6.1.0
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/micromatch/4.0.5:
-    resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz}
-    name: micromatch
-    version: 4.0.5
-    engines: {node: '>=8.6'}
-    dependencies:
-      braces: registry.npmmirror.com/braces/3.0.2
-      picomatch: registry.npmmirror.com/picomatch/2.3.1
-    dev: true
-
-  registry.npmmirror.com/miller-rabin/4.0.1:
-    resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz}
-    name: miller-rabin
-    version: 4.0.1
-    hasBin: true
-    dependencies:
-      bn.js: registry.npmmirror.com/bn.js/4.12.0
-      brorand: registry.npmmirror.com/brorand/1.1.0
-    dev: true
-
-  registry.npmmirror.com/mime-db/1.52.0:
-    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz}
-    name: mime-db
-    version: 1.52.0
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/mime-types/2.1.35:
-    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz}
-    name: mime-types
-    version: 2.1.35
-    engines: {node: '>= 0.6'}
-    dependencies:
-      mime-db: registry.npmmirror.com/mime-db/1.52.0
-    dev: true
-
-  registry.npmmirror.com/mime/1.6.0:
-    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz}
-    name: mime
-    version: 1.6.0
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/mime/2.6.0:
-    resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz}
-    name: mime
-    version: 2.6.0
-    engines: {node: '>=4.0.0'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/mimic-fn/1.2.0:
-    resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz}
-    name: mimic-fn
-    version: 1.2.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/mimic-fn/2.1.0:
-    resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz}
-    name: mimic-fn
-    version: 2.1.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/mini-css-extract-plugin/0.9.0_webpack@4.46.0:
-    resolution: {integrity: sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz}
-    id: registry.npmmirror.com/mini-css-extract-plugin/0.9.0
-    name: mini-css-extract-plugin
-    version: 0.9.0
-    engines: {node: '>= 6.9.0'}
-    peerDependencies:
-      webpack: ^4.4.0
-    dependencies:
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      normalize-url: registry.npmmirror.com/normalize-url/1.9.1
-      schema-utils: registry.npmmirror.com/schema-utils/1.0.0
-      webpack: registry.npmmirror.com/webpack/4.46.0
-      webpack-sources: registry.npmmirror.com/webpack-sources/1.4.3
-    dev: true
-
-  registry.npmmirror.com/minimalistic-assert/1.0.1:
-    resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz}
-    name: minimalistic-assert
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/minimalistic-crypto-utils/1.0.1:
-    resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz}
-    name: minimalistic-crypto-utils
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/minimatch/3.1.2:
-    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz}
-    name: minimatch
-    version: 3.1.2
-    dependencies:
-      brace-expansion: registry.npmmirror.com/brace-expansion/1.1.11
-    dev: true
-
-  registry.npmmirror.com/minimist/1.2.7:
-    resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimist/-/minimist-1.2.7.tgz}
-    name: minimist
-    version: 1.2.7
-    dev: true
-
-  registry.npmmirror.com/minipass/3.3.4:
-    resolution: {integrity: sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minipass/-/minipass-3.3.4.tgz}
-    name: minipass
-    version: 3.3.4
-    engines: {node: '>=8'}
-    dependencies:
-      yallist: registry.npmmirror.com/yallist/4.0.0
-    dev: true
-
-  registry.npmmirror.com/mississippi/3.0.0:
-    resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz}
-    name: mississippi
-    version: 3.0.0
-    engines: {node: '>=4.0.0'}
-    dependencies:
-      concat-stream: registry.npmmirror.com/concat-stream/1.6.2
-      duplexify: registry.npmmirror.com/duplexify/3.7.1
-      end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4
-      flush-write-stream: registry.npmmirror.com/flush-write-stream/1.1.1
-      from2: registry.npmmirror.com/from2/2.3.0
-      parallel-transform: registry.npmmirror.com/parallel-transform/1.2.0
-      pump: registry.npmmirror.com/pump/3.0.0
-      pumpify: registry.npmmirror.com/pumpify/1.5.1
-      stream-each: registry.npmmirror.com/stream-each/1.2.3
-      through2: registry.npmmirror.com/through2/2.0.5
-    dev: true
-
-  registry.npmmirror.com/mixin-deep/1.3.2:
-    resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz}
-    name: mixin-deep
-    version: 1.3.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      for-in: registry.npmmirror.com/for-in/1.0.2
-      is-extendable: registry.npmmirror.com/is-extendable/1.0.1
-    dev: true
-
-  registry.npmmirror.com/mkdirp/0.5.6:
-    resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz}
-    name: mkdirp
-    version: 0.5.6
-    hasBin: true
-    dependencies:
-      minimist: registry.npmmirror.com/minimist/1.2.7
-    dev: true
-
-  registry.npmmirror.com/move-concurrently/1.0.1:
-    resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz}
-    name: move-concurrently
-    version: 1.0.1
-    dependencies:
-      aproba: registry.npmmirror.com/aproba/1.2.0
-      copy-concurrently: registry.npmmirror.com/copy-concurrently/1.0.5
-      fs-write-stream-atomic: registry.npmmirror.com/fs-write-stream-atomic/1.0.10
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-      rimraf: registry.npmmirror.com/rimraf/2.7.1
-      run-queue: registry.npmmirror.com/run-queue/1.0.3
-    dev: true
-
-  registry.npmmirror.com/ms/2.0.0:
-    resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz}
-    name: ms
-    version: 2.0.0
-
-  registry.npmmirror.com/ms/2.1.2:
-    resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz}
-    name: ms
-    version: 2.1.2
-    dev: true
-
-  registry.npmmirror.com/ms/2.1.3:
-    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz}
-    name: ms
-    version: 2.1.3
-    dev: true
-
-  registry.npmmirror.com/multicast-dns-service-types/1.1.0:
-    resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz}
-    name: multicast-dns-service-types
-    version: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/multicast-dns/6.2.3:
-    resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/multicast-dns/-/multicast-dns-6.2.3.tgz}
-    name: multicast-dns
-    version: 6.2.3
-    hasBin: true
-    dependencies:
-      dns-packet: registry.npmmirror.com/dns-packet/1.3.4
-      thunky: registry.npmmirror.com/thunky/1.1.0
-    dev: true
-
-  registry.npmmirror.com/mute-stream/0.0.8:
-    resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz}
-    name: mute-stream
-    version: 0.0.8
-    dev: true
-
-  registry.npmmirror.com/mz/2.7.0:
-    resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz}
-    name: mz
-    version: 2.7.0
-    dependencies:
-      any-promise: registry.npmmirror.com/any-promise/1.3.0
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-      thenify-all: registry.npmmirror.com/thenify-all/1.6.0
-    dev: true
-
-  registry.npmmirror.com/nan/2.17.0:
-    resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nan/-/nan-2.17.0.tgz}
-    name: nan
-    version: 2.17.0
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/nanoid/3.3.4:
-    resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz}
-    name: nanoid
-    version: 3.3.4
-    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-    hasBin: true
-
-  registry.npmmirror.com/nanomatch/1.2.13:
-    resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz}
-    name: nanomatch
-    version: 1.2.13
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-diff: registry.npmmirror.com/arr-diff/4.0.0
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      define-property: registry.npmmirror.com/define-property/2.0.2
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-      fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1
-      is-windows: registry.npmmirror.com/is-windows/1.0.2
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-      object.pick: registry.npmmirror.com/object.pick/1.3.0
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/nanomatch/1.2.13_supports-color@6.1.0:
-    resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz}
-    id: registry.npmmirror.com/nanomatch/1.2.13
-    name: nanomatch
-    version: 1.2.13
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-diff: registry.npmmirror.com/arr-diff/4.0.0
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      define-property: registry.npmmirror.com/define-property/2.0.2
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-      fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1
-      is-windows: registry.npmmirror.com/is-windows/1.0.2
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-      object.pick: registry.npmmirror.com/object.pick/1.3.0
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2_supports-color@6.1.0
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/natural-compare/1.4.0:
-    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz}
-    name: natural-compare
-    version: 1.4.0
-    dev: true
-
-  registry.npmmirror.com/negotiator/0.6.3:
-    resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz}
-    name: negotiator
-    version: 0.6.3
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/neo-async/2.6.2:
-    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz}
-    name: neo-async
-    version: 2.6.2
-    dev: true
-
-  registry.npmmirror.com/nice-try/1.0.5:
-    resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz}
-    name: nice-try
-    version: 1.0.5
-    dev: true
-
-  registry.npmmirror.com/no-case/2.3.2:
-    resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/no-case/-/no-case-2.3.2.tgz}
-    name: no-case
-    version: 2.3.2
-    dependencies:
-      lower-case: registry.npmmirror.com/lower-case/1.1.4
-    dev: true
-
-  registry.npmmirror.com/node-forge/0.10.0:
-    resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-forge/-/node-forge-0.10.0.tgz}
-    name: node-forge
-    version: 0.10.0
-    engines: {node: '>= 6.0.0'}
-    dev: true
-
-  registry.npmmirror.com/node-libs-browser/2.2.1:
-    resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz}
-    name: node-libs-browser
-    version: 2.2.1
-    dependencies:
-      assert: registry.npmmirror.com/assert/1.5.0
-      browserify-zlib: registry.npmmirror.com/browserify-zlib/0.2.0
-      buffer: registry.npmmirror.com/buffer/4.9.2
-      console-browserify: registry.npmmirror.com/console-browserify/1.2.0
-      constants-browserify: registry.npmmirror.com/constants-browserify/1.0.0
-      crypto-browserify: registry.npmmirror.com/crypto-browserify/3.12.0
-      domain-browser: registry.npmmirror.com/domain-browser/1.2.0
-      events: registry.npmmirror.com/events/3.3.0
-      https-browserify: registry.npmmirror.com/https-browserify/1.0.0
-      os-browserify: registry.npmmirror.com/os-browserify/0.3.0
-      path-browserify: registry.npmmirror.com/path-browserify/0.0.1
-      process: registry.npmmirror.com/process/0.11.10
-      punycode: registry.npmmirror.com/punycode/1.4.1
-      querystring-es3: registry.npmmirror.com/querystring-es3/0.2.1
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-      stream-browserify: registry.npmmirror.com/stream-browserify/2.0.2
-      stream-http: registry.npmmirror.com/stream-http/2.8.3
-      string_decoder: registry.npmmirror.com/string_decoder/1.3.0
-      timers-browserify: registry.npmmirror.com/timers-browserify/2.0.12
-      tty-browserify: registry.npmmirror.com/tty-browserify/0.0.0
-      url: registry.npmmirror.com/url/0.11.0
-      util: registry.npmmirror.com/util/0.11.1
-      vm-browserify: registry.npmmirror.com/vm-browserify/1.1.2
-    dev: true
-
-  registry.npmmirror.com/node-releases/2.0.6:
-    resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz}
-    name: node-releases
-    version: 2.0.6
-    dev: true
-
-  registry.npmmirror.com/normalize-package-data/2.5.0:
-    resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz}
-    name: normalize-package-data
-    version: 2.5.0
-    dependencies:
-      hosted-git-info: registry.npmmirror.com/hosted-git-info/2.8.9
-      resolve: registry.npmmirror.com/resolve/1.22.1
-      semver: registry.npmmirror.com/semver/5.7.1
-      validate-npm-package-license: registry.npmmirror.com/validate-npm-package-license/3.0.4
-    dev: true
-
-  registry.npmmirror.com/normalize-path/1.0.0:
-    resolution: {integrity: sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-1.0.0.tgz}
-    name: normalize-path
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/normalize-path/2.1.1:
-    resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz}
-    name: normalize-path
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      remove-trailing-separator: registry.npmmirror.com/remove-trailing-separator/1.1.0
-    dev: true
-
-  registry.npmmirror.com/normalize-path/3.0.0:
-    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz}
-    name: normalize-path
-    version: 3.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/normalize-range/0.1.2:
-    resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz}
-    name: normalize-range
-    version: 0.1.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/normalize-url/1.9.1:
-    resolution: {integrity: sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-url/-/normalize-url-1.9.1.tgz}
-    name: normalize-url
-    version: 1.9.1
-    engines: {node: '>=4'}
-    dependencies:
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-      prepend-http: registry.npmmirror.com/prepend-http/1.0.4
-      query-string: registry.npmmirror.com/query-string/4.3.4
-      sort-keys: registry.npmmirror.com/sort-keys/1.1.2
-    dev: true
-
-  registry.npmmirror.com/normalize-url/3.3.0:
-    resolution: {integrity: sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-url/-/normalize-url-3.3.0.tgz}
-    name: normalize-url
-    version: 3.3.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/normalize-wheel/1.0.1:
-    resolution: {integrity: sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz}
-    name: normalize-wheel
-    version: 1.0.1
-    dev: false
-
-  registry.npmmirror.com/npm-run-path/2.0.2:
-    resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz}
-    name: npm-run-path
-    version: 2.0.2
-    engines: {node: '>=4'}
-    dependencies:
-      path-key: registry.npmmirror.com/path-key/2.0.1
-    dev: true
-
-  registry.npmmirror.com/npm-run-path/3.1.0:
-    resolution: {integrity: sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-3.1.0.tgz}
-    name: npm-run-path
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      path-key: registry.npmmirror.com/path-key/3.1.1
-    dev: true
-
-  registry.npmmirror.com/npm-run-path/4.0.1:
-    resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz}
-    name: npm-run-path
-    version: 4.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      path-key: registry.npmmirror.com/path-key/3.1.1
-    dev: true
-
-  registry.npmmirror.com/nth-check/1.0.2:
-    resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz}
-    name: nth-check
-    version: 1.0.2
-    dependencies:
-      boolbase: registry.npmmirror.com/boolbase/1.0.0
-    dev: true
-
-  registry.npmmirror.com/nth-check/2.1.1:
-    resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz}
-    name: nth-check
-    version: 2.1.1
-    dependencies:
-      boolbase: registry.npmmirror.com/boolbase/1.0.0
-    dev: true
-
-  registry.npmmirror.com/num2fraction/1.2.2:
-    resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/num2fraction/-/num2fraction-1.2.2.tgz}
-    name: num2fraction
-    version: 1.2.2
-    dev: true
-
-  registry.npmmirror.com/number-is-nan/1.0.1:
-    resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz}
-    name: number-is-nan
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/oauth-sign/0.9.0:
-    resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz}
-    name: oauth-sign
-    version: 0.9.0
-    dev: true
-
-  registry.npmmirror.com/object-assign/4.1.1:
-    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz}
-    name: object-assign
-    version: 4.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/object-copy/0.1.0:
-    resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz}
-    name: object-copy
-    version: 0.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      copy-descriptor: registry.npmmirror.com/copy-descriptor/0.1.1
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/object-hash/1.3.1:
-    resolution: {integrity: sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-hash/-/object-hash-1.3.1.tgz}
-    name: object-hash
-    version: 1.3.1
-    engines: {node: '>= 0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/object-inspect/1.12.2:
-    resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.2.tgz}
-    name: object-inspect
-    version: 1.12.2
-
-  registry.npmmirror.com/object-is/1.1.5:
-    resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz}
-    name: object-is
-    version: 1.1.5
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-    dev: true
-
-  registry.npmmirror.com/object-keys/1.1.1:
-    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz}
-    name: object-keys
-    version: 1.1.1
-    engines: {node: '>= 0.4'}
-    dev: true
-
-  registry.npmmirror.com/object-visit/1.0.1:
-    resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz}
-    name: object-visit
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/object.assign/4.1.4:
-    resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz}
-    name: object.assign
-    version: 4.1.4
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-      object-keys: registry.npmmirror.com/object-keys/1.1.1
-    dev: true
-
-  registry.npmmirror.com/object.getownpropertydescriptors/2.1.4:
-    resolution: {integrity: sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz}
-    name: object.getownpropertydescriptors
-    version: 2.1.4
-    engines: {node: '>= 0.8'}
-    dependencies:
-      array.prototype.reduce: registry.npmmirror.com/array.prototype.reduce/1.0.4
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-      es-abstract: registry.npmmirror.com/es-abstract/1.20.4
-    dev: true
-
-  registry.npmmirror.com/object.pick/1.3.0:
-    resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz}
-    name: object.pick
-    version: 1.3.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/object.values/1.1.5:
-    resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.values/-/object.values-1.1.5.tgz}
-    name: object.values
-    version: 1.1.5
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-      es-abstract: registry.npmmirror.com/es-abstract/1.20.4
-    dev: true
-
-  registry.npmmirror.com/obuf/1.1.2:
-    resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz}
-    name: obuf
-    version: 1.1.2
-    dev: true
-
-  registry.npmmirror.com/on-finished/2.4.1:
-    resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz}
-    name: on-finished
-    version: 2.4.1
-    engines: {node: '>= 0.8'}
-    dependencies:
-      ee-first: registry.npmmirror.com/ee-first/1.1.1
-    dev: true
-
-  registry.npmmirror.com/on-headers/1.0.2:
-    resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz}
-    name: on-headers
-    version: 1.0.2
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/once/1.4.0:
-    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz}
-    name: once
-    version: 1.4.0
-    dependencies:
-      wrappy: registry.npmmirror.com/wrappy/1.0.2
-    dev: true
-
-  registry.npmmirror.com/onetime/2.0.1:
-    resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz}
-    name: onetime
-    version: 2.0.1
-    engines: {node: '>=4'}
-    dependencies:
-      mimic-fn: registry.npmmirror.com/mimic-fn/1.2.0
-    dev: true
-
-  registry.npmmirror.com/onetime/5.1.2:
-    resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz}
-    name: onetime
-    version: 5.1.2
-    engines: {node: '>=6'}
-    dependencies:
-      mimic-fn: registry.npmmirror.com/mimic-fn/2.1.0
-    dev: true
-
-  registry.npmmirror.com/open/6.4.0:
-    resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/open/-/open-6.4.0.tgz}
-    name: open
-    version: 6.4.0
-    engines: {node: '>=8'}
-    dependencies:
-      is-wsl: registry.npmmirror.com/is-wsl/1.1.0
-    dev: true
-
-  registry.npmmirror.com/opencollective-postinstall/2.0.3:
-    resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz}
-    name: opencollective-postinstall
-    version: 2.0.3
-    hasBin: true
-    dev: false
-
-  registry.npmmirror.com/opener/1.5.2:
-    resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz}
-    name: opener
-    version: 1.5.2
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/opn/5.5.0:
-    resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/opn/-/opn-5.5.0.tgz}
-    name: opn
-    version: 5.5.0
-    engines: {node: '>=4'}
-    dependencies:
-      is-wsl: registry.npmmirror.com/is-wsl/1.1.0
-    dev: true
-
-  registry.npmmirror.com/optionator/0.8.3:
-    resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz}
-    name: optionator
-    version: 0.8.3
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      deep-is: registry.npmmirror.com/deep-is/0.1.4
-      fast-levenshtein: registry.npmmirror.com/fast-levenshtein/2.0.6
-      levn: registry.npmmirror.com/levn/0.3.0
-      prelude-ls: registry.npmmirror.com/prelude-ls/1.1.2
-      type-check: registry.npmmirror.com/type-check/0.3.2
-      word-wrap: registry.npmmirror.com/word-wrap/1.2.3
-    dev: true
-
-  registry.npmmirror.com/ora/3.4.0:
-    resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ora/-/ora-3.4.0.tgz}
-    name: ora
-    version: 3.4.0
-    engines: {node: '>=6'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      cli-cursor: registry.npmmirror.com/cli-cursor/2.1.0
-      cli-spinners: registry.npmmirror.com/cli-spinners/2.7.0
-      log-symbols: registry.npmmirror.com/log-symbols/2.2.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0
-      wcwidth: registry.npmmirror.com/wcwidth/1.0.1
-    dev: true
-
-  registry.npmmirror.com/os-browserify/0.3.0:
-    resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz}
-    name: os-browserify
-    version: 0.3.0
-    dev: true
-
-  registry.npmmirror.com/os-tmpdir/1.0.2:
-    resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz}
-    name: os-tmpdir
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/p-finally/1.0.0:
-    resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz}
-    name: p-finally
-    version: 1.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/p-finally/2.0.1:
-    resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-finally/-/p-finally-2.0.1.tgz}
-    name: p-finally
-    version: 2.0.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/p-limit/2.3.0:
-    resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz}
-    name: p-limit
-    version: 2.3.0
-    engines: {node: '>=6'}
-    dependencies:
-      p-try: registry.npmmirror.com/p-try/2.2.0
-    dev: true
-
-  registry.npmmirror.com/p-locate/3.0.0:
-    resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz}
-    name: p-locate
-    version: 3.0.0
-    engines: {node: '>=6'}
-    dependencies:
-      p-limit: registry.npmmirror.com/p-limit/2.3.0
-    dev: true
-
-  registry.npmmirror.com/p-locate/4.1.0:
-    resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz}
-    name: p-locate
-    version: 4.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      p-limit: registry.npmmirror.com/p-limit/2.3.0
-    dev: true
-
-  registry.npmmirror.com/p-map/2.1.0:
-    resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz}
-    name: p-map
-    version: 2.1.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/p-map/3.0.0:
-    resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-map/-/p-map-3.0.0.tgz}
-    name: p-map
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      aggregate-error: registry.npmmirror.com/aggregate-error/3.1.0
-    dev: true
-
-  registry.npmmirror.com/p-retry/3.0.1:
-    resolution: {integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-retry/-/p-retry-3.0.1.tgz}
-    name: p-retry
-    version: 3.0.1
-    engines: {node: '>=6'}
-    dependencies:
-      retry: registry.npmmirror.com/retry/0.12.0
-    dev: true
-
-  registry.npmmirror.com/p-try/2.2.0:
-    resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz}
-    name: p-try
-    version: 2.2.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/pako/1.0.11:
-    resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz}
-    name: pako
-    version: 1.0.11
-    dev: true
-
-  registry.npmmirror.com/parallel-transform/1.2.0:
-    resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz}
-    name: parallel-transform
-    version: 1.2.0
-    dependencies:
-      cyclist: registry.npmmirror.com/cyclist/1.0.1
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-    dev: true
-
-  registry.npmmirror.com/param-case/2.1.1:
-    resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/param-case/-/param-case-2.1.1.tgz}
-    name: param-case
-    version: 2.1.1
-    dependencies:
-      no-case: registry.npmmirror.com/no-case/2.3.2
-    dev: true
-
-  registry.npmmirror.com/parent-module/1.0.1:
-    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz}
-    name: parent-module
-    version: 1.0.1
-    engines: {node: '>=6'}
-    dependencies:
-      callsites: registry.npmmirror.com/callsites/3.1.0
-    dev: true
-
-  registry.npmmirror.com/parse-asn1/5.1.6:
-    resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz}
-    name: parse-asn1
-    version: 5.1.6
-    dependencies:
-      asn1.js: registry.npmmirror.com/asn1.js/5.4.1
-      browserify-aes: registry.npmmirror.com/browserify-aes/1.2.0
-      evp_bytestokey: registry.npmmirror.com/evp_bytestokey/1.0.3
-      pbkdf2: registry.npmmirror.com/pbkdf2/3.1.2
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/parse-json/4.0.0:
-    resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz}
-    name: parse-json
-    version: 4.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      error-ex: registry.npmmirror.com/error-ex/1.3.2
-      json-parse-better-errors: registry.npmmirror.com/json-parse-better-errors/1.0.2
-    dev: true
-
-  registry.npmmirror.com/parse-json/5.2.0:
-    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz}
-    name: parse-json
-    version: 5.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      error-ex: registry.npmmirror.com/error-ex/1.3.2
-      json-parse-even-better-errors: registry.npmmirror.com/json-parse-even-better-errors/2.3.1
-      lines-and-columns: registry.npmmirror.com/lines-and-columns/1.2.4
-    dev: true
-
-  registry.npmmirror.com/parse5-htmlparser2-tree-adapter/6.0.1:
-    resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz}
-    name: parse5-htmlparser2-tree-adapter
-    version: 6.0.1
-    dependencies:
-      parse5: registry.npmmirror.com/parse5/6.0.1
-    dev: true
-
-  registry.npmmirror.com/parse5/5.1.1:
-    resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz}
-    name: parse5
-    version: 5.1.1
-    dev: true
-
-  registry.npmmirror.com/parse5/6.0.1:
-    resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz}
-    name: parse5
-    version: 6.0.1
-    dev: true
-
-  registry.npmmirror.com/parseurl/1.3.3:
-    resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz}
-    name: parseurl
-    version: 1.3.3
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/pascalcase/0.1.1:
-    resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz}
-    name: pascalcase
-    version: 0.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/path-browserify/0.0.1:
-    resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz}
-    name: path-browserify
-    version: 0.0.1
-    dev: true
-
-  registry.npmmirror.com/path-dirname/1.0.2:
-    resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz}
-    name: path-dirname
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/path-exists/2.1.0:
-    resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz}
-    name: path-exists
-    version: 2.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1
-    dev: true
-
-  registry.npmmirror.com/path-exists/3.0.0:
-    resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz}
-    name: path-exists
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/path-exists/4.0.0:
-    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz}
-    name: path-exists
-    version: 4.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/path-is-absolute/1.0.1:
-    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz}
-    name: path-is-absolute
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/path-is-inside/1.0.2:
-    resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz}
-    name: path-is-inside
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/path-key/2.0.1:
-    resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz}
-    name: path-key
-    version: 2.0.1
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/path-key/3.1.1:
-    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz}
-    name: path-key
-    version: 3.1.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/path-parse/1.0.7:
-    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz}
-    name: path-parse
-    version: 1.0.7
-    dev: true
-
-  registry.npmmirror.com/path-to-regexp/0.1.7:
-    resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz}
-    name: path-to-regexp
-    version: 0.1.7
-    dev: true
-
-  registry.npmmirror.com/path-type/3.0.0:
-    resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz}
-    name: path-type
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      pify: registry.npmmirror.com/pify/3.0.0
-    dev: true
-
-  registry.npmmirror.com/path-type/4.0.0:
-    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz}
-    name: path-type
-    version: 4.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/pbkdf2/3.1.2:
-    resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz}
-    name: pbkdf2
-    version: 3.1.2
-    engines: {node: '>=0.12'}
-    dependencies:
-      create-hash: registry.npmmirror.com/create-hash/1.2.0
-      create-hmac: registry.npmmirror.com/create-hmac/1.1.7
-      ripemd160: registry.npmmirror.com/ripemd160/2.0.2
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-      sha.js: registry.npmmirror.com/sha.js/2.4.11
-    dev: true
-
-  registry.npmmirror.com/performance-now/2.1.0:
-    resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz}
-    name: performance-now
-    version: 2.1.0
-    dev: true
-
-  registry.npmmirror.com/picocolors/0.2.1:
-    resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz}
-    name: picocolors
-    version: 0.2.1
-    dev: true
-
-  registry.npmmirror.com/picocolors/1.0.0:
-    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz}
-    name: picocolors
-    version: 1.0.0
-
-  registry.npmmirror.com/picomatch/2.3.1:
-    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz}
-    name: picomatch
-    version: 2.3.1
-    engines: {node: '>=8.6'}
-    dev: true
-
-  registry.npmmirror.com/pify/2.3.0:
-    resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz}
-    name: pify
-    version: 2.3.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/pify/3.0.0:
-    resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz}
-    name: pify
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/pify/4.0.1:
-    resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz}
-    name: pify
-    version: 4.0.1
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/pinkie-promise/2.0.1:
-    resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz}
-    name: pinkie-promise
-    version: 2.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      pinkie: registry.npmmirror.com/pinkie/2.0.4
-    dev: true
-
-  registry.npmmirror.com/pinkie/2.0.4:
-    resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz}
-    name: pinkie
-    version: 2.0.4
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/pkg-dir/1.0.0:
-    resolution: {integrity: sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pkg-dir/-/pkg-dir-1.0.0.tgz}
-    name: pkg-dir
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      find-up: registry.npmmirror.com/find-up/1.1.2
-    dev: true
-
-  registry.npmmirror.com/pkg-dir/3.0.0:
-    resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz}
-    name: pkg-dir
-    version: 3.0.0
-    engines: {node: '>=6'}
-    dependencies:
-      find-up: registry.npmmirror.com/find-up/3.0.0
-    dev: true
-
-  registry.npmmirror.com/pkg-dir/4.2.0:
-    resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz}
-    name: pkg-dir
-    version: 4.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      find-up: registry.npmmirror.com/find-up/4.1.0
-    dev: true
-
-  registry.npmmirror.com/please-upgrade-node/3.2.0:
-    resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz}
-    name: please-upgrade-node
-    version: 3.2.0
-    dependencies:
-      semver-compare: registry.npmmirror.com/semver-compare/1.0.0
-    dev: true
-
-  registry.npmmirror.com/pnp-webpack-plugin/1.7.0:
-    resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz}
-    name: pnp-webpack-plugin
-    version: 1.7.0
-    engines: {node: '>=6'}
-    dependencies:
-      ts-pnp: registry.npmmirror.com/ts-pnp/1.2.0
-    transitivePeerDependencies:
-      - typescript
-    dev: true
-
-  registry.npmmirror.com/portfinder/1.0.32:
-    resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz}
-    name: portfinder
-    version: 1.0.32
-    engines: {node: '>= 0.12.0'}
-    dependencies:
-      async: registry.npmmirror.com/async/2.6.4
-      debug: registry.npmmirror.com/debug/3.2.7
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/portfinder/1.0.32_supports-color@6.1.0:
-    resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz}
-    id: registry.npmmirror.com/portfinder/1.0.32
-    name: portfinder
-    version: 1.0.32
-    engines: {node: '>= 0.12.0'}
-    dependencies:
-      async: registry.npmmirror.com/async/2.6.4
-      debug: registry.npmmirror.com/debug/3.2.7_supports-color@6.1.0
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/posix-character-classes/0.1.1:
-    resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz}
-    name: posix-character-classes
-    version: 0.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/postcss-calc/7.0.5:
-    resolution: {integrity: sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-calc/-/postcss-calc-7.0.5.tgz}
-    name: postcss-calc
-    version: 7.0.5
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.10
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0
-    dev: true
-
-  registry.npmmirror.com/postcss-colormin/4.0.3:
-    resolution: {integrity: sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz}
-    name: postcss-colormin
-    version: 4.0.3
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      color: registry.npmmirror.com/color/3.2.1
-      has: registry.npmmirror.com/has/1.0.3
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-convert-values/4.0.1:
-    resolution: {integrity: sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz}
-    name: postcss-convert-values
-    version: 4.0.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-discard-comments/4.0.2:
-    resolution: {integrity: sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz}
-    name: postcss-discard-comments
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/postcss-discard-duplicates/4.0.2:
-    resolution: {integrity: sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz}
-    name: postcss-discard-duplicates
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/postcss-discard-empty/4.0.1:
-    resolution: {integrity: sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz}
-    name: postcss-discard-empty
-    version: 4.0.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/postcss-discard-overridden/4.0.1:
-    resolution: {integrity: sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz}
-    name: postcss-discard-overridden
-    version: 4.0.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/postcss-load-config/2.1.2:
-    resolution: {integrity: sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz}
-    name: postcss-load-config
-    version: 2.1.2
-    engines: {node: '>= 4'}
-    dependencies:
-      cosmiconfig: registry.npmmirror.com/cosmiconfig/5.2.1
-      import-cwd: registry.npmmirror.com/import-cwd/2.1.0
-    dev: true
-
-  registry.npmmirror.com/postcss-loader/3.0.0:
-    resolution: {integrity: sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-loader/-/postcss-loader-3.0.0.tgz}
-    name: postcss-loader
-    version: 3.0.0
-    engines: {node: '>= 6'}
-    dependencies:
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-load-config: registry.npmmirror.com/postcss-load-config/2.1.2
-      schema-utils: registry.npmmirror.com/schema-utils/1.0.0
-    dev: true
-
-  registry.npmmirror.com/postcss-merge-longhand/4.0.11:
-    resolution: {integrity: sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz}
-    name: postcss-merge-longhand
-    version: 4.0.11
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      css-color-names: registry.npmmirror.com/css-color-names/0.0.4
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-      stylehacks: registry.npmmirror.com/stylehacks/4.0.3
-    dev: true
-
-  registry.npmmirror.com/postcss-merge-rules/4.0.3:
-    resolution: {integrity: sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz}
-    name: postcss-merge-rules
-    version: 4.0.3
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      caniuse-api: registry.npmmirror.com/caniuse-api/3.0.0
-      cssnano-util-same-parent: registry.npmmirror.com/cssnano-util-same-parent/4.0.1
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/3.1.2
-      vendors: registry.npmmirror.com/vendors/1.0.4
-    dev: true
-
-  registry.npmmirror.com/postcss-minify-font-values/4.0.2:
-    resolution: {integrity: sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz}
-    name: postcss-minify-font-values
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-minify-gradients/4.0.2:
-    resolution: {integrity: sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz}
-    name: postcss-minify-gradients
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      cssnano-util-get-arguments: registry.npmmirror.com/cssnano-util-get-arguments/4.0.0
-      is-color-stop: registry.npmmirror.com/is-color-stop/1.1.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-minify-params/4.0.2:
-    resolution: {integrity: sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz}
-    name: postcss-minify-params
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      alphanum-sort: registry.npmmirror.com/alphanum-sort/1.0.2
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      cssnano-util-get-arguments: registry.npmmirror.com/cssnano-util-get-arguments/4.0.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-      uniqs: registry.npmmirror.com/uniqs/2.0.0
-    dev: true
-
-  registry.npmmirror.com/postcss-minify-selectors/4.0.2:
-    resolution: {integrity: sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz}
-    name: postcss-minify-selectors
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      alphanum-sort: registry.npmmirror.com/alphanum-sort/1.0.2
-      has: registry.npmmirror.com/has/1.0.3
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/3.1.2
-    dev: true
-
-  registry.npmmirror.com/postcss-modules-extract-imports/2.0.0:
-    resolution: {integrity: sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz}
-    name: postcss-modules-extract-imports
-    version: 2.0.0
-    engines: {node: '>= 6'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/postcss-modules-local-by-default/3.0.3:
-    resolution: {integrity: sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz}
-    name: postcss-modules-local-by-default
-    version: 3.0.3
-    engines: {node: '>= 6'}
-    dependencies:
-      icss-utils: registry.npmmirror.com/icss-utils/4.1.1
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.10
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0
-    dev: true
-
-  registry.npmmirror.com/postcss-modules-scope/2.2.0:
-    resolution: {integrity: sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz}
-    name: postcss-modules-scope
-    version: 2.2.0
-    engines: {node: '>= 6'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.10
-    dev: true
-
-  registry.npmmirror.com/postcss-modules-values/3.0.0:
-    resolution: {integrity: sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz}
-    name: postcss-modules-values
-    version: 3.0.0
-    dependencies:
-      icss-utils: registry.npmmirror.com/icss-utils/4.1.1
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/postcss-normalize-charset/4.0.1:
-    resolution: {integrity: sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz}
-    name: postcss-normalize-charset
-    version: 4.0.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/postcss-normalize-display-values/4.0.2:
-    resolution: {integrity: sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz}
-    name: postcss-normalize-display-values
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      cssnano-util-get-match: registry.npmmirror.com/cssnano-util-get-match/4.0.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-normalize-positions/4.0.2:
-    resolution: {integrity: sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz}
-    name: postcss-normalize-positions
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      cssnano-util-get-arguments: registry.npmmirror.com/cssnano-util-get-arguments/4.0.0
-      has: registry.npmmirror.com/has/1.0.3
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-normalize-repeat-style/4.0.2:
-    resolution: {integrity: sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz}
-    name: postcss-normalize-repeat-style
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      cssnano-util-get-arguments: registry.npmmirror.com/cssnano-util-get-arguments/4.0.0
-      cssnano-util-get-match: registry.npmmirror.com/cssnano-util-get-match/4.0.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-normalize-string/4.0.2:
-    resolution: {integrity: sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz}
-    name: postcss-normalize-string
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      has: registry.npmmirror.com/has/1.0.3
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-normalize-timing-functions/4.0.2:
-    resolution: {integrity: sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz}
-    name: postcss-normalize-timing-functions
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      cssnano-util-get-match: registry.npmmirror.com/cssnano-util-get-match/4.0.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-normalize-unicode/4.0.1:
-    resolution: {integrity: sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz}
-    name: postcss-normalize-unicode
-    version: 4.0.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-normalize-url/4.0.1:
-    resolution: {integrity: sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz}
-    name: postcss-normalize-url
-    version: 4.0.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      is-absolute-url: registry.npmmirror.com/is-absolute-url/2.1.0
-      normalize-url: registry.npmmirror.com/normalize-url/3.3.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-normalize-whitespace/4.0.2:
-    resolution: {integrity: sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz}
-    name: postcss-normalize-whitespace
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-ordered-values/4.1.2:
-    resolution: {integrity: sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz}
-    name: postcss-ordered-values
-    version: 4.1.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      cssnano-util-get-arguments: registry.npmmirror.com/cssnano-util-get-arguments/4.0.0
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-reduce-initial/4.0.3:
-    resolution: {integrity: sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz}
-    name: postcss-reduce-initial
-    version: 4.0.3
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      caniuse-api: registry.npmmirror.com/caniuse-api/3.0.0
-      has: registry.npmmirror.com/has/1.0.3
-      postcss: registry.npmmirror.com/postcss/7.0.39
-    dev: true
-
-  registry.npmmirror.com/postcss-reduce-transforms/4.0.2:
-    resolution: {integrity: sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz}
-    name: postcss-reduce-transforms
-    version: 4.0.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      cssnano-util-get-match: registry.npmmirror.com/cssnano-util-get-match/4.0.0
-      has: registry.npmmirror.com/has/1.0.3
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-selector-parser/3.1.2:
-    resolution: {integrity: sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz}
-    name: postcss-selector-parser
-    version: 3.1.2
-    engines: {node: '>=8'}
-    dependencies:
-      dot-prop: registry.npmmirror.com/dot-prop/5.3.0
-      indexes-of: registry.npmmirror.com/indexes-of/1.0.1
-      uniq: registry.npmmirror.com/uniq/1.0.1
-    dev: true
-
-  registry.npmmirror.com/postcss-selector-parser/6.0.10:
-    resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz}
-    name: postcss-selector-parser
-    version: 6.0.10
-    engines: {node: '>=4'}
-    dependencies:
-      cssesc: registry.npmmirror.com/cssesc/3.0.0
-      util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2
-    dev: true
-
-  registry.npmmirror.com/postcss-svgo/4.0.3:
-    resolution: {integrity: sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz}
-    name: postcss-svgo
-    version: 4.0.3
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1
-      svgo: registry.npmmirror.com/svgo/1.3.2
-    dev: true
-
-  registry.npmmirror.com/postcss-unique-selectors/4.0.1:
-    resolution: {integrity: sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz}
-    name: postcss-unique-selectors
-    version: 4.0.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      alphanum-sort: registry.npmmirror.com/alphanum-sort/1.0.2
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      uniqs: registry.npmmirror.com/uniqs/2.0.0
-    dev: true
-
-  registry.npmmirror.com/postcss-value-parser/3.3.1:
-    resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz}
-    name: postcss-value-parser
-    version: 3.3.1
-    dev: true
-
-  registry.npmmirror.com/postcss-value-parser/4.2.0:
-    resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz}
-    name: postcss-value-parser
-    version: 4.2.0
-    dev: true
-
-  registry.npmmirror.com/postcss/7.0.39:
-    resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz}
-    name: postcss
-    version: 7.0.39
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      picocolors: registry.npmmirror.com/picocolors/0.2.1
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    dev: true
-
-  registry.npmmirror.com/postcss/8.4.18:
-    resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.18.tgz}
-    name: postcss
-    version: 8.4.18
-    engines: {node: ^10 || ^12 || >=14}
-    dependencies:
-      nanoid: registry.npmmirror.com/nanoid/3.3.4
-      picocolors: registry.npmmirror.com/picocolors/1.0.0
-      source-map-js: registry.npmmirror.com/source-map-js/1.0.2
-
-  registry.npmmirror.com/prelude-ls/1.1.2:
-    resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz}
-    name: prelude-ls
-    version: 1.1.2
-    engines: {node: '>= 0.8.0'}
-    dev: true
-
-  registry.npmmirror.com/prepend-http/1.0.4:
-    resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz}
-    name: prepend-http
-    version: 1.0.4
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/prettier-linter-helpers/1.0.0:
-    resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz}
-    name: prettier-linter-helpers
-    version: 1.0.0
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      fast-diff: registry.npmmirror.com/fast-diff/1.2.0
-    dev: true
-
-  registry.npmmirror.com/prettier/1.19.1:
-    resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prettier/-/prettier-1.19.1.tgz}
-    name: prettier
-    version: 1.19.1
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/pretty-error/2.1.2:
-    resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-error/-/pretty-error-2.1.2.tgz}
-    name: pretty-error
-    version: 2.1.2
-    dependencies:
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      renderkid: registry.npmmirror.com/renderkid/2.0.7
-    dev: true
-
-  registry.npmmirror.com/process-nextick-args/2.0.1:
-    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz}
-    name: process-nextick-args
-    version: 2.0.1
-    dev: true
-
-  registry.npmmirror.com/process/0.11.10:
-    resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/process/-/process-0.11.10.tgz}
-    name: process
-    version: 0.11.10
-    engines: {node: '>= 0.6.0'}
-    dev: true
-
-  registry.npmmirror.com/progress/2.0.3:
-    resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz}
-    name: progress
-    version: 2.0.3
-    engines: {node: '>=0.4.0'}
-    dev: true
-
-  registry.npmmirror.com/promise-inflight/1.0.1_bluebird@3.7.2:
-    resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz}
-    id: registry.npmmirror.com/promise-inflight/1.0.1
-    name: promise-inflight
-    version: 1.0.1
-    peerDependencies:
-      bluebird: '*'
-    peerDependenciesMeta:
-      bluebird:
-        optional: true
-    dependencies:
-      bluebird: registry.npmmirror.com/bluebird/3.7.2
-    dev: true
-
-  registry.npmmirror.com/proxy-addr/2.0.7:
-    resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz}
-    name: proxy-addr
-    version: 2.0.7
-    engines: {node: '>= 0.10'}
-    dependencies:
-      forwarded: registry.npmmirror.com/forwarded/0.2.0
-      ipaddr.js: registry.npmmirror.com/ipaddr.js/1.9.1
-    dev: true
-
-  registry.npmmirror.com/prr/1.0.1:
-    resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz}
-    name: prr
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/pseudomap/1.0.2:
-    resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz}
-    name: pseudomap
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/psl/1.9.0:
-    resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz}
-    name: psl
-    version: 1.9.0
-    dev: true
-
-  registry.npmmirror.com/public-encrypt/4.0.3:
-    resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz}
-    name: public-encrypt
-    version: 4.0.3
-    dependencies:
-      bn.js: registry.npmmirror.com/bn.js/4.12.0
-      browserify-rsa: registry.npmmirror.com/browserify-rsa/4.1.0
-      create-hash: registry.npmmirror.com/create-hash/1.2.0
-      parse-asn1: registry.npmmirror.com/parse-asn1/5.1.6
-      randombytes: registry.npmmirror.com/randombytes/2.1.0
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/pump/2.0.1:
-    resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz}
-    name: pump
-    version: 2.0.1
-    dependencies:
-      end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4
-      once: registry.npmmirror.com/once/1.4.0
-    dev: true
-
-  registry.npmmirror.com/pump/3.0.0:
-    resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz}
-    name: pump
-    version: 3.0.0
-    dependencies:
-      end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4
-      once: registry.npmmirror.com/once/1.4.0
-    dev: true
-
-  registry.npmmirror.com/pumpify/1.5.1:
-    resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz}
-    name: pumpify
-    version: 1.5.1
-    dependencies:
-      duplexify: registry.npmmirror.com/duplexify/3.7.1
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      pump: registry.npmmirror.com/pump/2.0.1
-    dev: true
-
-  registry.npmmirror.com/punycode/1.3.2:
-    resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz}
-    name: punycode
-    version: 1.3.2
-    dev: true
-
-  registry.npmmirror.com/punycode/1.4.1:
-    resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz}
-    name: punycode
-    version: 1.4.1
-    dev: true
-
-  registry.npmmirror.com/punycode/2.1.1:
-    resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz}
-    name: punycode
-    version: 2.1.1
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/q/1.5.1:
-    resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/q/-/q-1.5.1.tgz}
-    name: q
-    version: 1.5.1
-    engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
-    dev: true
-
-  registry.npmmirror.com/qs/6.11.0:
-    resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz}
-    name: qs
-    version: 6.11.0
-    engines: {node: '>=0.6'}
-    dependencies:
-      side-channel: registry.npmmirror.com/side-channel/1.0.4
-
-  registry.npmmirror.com/qs/6.5.3:
-    resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz}
-    name: qs
-    version: 6.5.3
-    engines: {node: '>=0.6'}
-    dev: true
-
-  registry.npmmirror.com/query-string/4.3.4:
-    resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz}
-    name: query-string
-    version: 4.3.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-      strict-uri-encode: registry.npmmirror.com/strict-uri-encode/1.1.0
-    dev: true
-
-  registry.npmmirror.com/querystring-es3/0.2.1:
-    resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz}
-    name: querystring-es3
-    version: 0.2.1
-    engines: {node: '>=0.4.x'}
-    dev: true
-
-  registry.npmmirror.com/querystring/0.2.0:
-    resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/querystring/-/querystring-0.2.0.tgz}
-    name: querystring
-    version: 0.2.0
-    engines: {node: '>=0.4.x'}
-    deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
-    dev: true
-
-  registry.npmmirror.com/querystringify/2.2.0:
-    resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz}
-    name: querystringify
-    version: 2.2.0
-    dev: true
-
-  registry.npmmirror.com/queue-microtask/1.2.3:
-    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz}
-    name: queue-microtask
-    version: 1.2.3
-    dev: true
-
-  registry.npmmirror.com/randombytes/2.1.0:
-    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz}
-    name: randombytes
-    version: 2.1.0
-    dependencies:
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/randomfill/1.0.4:
-    resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz}
-    name: randomfill
-    version: 1.0.4
-    dependencies:
-      randombytes: registry.npmmirror.com/randombytes/2.1.0
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/range-parser/1.2.1:
-    resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz}
-    name: range-parser
-    version: 1.2.1
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/raw-body/2.5.1:
-    resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz}
-    name: raw-body
-    version: 2.5.1
-    engines: {node: '>= 0.8'}
-    dependencies:
-      bytes: registry.npmmirror.com/bytes/3.1.2
-      http-errors: registry.npmmirror.com/http-errors/2.0.0
-      iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24
-      unpipe: registry.npmmirror.com/unpipe/1.0.0
-    dev: true
-
-  registry.npmmirror.com/read-pkg/5.2.0:
-    resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz}
-    name: read-pkg
-    version: 5.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      '@types/normalize-package-data': registry.npmmirror.com/@types/normalize-package-data/2.4.1
-      normalize-package-data: registry.npmmirror.com/normalize-package-data/2.5.0
-      parse-json: registry.npmmirror.com/parse-json/5.2.0
-      type-fest: registry.npmmirror.com/type-fest/0.6.0
-    dev: true
-
-  registry.npmmirror.com/readable-stream/2.3.7:
-    resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz}
-    name: readable-stream
-    version: 2.3.7
-    dependencies:
-      core-util-is: registry.npmmirror.com/core-util-is/1.0.3
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      isarray: registry.npmmirror.com/isarray/1.0.0
-      process-nextick-args: registry.npmmirror.com/process-nextick-args/2.0.1
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2
-      string_decoder: registry.npmmirror.com/string_decoder/1.1.1
-      util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2
-    dev: true
-
-  registry.npmmirror.com/readable-stream/3.6.0:
-    resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz}
-    name: readable-stream
-    version: 3.6.0
-    engines: {node: '>= 6'}
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      string_decoder: registry.npmmirror.com/string_decoder/1.3.0
-      util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2
-    dev: true
-
-  registry.npmmirror.com/readdirp/2.2.1:
-    resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz}
-    name: readdirp
-    version: 2.2.1
-    engines: {node: '>=0.10'}
-    dependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      micromatch: registry.npmmirror.com/micromatch/3.1.10
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/readdirp/2.2.1_supports-color@6.1.0:
-    resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz}
-    id: registry.npmmirror.com/readdirp/2.2.1
-    name: readdirp
-    version: 2.2.1
-    engines: {node: '>=0.10'}
-    dependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      micromatch: registry.npmmirror.com/micromatch/3.1.10_supports-color@6.1.0
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/readdirp/3.6.0:
-    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz}
-    name: readdirp
-    version: 3.6.0
-    engines: {node: '>=8.10.0'}
-    dependencies:
-      picomatch: registry.npmmirror.com/picomatch/2.3.1
-    dev: true
-
-  registry.npmmirror.com/regenerate-unicode-properties/10.1.0:
-    resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz}
-    name: regenerate-unicode-properties
-    version: 10.1.0
-    engines: {node: '>=4'}
-    dependencies:
-      regenerate: registry.npmmirror.com/regenerate/1.4.2
-    dev: true
-
-  registry.npmmirror.com/regenerate/1.4.2:
-    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz}
-    name: regenerate
-    version: 1.4.2
-    dev: true
-
-  registry.npmmirror.com/regenerator-runtime/0.11.1:
-    resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz}
-    name: regenerator-runtime
-    version: 0.11.1
-    dev: false
-
-  registry.npmmirror.com/regenerator-runtime/0.13.10:
-    resolution: {integrity: sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz}
-    name: regenerator-runtime
-    version: 0.13.10
-    dev: true
-
-  registry.npmmirror.com/regenerator-transform/0.15.0:
-    resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz}
-    name: regenerator-transform
-    version: 0.15.0
-    dependencies:
-      '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.20.1
-    dev: true
-
-  registry.npmmirror.com/regex-not/1.0.2:
-    resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz}
-    name: regex-not
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-      safe-regex: registry.npmmirror.com/safe-regex/1.1.0
-    dev: true
-
-  registry.npmmirror.com/regexp.prototype.flags/1.4.3:
-    resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz}
-    name: regexp.prototype.flags
-    version: 1.4.3
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-      functions-have-names: registry.npmmirror.com/functions-have-names/1.2.3
-    dev: true
-
-  registry.npmmirror.com/regexpp/2.0.1:
-    resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexpp/-/regexpp-2.0.1.tgz}
-    name: regexpp
-    version: 2.0.1
-    engines: {node: '>=6.5.0'}
-    dev: true
-
-  registry.npmmirror.com/regexpu-core/5.2.1:
-    resolution: {integrity: sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.2.1.tgz}
-    name: regexpu-core
-    version: 5.2.1
-    engines: {node: '>=4'}
-    dependencies:
-      regenerate: registry.npmmirror.com/regenerate/1.4.2
-      regenerate-unicode-properties: registry.npmmirror.com/regenerate-unicode-properties/10.1.0
-      regjsgen: registry.npmmirror.com/regjsgen/0.7.1
-      regjsparser: registry.npmmirror.com/regjsparser/0.9.1
-      unicode-match-property-ecmascript: registry.npmmirror.com/unicode-match-property-ecmascript/2.0.0
-      unicode-match-property-value-ecmascript: registry.npmmirror.com/unicode-match-property-value-ecmascript/2.0.0
-    dev: true
-
-  registry.npmmirror.com/regjsgen/0.7.1:
-    resolution: {integrity: sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regjsgen/-/regjsgen-0.7.1.tgz}
-    name: regjsgen
-    version: 0.7.1
-    dev: true
-
-  registry.npmmirror.com/regjsparser/0.9.1:
-    resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz}
-    name: regjsparser
-    version: 0.9.1
-    hasBin: true
-    dependencies:
-      jsesc: registry.npmmirror.com/jsesc/0.5.0
-    dev: true
-
-  registry.npmmirror.com/relateurl/0.2.7:
-    resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz}
-    name: relateurl
-    version: 0.2.7
-    engines: {node: '>= 0.10'}
-    dev: true
-
-  registry.npmmirror.com/remove-trailing-separator/1.1.0:
-    resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz}
-    name: remove-trailing-separator
-    version: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/renderkid/2.0.7:
-    resolution: {integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/renderkid/-/renderkid-2.0.7.tgz}
-    name: renderkid
-    version: 2.0.7
-    dependencies:
-      css-select: registry.npmmirror.com/css-select/4.3.0
-      dom-converter: registry.npmmirror.com/dom-converter/0.2.0
-      htmlparser2: registry.npmmirror.com/htmlparser2/6.1.0
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1
-    dev: true
-
-  registry.npmmirror.com/repeat-element/1.1.4:
-    resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz}
-    name: repeat-element
-    version: 1.1.4
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/repeat-string/1.6.1:
-    resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz}
-    name: repeat-string
-    version: 1.6.1
-    engines: {node: '>=0.10'}
-    dev: true
-
-  registry.npmmirror.com/request/2.88.2:
-    resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/request/-/request-2.88.2.tgz}
-    name: request
-    version: 2.88.2
-    engines: {node: '>= 6'}
-    deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
-    dependencies:
-      aws-sign2: registry.npmmirror.com/aws-sign2/0.7.0
-      aws4: registry.npmmirror.com/aws4/1.11.0
-      caseless: registry.npmmirror.com/caseless/0.12.0
-      combined-stream: registry.npmmirror.com/combined-stream/1.0.8
-      extend: registry.npmmirror.com/extend/3.0.2
-      forever-agent: registry.npmmirror.com/forever-agent/0.6.1
-      form-data: registry.npmmirror.com/form-data/2.3.3
-      har-validator: registry.npmmirror.com/har-validator/5.1.5
-      http-signature: registry.npmmirror.com/http-signature/1.2.0
-      is-typedarray: registry.npmmirror.com/is-typedarray/1.0.0
-      isstream: registry.npmmirror.com/isstream/0.1.2
-      json-stringify-safe: registry.npmmirror.com/json-stringify-safe/5.0.1
-      mime-types: registry.npmmirror.com/mime-types/2.1.35
-      oauth-sign: registry.npmmirror.com/oauth-sign/0.9.0
-      performance-now: registry.npmmirror.com/performance-now/2.1.0
-      qs: registry.npmmirror.com/qs/6.5.3
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-      tough-cookie: registry.npmmirror.com/tough-cookie/2.5.0
-      tunnel-agent: registry.npmmirror.com/tunnel-agent/0.6.0
-      uuid: registry.npmmirror.com/uuid/3.4.0
-    dev: true
-
-  registry.npmmirror.com/require-directory/2.1.1:
-    resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz}
-    name: require-directory
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/require-main-filename/2.0.0:
-    resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz}
-    name: require-main-filename
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/requires-port/1.0.0:
-    resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz}
-    name: requires-port
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/resize-observer-polyfill/1.5.1:
-    resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz}
-    name: resize-observer-polyfill
-    version: 1.5.1
-    dev: false
-
-  registry.npmmirror.com/resolve-cwd/2.0.0:
-    resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz}
-    name: resolve-cwd
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      resolve-from: registry.npmmirror.com/resolve-from/3.0.0
-    dev: true
-
-  registry.npmmirror.com/resolve-from/3.0.0:
-    resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz}
-    name: resolve-from
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/resolve-from/4.0.0:
-    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz}
-    name: resolve-from
-    version: 4.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/resolve-url/0.2.1:
-    resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz}
-    name: resolve-url
-    version: 0.2.1
-    deprecated: https://github.com/lydell/resolve-url#deprecated
-    dev: true
-
-  registry.npmmirror.com/resolve/1.22.1:
-    resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz}
-    name: resolve
-    version: 1.22.1
-    hasBin: true
-    dependencies:
-      is-core-module: registry.npmmirror.com/is-core-module/2.11.0
-      path-parse: registry.npmmirror.com/path-parse/1.0.7
-      supports-preserve-symlinks-flag: registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/restore-cursor/2.0.0:
-    resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz}
-    name: restore-cursor
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      onetime: registry.npmmirror.com/onetime/2.0.1
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-    dev: true
-
-  registry.npmmirror.com/restore-cursor/3.1.0:
-    resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz}
-    name: restore-cursor
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      onetime: registry.npmmirror.com/onetime/5.1.2
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-    dev: true
-
-  registry.npmmirror.com/ret/0.1.15:
-    resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz}
-    name: ret
-    version: 0.1.15
-    engines: {node: '>=0.12'}
-    dev: true
-
-  registry.npmmirror.com/retry/0.12.0:
-    resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz}
-    name: retry
-    version: 0.12.0
-    engines: {node: '>= 4'}
-    dev: true
-
-  registry.npmmirror.com/reusify/1.0.4:
-    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz}
-    name: reusify
-    version: 1.0.4
-    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/rgb-regex/1.0.1:
-    resolution: {integrity: sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rgb-regex/-/rgb-regex-1.0.1.tgz}
-    name: rgb-regex
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/rgba-regex/1.0.0:
-    resolution: {integrity: sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rgba-regex/-/rgba-regex-1.0.0.tgz}
-    name: rgba-regex
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/rimraf/2.6.3:
-    resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz}
-    name: rimraf
-    version: 2.6.3
-    hasBin: true
-    dependencies:
-      glob: registry.npmmirror.com/glob/7.2.3
-    dev: true
-
-  registry.npmmirror.com/rimraf/2.7.1:
-    resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz}
-    name: rimraf
-    version: 2.7.1
-    hasBin: true
-    dependencies:
-      glob: registry.npmmirror.com/glob/7.2.3
-    dev: true
-
-  registry.npmmirror.com/rimraf/3.0.2:
-    resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz}
-    name: rimraf
-    version: 3.0.2
-    hasBin: true
-    dependencies:
-      glob: registry.npmmirror.com/glob/7.2.3
-    dev: true
-
-  registry.npmmirror.com/ripemd160/2.0.2:
-    resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz}
-    name: ripemd160
-    version: 2.0.2
-    dependencies:
-      hash-base: registry.npmmirror.com/hash-base/3.1.0
-      inherits: registry.npmmirror.com/inherits/2.0.4
-    dev: true
-
-  registry.npmmirror.com/run-async/2.4.1:
-    resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz}
-    name: run-async
-    version: 2.4.1
-    engines: {node: '>=0.12.0'}
-    dev: true
-
-  registry.npmmirror.com/run-parallel/1.2.0:
-    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz}
-    name: run-parallel
-    version: 1.2.0
-    dependencies:
-      queue-microtask: registry.npmmirror.com/queue-microtask/1.2.3
-    dev: true
-
-  registry.npmmirror.com/run-queue/1.0.3:
-    resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz}
-    name: run-queue
-    version: 1.0.3
-    dependencies:
-      aproba: registry.npmmirror.com/aproba/1.2.0
-    dev: true
-
-  registry.npmmirror.com/rxjs/6.6.7:
-    resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rxjs/-/rxjs-6.6.7.tgz}
-    name: rxjs
-    version: 6.6.7
-    engines: {npm: '>=2.0.0'}
-    dependencies:
-      tslib: registry.npmmirror.com/tslib/1.14.1
-    dev: true
-
-  registry.npmmirror.com/safe-buffer/5.1.2:
-    resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz}
-    name: safe-buffer
-    version: 5.1.2
-    dev: true
-
-  registry.npmmirror.com/safe-buffer/5.2.1:
-    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz}
-    name: safe-buffer
-    version: 5.2.1
-    dev: true
-
-  registry.npmmirror.com/safe-regex-test/1.0.0:
-    resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz}
-    name: safe-regex-test
-    version: 1.0.0
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.3
-      is-regex: registry.npmmirror.com/is-regex/1.1.4
-    dev: true
-
-  registry.npmmirror.com/safe-regex/1.1.0:
-    resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz}
-    name: safe-regex
-    version: 1.1.0
-    dependencies:
-      ret: registry.npmmirror.com/ret/0.1.15
-    dev: true
-
-  registry.npmmirror.com/safer-buffer/2.1.2:
-    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz}
-    name: safer-buffer
-    version: 2.1.2
-    dev: true
-
-  registry.npmmirror.com/sass-loader/8.0.2_sass@1.55.0:
-    resolution: {integrity: sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass-loader/-/sass-loader-8.0.2.tgz}
-    id: registry.npmmirror.com/sass-loader/8.0.2
-    name: sass-loader
-    version: 8.0.2
-    engines: {node: '>= 8.9.0'}
-    peerDependencies:
-      fibers: '>= 3.1.0'
-      node-sass: ^4.0.0
-      sass: ^1.3.0
-      webpack: ^4.36.0 || ^5.0.0
-    peerDependenciesMeta:
-      fibers:
-        optional: true
-      node-sass:
-        optional: true
-      sass:
-        optional: true
-    dependencies:
-      clone-deep: registry.npmmirror.com/clone-deep/4.0.1
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      neo-async: registry.npmmirror.com/neo-async/2.6.2
-      sass: registry.npmmirror.com/sass/1.55.0
-      schema-utils: registry.npmmirror.com/schema-utils/2.7.1
-      semver: registry.npmmirror.com/semver/6.3.0
-    dev: true
-
-  registry.npmmirror.com/sass/1.55.0:
-    resolution: {integrity: sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass/-/sass-1.55.0.tgz}
-    name: sass
-    version: 1.55.0
-    engines: {node: '>=12.0.0'}
-    hasBin: true
-    dependencies:
-      chokidar: registry.npmmirror.com/chokidar/3.5.3
-      immutable: registry.npmmirror.com/immutable/4.1.0
-      source-map-js: registry.npmmirror.com/source-map-js/1.0.2
-    dev: true
-
-  registry.npmmirror.com/sax/1.2.4:
-    resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz}
-    name: sax
-    version: 1.2.4
-    dev: true
-
-  registry.npmmirror.com/schema-utils/1.0.0:
-    resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz}
-    name: schema-utils
-    version: 1.0.0
-    engines: {node: '>= 4'}
-    dependencies:
-      ajv: registry.npmmirror.com/ajv/6.12.6
-      ajv-errors: registry.npmmirror.com/ajv-errors/1.0.1_ajv@6.12.6
-      ajv-keywords: registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6
-    dev: true
-
-  registry.npmmirror.com/schema-utils/2.7.1:
-    resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz}
-    name: schema-utils
-    version: 2.7.1
-    engines: {node: '>= 8.9.0'}
-    dependencies:
-      '@types/json-schema': registry.npmmirror.com/@types/json-schema/7.0.11
-      ajv: registry.npmmirror.com/ajv/6.12.6
-      ajv-keywords: registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6
-    dev: true
-
-  registry.npmmirror.com/select-hose/2.0.0:
-    resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz}
-    name: select-hose
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/selfsigned/1.10.14:
-    resolution: {integrity: sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/selfsigned/-/selfsigned-1.10.14.tgz}
-    name: selfsigned
-    version: 1.10.14
-    dependencies:
-      node-forge: registry.npmmirror.com/node-forge/0.10.0
-    dev: true
-
-  registry.npmmirror.com/semver-compare/1.0.0:
-    resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz}
-    name: semver-compare
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/semver/5.7.1:
-    resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz}
-    name: semver
-    version: 5.7.1
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/semver/6.3.0:
-    resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz}
-    name: semver
-    version: 6.3.0
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/send/0.18.0:
-    resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/send/-/send-0.18.0.tgz}
-    name: send
-    version: 0.18.0
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/2.6.9
-      depd: registry.npmmirror.com/depd/2.0.0
-      destroy: registry.npmmirror.com/destroy/1.2.0
-      encodeurl: registry.npmmirror.com/encodeurl/1.0.2
-      escape-html: registry.npmmirror.com/escape-html/1.0.3
-      etag: registry.npmmirror.com/etag/1.8.1
-      fresh: registry.npmmirror.com/fresh/0.5.2
-      http-errors: registry.npmmirror.com/http-errors/2.0.0
-      mime: registry.npmmirror.com/mime/1.6.0
-      ms: registry.npmmirror.com/ms/2.1.3
-      on-finished: registry.npmmirror.com/on-finished/2.4.1
-      range-parser: registry.npmmirror.com/range-parser/1.2.1
-      statuses: registry.npmmirror.com/statuses/2.0.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/send/0.18.0_supports-color@6.1.0:
-    resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/send/-/send-0.18.0.tgz}
-    id: registry.npmmirror.com/send/0.18.0
-    name: send
-    version: 0.18.0
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/2.6.9_supports-color@6.1.0
-      depd: registry.npmmirror.com/depd/2.0.0
-      destroy: registry.npmmirror.com/destroy/1.2.0
-      encodeurl: registry.npmmirror.com/encodeurl/1.0.2
-      escape-html: registry.npmmirror.com/escape-html/1.0.3
-      etag: registry.npmmirror.com/etag/1.8.1
-      fresh: registry.npmmirror.com/fresh/0.5.2
-      http-errors: registry.npmmirror.com/http-errors/2.0.0
-      mime: registry.npmmirror.com/mime/1.6.0
-      ms: registry.npmmirror.com/ms/2.1.3
-      on-finished: registry.npmmirror.com/on-finished/2.4.1
-      range-parser: registry.npmmirror.com/range-parser/1.2.1
-      statuses: registry.npmmirror.com/statuses/2.0.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/serialize-javascript/4.0.0:
-    resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz}
-    name: serialize-javascript
-    version: 4.0.0
-    dependencies:
-      randombytes: registry.npmmirror.com/randombytes/2.1.0
-    dev: true
-
-  registry.npmmirror.com/serve-index/1.9.1_supports-color@6.1.0:
-    resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz}
-    id: registry.npmmirror.com/serve-index/1.9.1
-    name: serve-index
-    version: 1.9.1
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      accepts: registry.npmmirror.com/accepts/1.3.8
-      batch: registry.npmmirror.com/batch/0.6.1
-      debug: registry.npmmirror.com/debug/2.6.9_supports-color@6.1.0
-      escape-html: registry.npmmirror.com/escape-html/1.0.3
-      http-errors: registry.npmmirror.com/http-errors/1.6.3
-      mime-types: registry.npmmirror.com/mime-types/2.1.35
-      parseurl: registry.npmmirror.com/parseurl/1.3.3
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/serve-static/1.15.0:
-    resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz}
-    name: serve-static
-    version: 1.15.0
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      encodeurl: registry.npmmirror.com/encodeurl/1.0.2
-      escape-html: registry.npmmirror.com/escape-html/1.0.3
-      parseurl: registry.npmmirror.com/parseurl/1.3.3
-      send: registry.npmmirror.com/send/0.18.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/serve-static/1.15.0_supports-color@6.1.0:
-    resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz}
-    id: registry.npmmirror.com/serve-static/1.15.0
-    name: serve-static
-    version: 1.15.0
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      encodeurl: registry.npmmirror.com/encodeurl/1.0.2
-      escape-html: registry.npmmirror.com/escape-html/1.0.3
-      parseurl: registry.npmmirror.com/parseurl/1.3.3
-      send: registry.npmmirror.com/send/0.18.0_supports-color@6.1.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/set-blocking/2.0.0:
-    resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz}
-    name: set-blocking
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/set-value/2.0.1:
-    resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz}
-    name: set-value
-    version: 2.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      is-extendable: registry.npmmirror.com/is-extendable/0.1.1
-      is-plain-object: registry.npmmirror.com/is-plain-object/2.0.4
-      split-string: registry.npmmirror.com/split-string/3.1.0
-    dev: true
-
-  registry.npmmirror.com/setimmediate/1.0.5:
-    resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz}
-    name: setimmediate
-    version: 1.0.5
-    dev: true
-
-  registry.npmmirror.com/setprototypeof/1.1.0:
-    resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz}
-    name: setprototypeof
-    version: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/setprototypeof/1.2.0:
-    resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz}
-    name: setprototypeof
-    version: 1.2.0
-    dev: true
-
-  registry.npmmirror.com/sha.js/2.4.11:
-    resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz}
-    name: sha.js
-    version: 2.4.11
-    hasBin: true
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/shallow-clone/3.0.1:
-    resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz}
-    name: shallow-clone
-    version: 3.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-    dev: true
-
-  registry.npmmirror.com/shebang-command/1.2.0:
-    resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz}
-    name: shebang-command
-    version: 1.2.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      shebang-regex: registry.npmmirror.com/shebang-regex/1.0.0
-    dev: true
-
-  registry.npmmirror.com/shebang-command/2.0.0:
-    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz}
-    name: shebang-command
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      shebang-regex: registry.npmmirror.com/shebang-regex/3.0.0
-    dev: true
-
-  registry.npmmirror.com/shebang-regex/1.0.0:
-    resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz}
-    name: shebang-regex
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/shebang-regex/3.0.0:
-    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz}
-    name: shebang-regex
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/shell-quote/1.7.4:
-    resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shell-quote/-/shell-quote-1.7.4.tgz}
-    name: shell-quote
-    version: 1.7.4
-    dev: true
-
-  registry.npmmirror.com/side-channel/1.0.4:
-    resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz}
-    name: side-channel
-    version: 1.0.4
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.3
-      object-inspect: registry.npmmirror.com/object-inspect/1.12.2
-
-  registry.npmmirror.com/signal-exit/3.0.7:
-    resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz}
-    name: signal-exit
-    version: 3.0.7
-    dev: true
-
-  registry.npmmirror.com/simple-swizzle/0.2.2:
-    resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz}
-    name: simple-swizzle
-    version: 0.2.2
-    dependencies:
-      is-arrayish: registry.npmmirror.com/is-arrayish/0.3.2
-    dev: true
-
-  registry.npmmirror.com/slash/1.0.0:
-    resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slash/-/slash-1.0.0.tgz}
-    name: slash
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/slash/2.0.0:
-    resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz}
-    name: slash
-    version: 2.0.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/slash/3.0.0:
-    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz}
-    name: slash
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/slice-ansi/0.0.4:
-    resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-0.0.4.tgz}
-    name: slice-ansi
-    version: 0.0.4
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/slice-ansi/2.1.0:
-    resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-2.1.0.tgz}
-    name: slice-ansi
-    version: 2.1.0
-    engines: {node: '>=6'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1
-      astral-regex: registry.npmmirror.com/astral-regex/1.0.0
-      is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/2.0.0
-    dev: true
-
-  registry.npmmirror.com/snapdragon-node/2.1.1:
-    resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz}
-    name: snapdragon-node
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      define-property: registry.npmmirror.com/define-property/1.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      snapdragon-util: registry.npmmirror.com/snapdragon-util/3.0.1
-    dev: true
-
-  registry.npmmirror.com/snapdragon-util/3.0.1:
-    resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz}
-    name: snapdragon-util
-    version: 3.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/snapdragon/0.8.2:
-    resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz}
-    name: snapdragon
-    version: 0.8.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      base: registry.npmmirror.com/base/0.11.2
-      debug: registry.npmmirror.com/debug/2.6.9
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      map-cache: registry.npmmirror.com/map-cache/0.2.2
-      source-map: registry.npmmirror.com/source-map/0.5.7
-      source-map-resolve: registry.npmmirror.com/source-map-resolve/0.5.3
-      use: registry.npmmirror.com/use/3.1.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/snapdragon/0.8.2_supports-color@6.1.0:
-    resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz}
-    id: registry.npmmirror.com/snapdragon/0.8.2
-    name: snapdragon
-    version: 0.8.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      base: registry.npmmirror.com/base/0.11.2
-      debug: registry.npmmirror.com/debug/2.6.9_supports-color@6.1.0
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      map-cache: registry.npmmirror.com/map-cache/0.2.2
-      source-map: registry.npmmirror.com/source-map/0.5.7
-      source-map-resolve: registry.npmmirror.com/source-map-resolve/0.5.3
-      use: registry.npmmirror.com/use/3.1.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/sockjs-client/1.6.1_supports-color@6.1.0:
-    resolution: {integrity: sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sockjs-client/-/sockjs-client-1.6.1.tgz}
-    id: registry.npmmirror.com/sockjs-client/1.6.1
-    name: sockjs-client
-    version: 1.6.1
-    engines: {node: '>=12'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/3.2.7_supports-color@6.1.0
-      eventsource: registry.npmmirror.com/eventsource/2.0.2
-      faye-websocket: registry.npmmirror.com/faye-websocket/0.11.4
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      url-parse: registry.npmmirror.com/url-parse/1.5.10
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/sockjs/0.3.24:
-    resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz}
-    name: sockjs
-    version: 0.3.24
-    dependencies:
-      faye-websocket: registry.npmmirror.com/faye-websocket/0.11.4
-      uuid: registry.npmmirror.com/uuid/8.3.2
-      websocket-driver: registry.npmmirror.com/websocket-driver/0.7.4
-    dev: true
-
-  registry.npmmirror.com/sort-keys/1.1.2:
-    resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz}
-    name: sort-keys
-    version: 1.1.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-plain-obj: registry.npmmirror.com/is-plain-obj/1.1.0
-    dev: true
-
-  registry.npmmirror.com/source-list-map/2.0.1:
-    resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz}
-    name: source-list-map
-    version: 2.0.1
-    dev: true
-
-  registry.npmmirror.com/source-map-js/1.0.2:
-    resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz}
-    name: source-map-js
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-
-  registry.npmmirror.com/source-map-resolve/0.5.3:
-    resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz}
-    name: source-map-resolve
-    version: 0.5.3
-    deprecated: See https://github.com/lydell/source-map-resolve#deprecated
-    dependencies:
-      atob: registry.npmmirror.com/atob/2.1.2
-      decode-uri-component: registry.npmmirror.com/decode-uri-component/0.2.0
-      resolve-url: registry.npmmirror.com/resolve-url/0.2.1
-      source-map-url: registry.npmmirror.com/source-map-url/0.4.1
-      urix: registry.npmmirror.com/urix/0.1.0
-    dev: true
-
-  registry.npmmirror.com/source-map-support/0.5.21:
-    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz}
-    name: source-map-support
-    version: 0.5.21
-    dependencies:
-      buffer-from: registry.npmmirror.com/buffer-from/1.1.2
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    dev: true
-
-  registry.npmmirror.com/source-map-url/0.4.1:
-    resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz}
-    name: source-map-url
-    version: 0.4.1
-    deprecated: See https://github.com/lydell/source-map-url#deprecated
-    dev: true
-
-  registry.npmmirror.com/source-map/0.5.7:
-    resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz}
-    name: source-map
-    version: 0.5.7
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/source-map/0.6.1:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz}
-    name: source-map
-    version: 0.6.1
-    engines: {node: '>=0.10.0'}
-
-  registry.npmmirror.com/source-map/0.7.4:
-    resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz}
-    name: source-map
-    version: 0.7.4
-    engines: {node: '>= 8'}
-    dev: true
-
-  registry.npmmirror.com/spdx-correct/3.1.1:
-    resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz}
-    name: spdx-correct
-    version: 3.1.1
-    dependencies:
-      spdx-expression-parse: registry.npmmirror.com/spdx-expression-parse/3.0.1
-      spdx-license-ids: registry.npmmirror.com/spdx-license-ids/3.0.12
-    dev: true
-
-  registry.npmmirror.com/spdx-exceptions/2.3.0:
-    resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz}
-    name: spdx-exceptions
-    version: 2.3.0
-    dev: true
-
-  registry.npmmirror.com/spdx-expression-parse/3.0.1:
-    resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz}
-    name: spdx-expression-parse
-    version: 3.0.1
-    dependencies:
-      spdx-exceptions: registry.npmmirror.com/spdx-exceptions/2.3.0
-      spdx-license-ids: registry.npmmirror.com/spdx-license-ids/3.0.12
-    dev: true
-
-  registry.npmmirror.com/spdx-license-ids/3.0.12:
-    resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz}
-    name: spdx-license-ids
-    version: 3.0.12
-    dev: true
-
-  registry.npmmirror.com/spdy-transport/3.0.0_supports-color@6.1.0:
-    resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz}
-    id: registry.npmmirror.com/spdy-transport/3.0.0
-    name: spdy-transport
-    version: 3.0.0
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4_supports-color@6.1.0
-      detect-node: registry.npmmirror.com/detect-node/2.1.0
-      hpack.js: registry.npmmirror.com/hpack.js/2.1.6
-      obuf: registry.npmmirror.com/obuf/1.1.2
-      readable-stream: registry.npmmirror.com/readable-stream/3.6.0
-      wbuf: registry.npmmirror.com/wbuf/1.7.3
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/spdy/4.0.2_supports-color@6.1.0:
-    resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz}
-    id: registry.npmmirror.com/spdy/4.0.2
-    name: spdy
-    version: 4.0.2
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4_supports-color@6.1.0
-      handle-thing: registry.npmmirror.com/handle-thing/2.0.1
-      http-deceiver: registry.npmmirror.com/http-deceiver/1.2.7
-      select-hose: registry.npmmirror.com/select-hose/2.0.0
-      spdy-transport: registry.npmmirror.com/spdy-transport/3.0.0_supports-color@6.1.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/split-string/3.1.0:
-    resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz}
-    name: split-string
-    version: 3.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-    dev: true
-
-  registry.npmmirror.com/sprintf-js/1.0.3:
-    resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz}
-    name: sprintf-js
-    version: 1.0.3
-    dev: true
-
-  registry.npmmirror.com/sshpk/1.17.0:
-    resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz}
-    name: sshpk
-    version: 1.17.0
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-    dependencies:
-      asn1: registry.npmmirror.com/asn1/0.2.6
-      assert-plus: registry.npmmirror.com/assert-plus/1.0.0
-      bcrypt-pbkdf: registry.npmmirror.com/bcrypt-pbkdf/1.0.2
-      dashdash: registry.npmmirror.com/dashdash/1.14.1
-      ecc-jsbn: registry.npmmirror.com/ecc-jsbn/0.1.2
-      getpass: registry.npmmirror.com/getpass/0.1.7
-      jsbn: registry.npmmirror.com/jsbn/0.1.1
-      safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2
-      tweetnacl: registry.npmmirror.com/tweetnacl/0.14.5
-    dev: true
-
-  registry.npmmirror.com/ssri/6.0.2:
-    resolution: {integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz}
-    name: ssri
-    version: 6.0.2
-    dependencies:
-      figgy-pudding: registry.npmmirror.com/figgy-pudding/3.5.2
-    dev: true
-
-  registry.npmmirror.com/ssri/8.0.1:
-    resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz}
-    name: ssri
-    version: 8.0.1
-    engines: {node: '>= 8'}
-    dependencies:
-      minipass: registry.npmmirror.com/minipass/3.3.4
-    dev: true
-
-  registry.npmmirror.com/stable/0.1.8:
-    resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz}
-    name: stable
-    version: 0.1.8
-    deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
-    dev: true
-
-  registry.npmmirror.com/stackframe/1.3.4:
-    resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz}
-    name: stackframe
-    version: 1.3.4
-    dev: true
-
-  registry.npmmirror.com/static-extend/0.1.2:
-    resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz}
-    name: static-extend
-    version: 0.1.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      object-copy: registry.npmmirror.com/object-copy/0.1.0
-    dev: true
-
-  registry.npmmirror.com/statuses/1.5.0:
-    resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz}
-    name: statuses
-    version: 1.5.0
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/statuses/2.0.1:
-    resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz}
-    name: statuses
-    version: 2.0.1
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/stream-browserify/2.0.2:
-    resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz}
-    name: stream-browserify
-    version: 2.0.2
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-    dev: true
-
-  registry.npmmirror.com/stream-each/1.2.3:
-    resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz}
-    name: stream-each
-    version: 1.2.3
-    dependencies:
-      end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4
-      stream-shift: registry.npmmirror.com/stream-shift/1.0.1
-    dev: true
-
-  registry.npmmirror.com/stream-http/2.8.3:
-    resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz}
-    name: stream-http
-    version: 2.8.3
-    dependencies:
-      builtin-status-codes: registry.npmmirror.com/builtin-status-codes/3.0.0
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-      to-arraybuffer: registry.npmmirror.com/to-arraybuffer/1.0.1
-      xtend: registry.npmmirror.com/xtend/4.0.2
-    dev: true
-
-  registry.npmmirror.com/stream-shift/1.0.1:
-    resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz}
-    name: stream-shift
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/strict-uri-encode/1.1.0:
-    resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz}
-    name: strict-uri-encode
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/string-argv/0.3.1:
-    resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-argv/-/string-argv-0.3.1.tgz}
-    name: string-argv
-    version: 0.3.1
-    engines: {node: '>=0.6.19'}
-    dev: true
-
-  registry.npmmirror.com/string-width/1.0.2:
-    resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz}
-    name: string-width
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      code-point-at: registry.npmmirror.com/code-point-at/1.1.0
-      is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/1.0.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1
-    dev: true
-
-  registry.npmmirror.com/string-width/2.1.1:
-    resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz}
-    name: string-width
-    version: 2.1.1
-    engines: {node: '>=4'}
-    dependencies:
-      is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/2.0.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/4.0.0
-    dev: true
-
-  registry.npmmirror.com/string-width/3.1.0:
-    resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz}
-    name: string-width
-    version: 3.1.0
-    engines: {node: '>=6'}
-    dependencies:
-      emoji-regex: registry.npmmirror.com/emoji-regex/7.0.3
-      is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/2.0.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0
-    dev: true
-
-  registry.npmmirror.com/string-width/4.2.3:
-    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz}
-    name: string-width
-    version: 4.2.3
-    engines: {node: '>=8'}
-    dependencies:
-      emoji-regex: registry.npmmirror.com/emoji-regex/8.0.0
-      is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/3.0.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-    dev: true
-
-  registry.npmmirror.com/string.prototype.trimend/1.0.5:
-    resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz}
-    name: string.prototype.trimend
-    version: 1.0.5
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-      es-abstract: registry.npmmirror.com/es-abstract/1.20.4
-    dev: true
-
-  registry.npmmirror.com/string.prototype.trimstart/1.0.5:
-    resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz}
-    name: string.prototype.trimstart
-    version: 1.0.5
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-      es-abstract: registry.npmmirror.com/es-abstract/1.20.4
-    dev: true
-
-  registry.npmmirror.com/string_decoder/1.1.1:
-    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz}
-    name: string_decoder
-    version: 1.1.1
-    dependencies:
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2
-    dev: true
-
-  registry.npmmirror.com/string_decoder/1.3.0:
-    resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz}
-    name: string_decoder
-    version: 1.3.0
-    dependencies:
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/stringify-object/3.3.0:
-    resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz}
-    name: stringify-object
-    version: 3.3.0
-    engines: {node: '>=4'}
-    dependencies:
-      get-own-enumerable-property-symbols: registry.npmmirror.com/get-own-enumerable-property-symbols/3.0.2
-      is-obj: registry.npmmirror.com/is-obj/1.0.1
-      is-regexp: registry.npmmirror.com/is-regexp/1.0.0
-    dev: true
-
-  registry.npmmirror.com/strip-ansi/3.0.1:
-    resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz}
-    name: strip-ansi
-    version: 3.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      ansi-regex: registry.npmmirror.com/ansi-regex/2.1.1
-    dev: true
-
-  registry.npmmirror.com/strip-ansi/4.0.0:
-    resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz}
-    name: strip-ansi
-    version: 4.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      ansi-regex: registry.npmmirror.com/ansi-regex/3.0.1
-    dev: true
-
-  registry.npmmirror.com/strip-ansi/5.2.0:
-    resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz}
-    name: strip-ansi
-    version: 5.2.0
-    engines: {node: '>=6'}
-    dependencies:
-      ansi-regex: registry.npmmirror.com/ansi-regex/4.1.1
-    dev: true
-
-  registry.npmmirror.com/strip-ansi/6.0.1:
-    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz}
-    name: strip-ansi
-    version: 6.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-regex: registry.npmmirror.com/ansi-regex/5.0.1
-    dev: true
-
-  registry.npmmirror.com/strip-eof/1.0.0:
-    resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz}
-    name: strip-eof
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/strip-final-newline/2.0.0:
-    resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz}
-    name: strip-final-newline
-    version: 2.0.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/strip-indent/2.0.0:
-    resolution: {integrity: sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-indent/-/strip-indent-2.0.0.tgz}
-    name: strip-indent
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/strip-json-comments/3.1.1:
-    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz}
-    name: strip-json-comments
-    version: 3.1.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/stylehacks/4.0.3:
-    resolution: {integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz}
-    name: stylehacks
-    version: 4.0.3
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      postcss: registry.npmmirror.com/postcss/7.0.39
-      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/3.1.2
-    dev: true
-
-  registry.npmmirror.com/supports-color/2.0.0:
-    resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz}
-    name: supports-color
-    version: 2.0.0
-    engines: {node: '>=0.8.0'}
-    dev: true
-
-  registry.npmmirror.com/supports-color/5.5.0:
-    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz}
-    name: supports-color
-    version: 5.5.0
-    engines: {node: '>=4'}
-    dependencies:
-      has-flag: registry.npmmirror.com/has-flag/3.0.0
-    dev: true
-
-  registry.npmmirror.com/supports-color/6.1.0:
-    resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz}
-    name: supports-color
-    version: 6.1.0
-    engines: {node: '>=6'}
-    dependencies:
-      has-flag: registry.npmmirror.com/has-flag/3.0.0
-    dev: true
-
-  registry.npmmirror.com/supports-color/7.2.0:
-    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz}
-    name: supports-color
-    version: 7.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      has-flag: registry.npmmirror.com/has-flag/4.0.0
-    dev: true
-
-  registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0:
-    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz}
-    name: supports-preserve-symlinks-flag
-    version: 1.0.0
-    engines: {node: '>= 0.4'}
-    dev: true
-
-  registry.npmmirror.com/svg-tags/1.0.0:
-    resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz}
-    name: svg-tags
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/svgo/1.3.2:
-    resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz}
-    name: svgo
-    version: 1.3.2
-    engines: {node: '>=4.0.0'}
-    deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x.
-    hasBin: true
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      coa: registry.npmmirror.com/coa/2.0.2
-      css-select: registry.npmmirror.com/css-select/2.1.0
-      css-select-base-adapter: registry.npmmirror.com/css-select-base-adapter/0.1.1
-      css-tree: registry.npmmirror.com/css-tree/1.0.0-alpha.37
-      csso: registry.npmmirror.com/csso/4.2.0
-      js-yaml: registry.npmmirror.com/js-yaml/3.14.1
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-      object.values: registry.npmmirror.com/object.values/1.1.5
-      sax: registry.npmmirror.com/sax/1.2.4
-      stable: registry.npmmirror.com/stable/0.1.8
-      unquote: registry.npmmirror.com/unquote/1.1.1
-      util.promisify: registry.npmmirror.com/util.promisify/1.0.1
-    dev: true
-
-  registry.npmmirror.com/symbol-observable/1.2.0:
-    resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/symbol-observable/-/symbol-observable-1.2.0.tgz}
-    name: symbol-observable
-    version: 1.2.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/table/5.4.6:
-    resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/table/-/table-5.4.6.tgz}
-    name: table
-    version: 5.4.6
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      ajv: registry.npmmirror.com/ajv/6.12.6
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      slice-ansi: registry.npmmirror.com/slice-ansi/2.1.0
-      string-width: registry.npmmirror.com/string-width/3.1.0
-    dev: true
-
-  registry.npmmirror.com/tapable/1.1.3:
-    resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz}
-    name: tapable
-    version: 1.1.3
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/terser-webpack-plugin/1.4.5:
-    resolution: {integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz}
-    name: terser-webpack-plugin
-    version: 1.4.5
-    engines: {node: '>= 6.9.0'}
-    peerDependencies:
-      webpack: ^4.0.0
-    dependencies:
-      cacache: registry.npmmirror.com/cacache/12.0.4
-      find-cache-dir: registry.npmmirror.com/find-cache-dir/2.1.0
-      is-wsl: registry.npmmirror.com/is-wsl/1.1.0
-      schema-utils: registry.npmmirror.com/schema-utils/1.0.0
-      serialize-javascript: registry.npmmirror.com/serialize-javascript/4.0.0
-      source-map: registry.npmmirror.com/source-map/0.6.1
-      terser: registry.npmmirror.com/terser/4.8.1
-      webpack-sources: registry.npmmirror.com/webpack-sources/1.4.3
-      worker-farm: registry.npmmirror.com/worker-farm/1.7.0
-    dev: true
-
-  registry.npmmirror.com/terser-webpack-plugin/1.4.5_webpack@4.46.0:
-    resolution: {integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz}
-    id: registry.npmmirror.com/terser-webpack-plugin/1.4.5
-    name: terser-webpack-plugin
-    version: 1.4.5
-    engines: {node: '>= 6.9.0'}
-    peerDependencies:
-      webpack: ^4.0.0
-    dependencies:
-      cacache: registry.npmmirror.com/cacache/12.0.4
-      find-cache-dir: registry.npmmirror.com/find-cache-dir/2.1.0
-      is-wsl: registry.npmmirror.com/is-wsl/1.1.0
-      schema-utils: registry.npmmirror.com/schema-utils/1.0.0
-      serialize-javascript: registry.npmmirror.com/serialize-javascript/4.0.0
-      source-map: registry.npmmirror.com/source-map/0.6.1
-      terser: registry.npmmirror.com/terser/4.8.1
-      webpack: registry.npmmirror.com/webpack/4.46.0
-      webpack-sources: registry.npmmirror.com/webpack-sources/1.4.3
-      worker-farm: registry.npmmirror.com/worker-farm/1.7.0
-    dev: true
-
-  registry.npmmirror.com/terser/4.8.1:
-    resolution: {integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/terser/-/terser-4.8.1.tgz}
-    name: terser
-    version: 4.8.1
-    engines: {node: '>=6.0.0'}
-    hasBin: true
-    dependencies:
-      acorn: registry.npmmirror.com/acorn/8.8.1
-      commander: registry.npmmirror.com/commander/2.20.3
-      source-map: registry.npmmirror.com/source-map/0.6.1
-      source-map-support: registry.npmmirror.com/source-map-support/0.5.21
-    dev: true
-
-  registry.npmmirror.com/text-table/0.2.0:
-    resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz}
-    name: text-table
-    version: 0.2.0
-    dev: true
-
-  registry.npmmirror.com/thenify-all/1.6.0:
-    resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz}
-    name: thenify-all
-    version: 1.6.0
-    engines: {node: '>=0.8'}
-    dependencies:
-      thenify: registry.npmmirror.com/thenify/3.3.1
-    dev: true
-
-  registry.npmmirror.com/thenify/3.3.1:
-    resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz}
-    name: thenify
-    version: 3.3.1
-    dependencies:
-      any-promise: registry.npmmirror.com/any-promise/1.3.0
-    dev: true
-
-  registry.npmmirror.com/thread-loader/2.1.3_webpack@4.46.0:
-    resolution: {integrity: sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/thread-loader/-/thread-loader-2.1.3.tgz}
-    id: registry.npmmirror.com/thread-loader/2.1.3
-    name: thread-loader
-    version: 2.1.3
-    engines: {node: '>= 6.9.0 <7.0.0 || >= 8.9.0'}
-    peerDependencies:
-      webpack: ^2.0.0 || ^3.0.0 || ^4.0.0
-    dependencies:
-      loader-runner: registry.npmmirror.com/loader-runner/2.4.0
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      neo-async: registry.npmmirror.com/neo-async/2.6.2
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/throttle-debounce/1.1.0:
-    resolution: {integrity: sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz}
-    name: throttle-debounce
-    version: 1.1.0
-    engines: {node: '>=4'}
-    dev: false
-
-  registry.npmmirror.com/through/2.3.8:
-    resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/through/-/through-2.3.8.tgz}
-    name: through
-    version: 2.3.8
-    dev: true
-
-  registry.npmmirror.com/through2/2.0.5:
-    resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz}
-    name: through2
-    version: 2.0.5
-    dependencies:
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.7
-      xtend: registry.npmmirror.com/xtend/4.0.2
-    dev: true
-
-  registry.npmmirror.com/thunky/1.1.0:
-    resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz}
-    name: thunky
-    version: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/timers-browserify/2.0.12:
-    resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz}
-    name: timers-browserify
-    version: 2.0.12
-    engines: {node: '>=0.6.0'}
-    dependencies:
-      setimmediate: registry.npmmirror.com/setimmediate/1.0.5
-    dev: true
-
-  registry.npmmirror.com/timsort/0.3.0:
-    resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz}
-    name: timsort
-    version: 0.3.0
-    dev: true
-
-  registry.npmmirror.com/tmp/0.0.33:
-    resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz}
-    name: tmp
-    version: 0.0.33
-    engines: {node: '>=0.6.0'}
-    dependencies:
-      os-tmpdir: registry.npmmirror.com/os-tmpdir/1.0.2
-    dev: true
-
-  registry.npmmirror.com/to-arraybuffer/1.0.1:
-    resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz}
-    name: to-arraybuffer
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/to-fast-properties/2.0.0:
-    resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz}
-    name: to-fast-properties
-    version: 2.0.0
-    engines: {node: '>=4'}
-
-  registry.npmmirror.com/to-object-path/0.3.0:
-    resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz}
-    name: to-object-path
-    version: 0.3.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/to-regex-range/2.1.1:
-    resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz}
-    name: to-regex-range
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-number: registry.npmmirror.com/is-number/3.0.0
-      repeat-string: registry.npmmirror.com/repeat-string/1.6.1
-    dev: true
-
-  registry.npmmirror.com/to-regex-range/5.0.1:
-    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz}
-    name: to-regex-range
-    version: 5.0.1
-    engines: {node: '>=8.0'}
-    dependencies:
-      is-number: registry.npmmirror.com/is-number/7.0.0
-    dev: true
-
-  registry.npmmirror.com/to-regex/3.0.2:
-    resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz}
-    name: to-regex
-    version: 3.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      define-property: registry.npmmirror.com/define-property/2.0.2
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      safe-regex: registry.npmmirror.com/safe-regex/1.1.0
-    dev: true
-
-  registry.npmmirror.com/toidentifier/1.0.1:
-    resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz}
-    name: toidentifier
-    version: 1.0.1
-    engines: {node: '>=0.6'}
-    dev: true
-
-  registry.npmmirror.com/toposort/1.0.7:
-    resolution: {integrity: sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/toposort/-/toposort-1.0.7.tgz}
-    name: toposort
-    version: 1.0.7
-    dev: true
-
-  registry.npmmirror.com/tough-cookie/2.5.0:
-    resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz}
-    name: tough-cookie
-    version: 2.5.0
-    engines: {node: '>=0.8'}
-    dependencies:
-      psl: registry.npmmirror.com/psl/1.9.0
-      punycode: registry.npmmirror.com/punycode/2.1.1
-    dev: true
-
-  registry.npmmirror.com/tryer/1.0.1:
-    resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz}
-    name: tryer
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/ts-pnp/1.2.0:
-    resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ts-pnp/-/ts-pnp-1.2.0.tgz}
-    name: ts-pnp
-    version: 1.2.0
-    engines: {node: '>=6'}
-    peerDependencies:
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-    dev: true
-
-  registry.npmmirror.com/tslib/1.14.1:
-    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz}
-    name: tslib
-    version: 1.14.1
-    dev: true
-
-  registry.npmmirror.com/tty-browserify/0.0.0:
-    resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz}
-    name: tty-browserify
-    version: 0.0.0
-    dev: true
-
-  registry.npmmirror.com/tunnel-agent/0.6.0:
-    resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz}
-    name: tunnel-agent
-    version: 0.6.0
-    dependencies:
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/tweetnacl/0.14.5:
-    resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz}
-    name: tweetnacl
-    version: 0.14.5
-    dev: true
-
-  registry.npmmirror.com/type-check/0.3.2:
-    resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz}
-    name: type-check
-    version: 0.3.2
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      prelude-ls: registry.npmmirror.com/prelude-ls/1.1.2
-    dev: true
-
-  registry.npmmirror.com/type-fest/0.21.3:
-    resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz}
-    name: type-fest
-    version: 0.21.3
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/type-fest/0.6.0:
-    resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz}
-    name: type-fest
-    version: 0.6.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/type-fest/0.8.1:
-    resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz}
-    name: type-fest
-    version: 0.8.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/type-is/1.6.18:
-    resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz}
-    name: type-is
-    version: 1.6.18
-    engines: {node: '>= 0.6'}
-    dependencies:
-      media-typer: registry.npmmirror.com/media-typer/0.3.0
-      mime-types: registry.npmmirror.com/mime-types/2.1.35
-    dev: true
-
-  registry.npmmirror.com/typedarray/0.0.6:
-    resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz}
-    name: typedarray
-    version: 0.0.6
-    dev: true
-
-  registry.npmmirror.com/uglify-js/3.4.10:
-    resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.4.10.tgz}
-    name: uglify-js
-    version: 3.4.10
-    engines: {node: '>=0.8.0'}
-    hasBin: true
-    dependencies:
-      commander: registry.npmmirror.com/commander/2.19.0
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    dev: true
-
-  registry.npmmirror.com/unbox-primitive/1.0.2:
-    resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz}
-    name: unbox-primitive
-    version: 1.0.2
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      has-bigints: registry.npmmirror.com/has-bigints/1.0.2
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-      which-boxed-primitive: registry.npmmirror.com/which-boxed-primitive/1.0.2
-    dev: true
-
-  registry.npmmirror.com/unicode-canonical-property-names-ecmascript/2.0.0:
-    resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz}
-    name: unicode-canonical-property-names-ecmascript
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/unicode-match-property-ecmascript/2.0.0:
-    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz}
-    name: unicode-match-property-ecmascript
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      unicode-canonical-property-names-ecmascript: registry.npmmirror.com/unicode-canonical-property-names-ecmascript/2.0.0
-      unicode-property-aliases-ecmascript: registry.npmmirror.com/unicode-property-aliases-ecmascript/2.1.0
-    dev: true
-
-  registry.npmmirror.com/unicode-match-property-value-ecmascript/2.0.0:
-    resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz}
-    name: unicode-match-property-value-ecmascript
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/unicode-property-aliases-ecmascript/2.1.0:
-    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz}
-    name: unicode-property-aliases-ecmascript
-    version: 2.1.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/union-value/1.0.1:
-    resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz}
-    name: union-value
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-union: registry.npmmirror.com/arr-union/3.1.0
-      get-value: registry.npmmirror.com/get-value/2.0.6
-      is-extendable: registry.npmmirror.com/is-extendable/0.1.1
-      set-value: registry.npmmirror.com/set-value/2.0.1
-    dev: true
-
-  registry.npmmirror.com/uniq/1.0.1:
-    resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uniq/-/uniq-1.0.1.tgz}
-    name: uniq
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/uniqs/2.0.0:
-    resolution: {integrity: sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uniqs/-/uniqs-2.0.0.tgz}
-    name: uniqs
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/unique-filename/1.1.1:
-    resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz}
-    name: unique-filename
-    version: 1.1.1
-    dependencies:
-      unique-slug: registry.npmmirror.com/unique-slug/2.0.2
-    dev: true
-
-  registry.npmmirror.com/unique-slug/2.0.2:
-    resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz}
-    name: unique-slug
-    version: 2.0.2
-    dependencies:
-      imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4
-    dev: true
-
-  registry.npmmirror.com/universalify/0.1.2:
-    resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz}
-    name: universalify
-    version: 0.1.2
-    engines: {node: '>= 4.0.0'}
-    dev: true
-
-  registry.npmmirror.com/unpipe/1.0.0:
-    resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz}
-    name: unpipe
-    version: 1.0.0
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/unquote/1.1.1:
-    resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz}
-    name: unquote
-    version: 1.1.1
-    dev: true
-
-  registry.npmmirror.com/unset-value/1.0.0:
-    resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz}
-    name: unset-value
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      has-value: registry.npmmirror.com/has-value/0.3.1
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/upath/1.2.0:
-    resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz}
-    name: upath
-    version: 1.2.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/update-browserslist-db/1.0.10_browserslist@4.21.4:
-    resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz}
-    id: registry.npmmirror.com/update-browserslist-db/1.0.10
-    name: update-browserslist-db
-    version: 1.0.10
-    hasBin: true
-    peerDependencies:
-      browserslist: '>= 4.21.0'
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.4
-      escalade: registry.npmmirror.com/escalade/3.1.1
-      picocolors: registry.npmmirror.com/picocolors/1.0.0
-    dev: true
-
-  registry.npmmirror.com/upper-case/1.1.3:
-    resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upper-case/-/upper-case-1.1.3.tgz}
-    name: upper-case
-    version: 1.1.3
-    dev: true
-
-  registry.npmmirror.com/uri-js/4.4.1:
-    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz}
-    name: uri-js
-    version: 4.4.1
-    dependencies:
-      punycode: registry.npmmirror.com/punycode/2.1.1
-    dev: true
-
-  registry.npmmirror.com/urix/0.1.0:
-    resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz}
-    name: urix
-    version: 0.1.0
-    deprecated: Please see https://github.com/lydell/urix#deprecated
-    dev: true
-
-  registry.npmmirror.com/url-loader/2.3.0_ke5umg2s3o4akbat3qvdol7cby:
-    resolution: {integrity: sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/url-loader/-/url-loader-2.3.0.tgz}
-    id: registry.npmmirror.com/url-loader/2.3.0
-    name: url-loader
-    version: 2.3.0
-    engines: {node: '>= 8.9.0'}
-    peerDependencies:
-      file-loader: '*'
-      webpack: ^4.0.0
-    peerDependenciesMeta:
-      file-loader:
-        optional: true
-    dependencies:
-      file-loader: registry.npmmirror.com/file-loader/4.3.0_webpack@4.46.0
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      mime: registry.npmmirror.com/mime/2.6.0
-      schema-utils: registry.npmmirror.com/schema-utils/2.7.1
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-
-  registry.npmmirror.com/url-parse/1.5.10:
-    resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz}
-    name: url-parse
-    version: 1.5.10
-    dependencies:
-      querystringify: registry.npmmirror.com/querystringify/2.2.0
-      requires-port: registry.npmmirror.com/requires-port/1.0.0
-    dev: true
-
-  registry.npmmirror.com/url/0.11.0:
-    resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/url/-/url-0.11.0.tgz}
-    name: url
-    version: 0.11.0
-    dependencies:
-      punycode: registry.npmmirror.com/punycode/1.3.2
-      querystring: registry.npmmirror.com/querystring/0.2.0
-    dev: true
-
-  registry.npmmirror.com/use/3.1.1:
-    resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/use/-/use-3.1.1.tgz}
-    name: use
-    version: 3.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/util-deprecate/1.0.2:
-    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz}
-    name: util-deprecate
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/util.promisify/1.0.0:
-    resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.0.tgz}
-    name: util.promisify
-    version: 1.0.0
-    dependencies:
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-      object.getownpropertydescriptors: registry.npmmirror.com/object.getownpropertydescriptors/2.1.4
-    dev: true
-
-  registry.npmmirror.com/util.promisify/1.0.1:
-    resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.1.tgz}
-    name: util.promisify
-    version: 1.0.1
-    dependencies:
-      define-properties: registry.npmmirror.com/define-properties/1.1.4
-      es-abstract: registry.npmmirror.com/es-abstract/1.20.4
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-      object.getownpropertydescriptors: registry.npmmirror.com/object.getownpropertydescriptors/2.1.4
-    dev: true
-
-  registry.npmmirror.com/util/0.10.3:
-    resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util/-/util-0.10.3.tgz}
-    name: util
-    version: 0.10.3
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.1
-    dev: true
-
-  registry.npmmirror.com/util/0.11.1:
-    resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util/-/util-0.11.1.tgz}
-    name: util
-    version: 0.11.1
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.3
-    dev: true
-
-  registry.npmmirror.com/utila/0.4.0:
-    resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz}
-    name: utila
-    version: 0.4.0
-    dev: true
-
-  registry.npmmirror.com/utils-merge/1.0.1:
-    resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz}
-    name: utils-merge
-    version: 1.0.1
-    engines: {node: '>= 0.4.0'}
-    dev: true
-
-  registry.npmmirror.com/uuid/3.4.0:
-    resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz}
-    name: uuid
-    version: 3.4.0
-    deprecated: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/uuid/8.3.2:
-    resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz}
-    name: uuid
-    version: 8.3.2
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/v8-compile-cache/2.3.0:
-    resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz}
-    name: v8-compile-cache
-    version: 2.3.0
-    dev: true
-
-  registry.npmmirror.com/validate-npm-package-license/3.0.4:
-    resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz}
-    name: validate-npm-package-license
-    version: 3.0.4
-    dependencies:
-      spdx-correct: registry.npmmirror.com/spdx-correct/3.1.1
-      spdx-expression-parse: registry.npmmirror.com/spdx-expression-parse/3.0.1
-    dev: true
-
-  registry.npmmirror.com/vary/1.1.2:
-    resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz}
-    name: vary
-    version: 1.1.2
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/vendors/1.0.4:
-    resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz}
-    name: vendors
-    version: 1.0.4
-    dev: true
-
-  registry.npmmirror.com/verror/1.10.0:
-    resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz}
-    name: verror
-    version: 1.10.0
-    engines: {'0': node >=0.6.0}
-    dependencies:
-      assert-plus: registry.npmmirror.com/assert-plus/1.0.0
-      core-util-is: registry.npmmirror.com/core-util-is/1.0.2
-      extsprintf: registry.npmmirror.com/extsprintf/1.3.0
-    dev: true
-
-  registry.npmmirror.com/vm-browserify/1.1.2:
-    resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz}
-    name: vm-browserify
-    version: 1.1.2
-    dev: true
-
-  registry.npmmirror.com/vue-eslint-parser/7.11.0_eslint@6.8.0:
-    resolution: {integrity: sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz}
-    id: registry.npmmirror.com/vue-eslint-parser/7.11.0
-    name: vue-eslint-parser
-    version: 7.11.0
-    engines: {node: '>=8.10'}
-    peerDependencies:
-      eslint: '>=5.0.0'
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-      eslint: registry.npmmirror.com/eslint/6.8.0
-      eslint-scope: registry.npmmirror.com/eslint-scope/5.1.1
-      eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/1.3.0
-      espree: registry.npmmirror.com/espree/6.2.1
-      esquery: registry.npmmirror.com/esquery/1.4.0
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      semver: registry.npmmirror.com/semver/6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vue-hot-reload-api/2.3.4:
-    resolution: {integrity: sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz}
-    name: vue-hot-reload-api
-    version: 2.3.4
-    dev: true
-
-  registry.npmmirror.com/vue-loader/15.10.0_6vkeqrujc3ehrt5ynq3wmaimc4:
-    resolution: {integrity: sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.0.tgz}
-    id: registry.npmmirror.com/vue-loader/15.10.0
-    name: vue-loader
-    version: 15.10.0
-    peerDependencies:
-      '@vue/compiler-sfc': ^3.0.8
-      cache-loader: '*'
-      css-loader: '*'
-      vue-template-compiler: '*'
-      webpack: ^3.0.0 || ^4.1.0 || ^5.0.0-0
-    peerDependenciesMeta:
-      '@vue/compiler-sfc':
-        optional: true
-      cache-loader:
-        optional: true
-      vue-template-compiler:
-        optional: true
-    dependencies:
-      '@vue/component-compiler-utils': registry.npmmirror.com/@vue/component-compiler-utils/3.3.0
-      cache-loader: registry.npmmirror.com/cache-loader/4.1.0_webpack@4.46.0
-      css-loader: registry.npmmirror.com/css-loader/3.6.0_webpack@4.46.0
-      hash-sum: registry.npmmirror.com/hash-sum/1.0.2
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      vue-hot-reload-api: registry.npmmirror.com/vue-hot-reload-api/2.3.4
-      vue-style-loader: registry.npmmirror.com/vue-style-loader/4.1.3
-      vue-template-compiler: registry.npmmirror.com/vue-template-compiler/2.7.13
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    transitivePeerDependencies:
-      - arc-templates
-      - atpl
-      - babel-core
-      - bracket-template
-      - coffee-script
-      - dot
-      - dust
-      - dustjs-helpers
-      - dustjs-linkedin
-      - eco
-      - ect
-      - ejs
-      - haml-coffee
-      - hamlet
-      - hamljs
-      - handlebars
-      - hogan.js
-      - htmling
-      - jade
-      - jazz
-      - jqtpl
-      - just
-      - liquid-node
-      - liquor
-      - lodash
-      - marko
-      - mote
-      - mustache
-      - nunjucks
-      - plates
-      - pug
-      - qejs
-      - ractive
-      - razor-tmpl
-      - react
-      - react-dom
-      - slm
-      - squirrelly
-      - swig
-      - swig-templates
-      - teacup
-      - templayed
-      - then-jade
-      - then-pug
-      - tinyliquid
-      - toffee
-      - twig
-      - twing
-      - underscore
-      - vash
-      - velocityjs
-      - walrus
-      - whiskers
-    dev: true
-
-  registry.npmmirror.com/vue-loader/16.8.3_vue@2.7.13+webpack@4.46.0:
-    resolution: {integrity: sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz}
-    id: registry.npmmirror.com/vue-loader/16.8.3
-    name: vue-loader
-    version: 16.8.3
-    requiresBuild: true
-    peerDependencies:
-      '@vue/compiler-sfc': ^3.0.8
-      vue: ^3.2.13
-      webpack: ^4.1.0 || ^5.0.0-0
-    peerDependenciesMeta:
-      '@vue/compiler-sfc':
-        optional: true
-      vue:
-        optional: true
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      hash-sum: registry.npmmirror.com/hash-sum/2.0.0
-      loader-utils: registry.npmmirror.com/loader-utils/2.0.3
-      vue: registry.npmmirror.com/vue/2.7.13
-      webpack: registry.npmmirror.com/webpack/4.46.0
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/vue-ls/3.2.2:
-    resolution: {integrity: sha512-xros9Zheckv+8x9PerHvWe5SMYud0+ZlPAMrKWKNtDN/usMOKRoluj6kBZyQo6BxwpmiBL8/EjKMYjxmCNXOMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-ls/-/vue-ls-3.2.2.tgz}
-    name: vue-ls
-    version: 3.2.2
-    engines: {node: '>=6.11.5'}
-    requiresBuild: true
-    dependencies:
-      opencollective-postinstall: registry.npmmirror.com/opencollective-postinstall/2.0.3
-    dev: false
-
-  registry.npmmirror.com/vue-router/3.6.5_vue@2.7.13:
-    resolution: {integrity: sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz}
-    id: registry.npmmirror.com/vue-router/3.6.5
-    name: vue-router
-    version: 3.6.5
-    peerDependencies:
-      vue: ^2
-    dependencies:
-      vue: registry.npmmirror.com/vue/2.7.13
-    dev: false
-
-  registry.npmmirror.com/vue-style-loader/4.1.3:
-    resolution: {integrity: sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz}
-    name: vue-style-loader
-    version: 4.1.3
-    dependencies:
-      hash-sum: registry.npmmirror.com/hash-sum/1.0.2
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-    dev: true
-
-  registry.npmmirror.com/vue-template-compiler/2.7.13:
-    resolution: {integrity: sha512-jYM6TClwDS9YqP48gYrtAtaOhRKkbYmbzE+Q51gX5YDr777n7tNI/IZk4QV4l/PjQPNh/FVa/E92sh/RqKMrog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.13.tgz}
-    name: vue-template-compiler
-    version: 2.7.13
-    dependencies:
-      de-indent: registry.npmmirror.com/de-indent/1.0.2
-      he: registry.npmmirror.com/he/1.2.0
-    dev: true
-
-  registry.npmmirror.com/vue-template-es2015-compiler/1.9.1:
-    resolution: {integrity: sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz}
-    name: vue-template-es2015-compiler
-    version: 1.9.1
-    dev: true
-
-  registry.npmmirror.com/vue/2.7.13:
-    resolution: {integrity: sha512-QnM6ULTNnPmn71eUO+4hdjfBIA3H0GLsBnchnI/kS678tjI45GOUZhXd0oP/gX9isikXz1PAzSnkPspp9EUNfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue/-/vue-2.7.13.tgz}
-    name: vue
-    version: 2.7.13
-    dependencies:
-      '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/2.7.13
-      csstype: registry.npmmirror.com/csstype/3.1.1
-
-  registry.npmmirror.com/vuex/3.6.2_vue@2.7.13:
-    resolution: {integrity: sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz}
-    id: registry.npmmirror.com/vuex/3.6.2
-    name: vuex
-    version: 3.6.2
-    peerDependencies:
-      vue: ^2.0.0
-    dependencies:
-      vue: registry.npmmirror.com/vue/2.7.13
-    dev: false
-
-  registry.npmmirror.com/watchpack-chokidar2/2.0.1:
-    resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz}
-    name: watchpack-chokidar2
-    version: 2.0.1
-    requiresBuild: true
-    dependencies:
-      chokidar: registry.npmmirror.com/chokidar/2.1.8
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/watchpack/1.7.5:
-    resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz}
-    name: watchpack
-    version: 1.7.5
-    dependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      neo-async: registry.npmmirror.com/neo-async/2.6.2
-    optionalDependencies:
-      chokidar: registry.npmmirror.com/chokidar/3.5.3
-      watchpack-chokidar2: registry.npmmirror.com/watchpack-chokidar2/2.0.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/wbuf/1.7.3:
-    resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz}
-    name: wbuf
-    version: 1.7.3
-    dependencies:
-      minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1
-    dev: true
-
-  registry.npmmirror.com/wcwidth/1.0.1:
-    resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz}
-    name: wcwidth
-    version: 1.0.1
-    dependencies:
-      defaults: registry.npmmirror.com/defaults/1.0.4
-    dev: true
-
-  registry.npmmirror.com/webpack-bundle-analyzer/3.9.0:
-    resolution: {integrity: sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz}
-    name: webpack-bundle-analyzer
-    version: 3.9.0
-    engines: {node: '>= 6.14.4'}
-    hasBin: true
-    dependencies:
-      acorn: registry.npmmirror.com/acorn/7.4.1
-      acorn-walk: registry.npmmirror.com/acorn-walk/7.2.0
-      bfj: registry.npmmirror.com/bfj/6.1.2
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      commander: registry.npmmirror.com/commander/2.20.3
-      ejs: registry.npmmirror.com/ejs/2.7.4
-      express: registry.npmmirror.com/express/4.18.2
-      filesize: registry.npmmirror.com/filesize/3.6.1
-      gzip-size: registry.npmmirror.com/gzip-size/5.1.1
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-      opener: registry.npmmirror.com/opener/1.5.2
-      ws: registry.npmmirror.com/ws/6.2.2
-    transitivePeerDependencies:
-      - bufferutil
-      - supports-color
-      - utf-8-validate
-    dev: true
-
-  registry.npmmirror.com/webpack-chain/6.5.1:
-    resolution: {integrity: sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz}
-    name: webpack-chain
-    version: 6.5.1
-    engines: {node: '>=8'}
-    dependencies:
-      deepmerge: registry.npmmirror.com/deepmerge/1.5.2
-      javascript-stringify: registry.npmmirror.com/javascript-stringify/2.1.0
-    dev: true
-
-  registry.npmmirror.com/webpack-dev-middleware/3.7.3_webpack@4.46.0:
-    resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz}
-    id: registry.npmmirror.com/webpack-dev-middleware/3.7.3
-    name: webpack-dev-middleware
-    version: 3.7.3
-    engines: {node: '>= 6'}
-    peerDependencies:
-      webpack: ^4.0.0 || ^5.0.0
-    dependencies:
-      memory-fs: registry.npmmirror.com/memory-fs/0.4.1
-      mime: registry.npmmirror.com/mime/2.6.0
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-      range-parser: registry.npmmirror.com/range-parser/1.2.1
-      webpack: registry.npmmirror.com/webpack/4.46.0
-      webpack-log: registry.npmmirror.com/webpack-log/2.0.0
-    dev: true
-
-  registry.npmmirror.com/webpack-dev-server/3.11.3_webpack@4.46.0:
-    resolution: {integrity: sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz}
-    id: registry.npmmirror.com/webpack-dev-server/3.11.3
-    name: webpack-dev-server
-    version: 3.11.3
-    engines: {node: '>= 6.11.5'}
-    hasBin: true
-    peerDependencies:
-      webpack: ^4.0.0 || ^5.0.0
-      webpack-cli: '*'
-    peerDependenciesMeta:
-      webpack-cli:
-        optional: true
-    dependencies:
-      ansi-html-community: registry.npmmirror.com/ansi-html-community/0.0.8
-      bonjour: registry.npmmirror.com/bonjour/3.5.0
-      chokidar: registry.npmmirror.com/chokidar/2.1.8_supports-color@6.1.0
-      compression: registry.npmmirror.com/compression/1.7.4_supports-color@6.1.0
-      connect-history-api-fallback: registry.npmmirror.com/connect-history-api-fallback/1.6.0
-      debug: registry.npmmirror.com/debug/4.3.4_supports-color@6.1.0
-      del: registry.npmmirror.com/del/4.1.1
-      express: registry.npmmirror.com/express/4.18.2_supports-color@6.1.0
-      html-entities: registry.npmmirror.com/html-entities/1.4.0
-      http-proxy-middleware: registry.npmmirror.com/http-proxy-middleware/0.19.1_tmpgdztspuwvsxzgjkhoqk7duq
-      import-local: registry.npmmirror.com/import-local/2.0.0
-      internal-ip: registry.npmmirror.com/internal-ip/4.3.0
-      ip: registry.npmmirror.com/ip/1.1.8
-      is-absolute-url: registry.npmmirror.com/is-absolute-url/3.0.3
-      killable: registry.npmmirror.com/killable/1.0.1
-      loglevel: registry.npmmirror.com/loglevel/1.8.0
-      opn: registry.npmmirror.com/opn/5.5.0
-      p-retry: registry.npmmirror.com/p-retry/3.0.1
-      portfinder: registry.npmmirror.com/portfinder/1.0.32_supports-color@6.1.0
-      schema-utils: registry.npmmirror.com/schema-utils/1.0.0
-      selfsigned: registry.npmmirror.com/selfsigned/1.10.14
-      semver: registry.npmmirror.com/semver/6.3.0
-      serve-index: registry.npmmirror.com/serve-index/1.9.1_supports-color@6.1.0
-      sockjs: registry.npmmirror.com/sockjs/0.3.24
-      sockjs-client: registry.npmmirror.com/sockjs-client/1.6.1_supports-color@6.1.0
-      spdy: registry.npmmirror.com/spdy/4.0.2_supports-color@6.1.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1
-      supports-color: registry.npmmirror.com/supports-color/6.1.0
-      url: registry.npmmirror.com/url/0.11.0
-      webpack: registry.npmmirror.com/webpack/4.46.0
-      webpack-dev-middleware: registry.npmmirror.com/webpack-dev-middleware/3.7.3_webpack@4.46.0
-      webpack-log: registry.npmmirror.com/webpack-log/2.0.0
-      ws: registry.npmmirror.com/ws/6.2.2
-      yargs: registry.npmmirror.com/yargs/13.3.2
-    transitivePeerDependencies:
-      - bufferutil
-      - utf-8-validate
-    dev: true
-
-  registry.npmmirror.com/webpack-log/2.0.0:
-    resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-log/-/webpack-log-2.0.0.tgz}
-    name: webpack-log
-    version: 2.0.0
-    engines: {node: '>= 6'}
-    dependencies:
-      ansi-colors: registry.npmmirror.com/ansi-colors/3.2.4
-      uuid: registry.npmmirror.com/uuid/3.4.0
-    dev: true
-
-  registry.npmmirror.com/webpack-merge/4.2.2:
-    resolution: {integrity: sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-merge/-/webpack-merge-4.2.2.tgz}
-    name: webpack-merge
-    version: 4.2.2
-    dependencies:
-      lodash: registry.npmmirror.com/lodash/4.17.21
-    dev: true
-
-  registry.npmmirror.com/webpack-sources/1.4.3:
-    resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz}
-    name: webpack-sources
-    version: 1.4.3
-    dependencies:
-      source-list-map: registry.npmmirror.com/source-list-map/2.0.1
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    dev: true
-
-  registry.npmmirror.com/webpack/4.46.0:
-    resolution: {integrity: sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz}
-    name: webpack
-    version: 4.46.0
-    engines: {node: '>=6.11.5'}
-    hasBin: true
-    peerDependencies:
-      webpack-cli: '*'
-      webpack-command: '*'
-    peerDependenciesMeta:
-      webpack-cli:
-        optional: true
-      webpack-command:
-        optional: true
-    dependencies:
-      '@webassemblyjs/ast': registry.npmmirror.com/@webassemblyjs/ast/1.9.0
-      '@webassemblyjs/helper-module-context': registry.npmmirror.com/@webassemblyjs/helper-module-context/1.9.0
-      '@webassemblyjs/wasm-edit': registry.npmmirror.com/@webassemblyjs/wasm-edit/1.9.0
-      '@webassemblyjs/wasm-parser': registry.npmmirror.com/@webassemblyjs/wasm-parser/1.9.0
-      acorn: registry.npmmirror.com/acorn/6.4.2
-      ajv: registry.npmmirror.com/ajv/6.12.6
-      ajv-keywords: registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6
-      chrome-trace-event: registry.npmmirror.com/chrome-trace-event/1.0.3
-      enhanced-resolve: registry.npmmirror.com/enhanced-resolve/4.5.0
-      eslint-scope: registry.npmmirror.com/eslint-scope/4.0.3
-      json-parse-better-errors: registry.npmmirror.com/json-parse-better-errors/1.0.2
-      loader-runner: registry.npmmirror.com/loader-runner/2.4.0
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.0
-      memory-fs: registry.npmmirror.com/memory-fs/0.4.1
-      micromatch: registry.npmmirror.com/micromatch/3.1.10
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-      neo-async: registry.npmmirror.com/neo-async/2.6.2
-      node-libs-browser: registry.npmmirror.com/node-libs-browser/2.2.1
-      schema-utils: registry.npmmirror.com/schema-utils/1.0.0
-      tapable: registry.npmmirror.com/tapable/1.1.3
-      terser-webpack-plugin: registry.npmmirror.com/terser-webpack-plugin/1.4.5_webpack@4.46.0
-      watchpack: registry.npmmirror.com/watchpack/1.7.5
-      webpack-sources: registry.npmmirror.com/webpack-sources/1.4.3
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/websocket-driver/0.7.4:
-    resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz}
-    name: websocket-driver
-    version: 0.7.4
-    engines: {node: '>=0.8.0'}
-    dependencies:
-      http-parser-js: registry.npmmirror.com/http-parser-js/0.5.8
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-      websocket-extensions: registry.npmmirror.com/websocket-extensions/0.1.4
-    dev: true
-
-  registry.npmmirror.com/websocket-extensions/0.1.4:
-    resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz}
-    name: websocket-extensions
-    version: 0.1.4
-    engines: {node: '>=0.8.0'}
-    dev: true
-
-  registry.npmmirror.com/which-boxed-primitive/1.0.2:
-    resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz}
-    name: which-boxed-primitive
-    version: 1.0.2
-    dependencies:
-      is-bigint: registry.npmmirror.com/is-bigint/1.0.4
-      is-boolean-object: registry.npmmirror.com/is-boolean-object/1.1.2
-      is-number-object: registry.npmmirror.com/is-number-object/1.0.7
-      is-string: registry.npmmirror.com/is-string/1.0.7
-      is-symbol: registry.npmmirror.com/is-symbol/1.0.4
-    dev: true
-
-  registry.npmmirror.com/which-module/2.0.0:
-    resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz}
-    name: which-module
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/which/1.3.1:
-    resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which/-/which-1.3.1.tgz}
-    name: which
-    version: 1.3.1
-    hasBin: true
-    dependencies:
-      isexe: registry.npmmirror.com/isexe/2.0.0
-    dev: true
-
-  registry.npmmirror.com/which/2.0.2:
-    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which/-/which-2.0.2.tgz}
-    name: which
-    version: 2.0.2
-    engines: {node: '>= 8'}
-    hasBin: true
-    dependencies:
-      isexe: registry.npmmirror.com/isexe/2.0.0
-    dev: true
-
-  registry.npmmirror.com/word-wrap/1.2.3:
-    resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz}
-    name: word-wrap
-    version: 1.2.3
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/worker-farm/1.7.0:
-    resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz}
-    name: worker-farm
-    version: 1.7.0
-    dependencies:
-      errno: registry.npmmirror.com/errno/0.1.8
-    dev: true
-
-  registry.npmmirror.com/wrap-ansi/3.0.1:
-    resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz}
-    name: wrap-ansi
-    version: 3.0.1
-    engines: {node: '>=4'}
-    dependencies:
-      string-width: registry.npmmirror.com/string-width/2.1.1
-      strip-ansi: registry.npmmirror.com/strip-ansi/4.0.0
-    dev: true
-
-  registry.npmmirror.com/wrap-ansi/5.1.0:
-    resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz}
-    name: wrap-ansi
-    version: 5.1.0
-    engines: {node: '>=6'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1
-      string-width: registry.npmmirror.com/string-width/3.1.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0
-    dev: true
-
-  registry.npmmirror.com/wrap-ansi/6.2.0:
-    resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz}
-    name: wrap-ansi
-    version: 6.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-    dev: true
-
-  registry.npmmirror.com/wrap-ansi/7.0.0:
-    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz}
-    name: wrap-ansi
-    version: 7.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-    dev: true
-
-  registry.npmmirror.com/wrappy/1.0.2:
-    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz}
-    name: wrappy
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/write/1.0.3:
-    resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/write/-/write-1.0.3.tgz}
-    name: write
-    version: 1.0.3
-    engines: {node: '>=4'}
-    dependencies:
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-    dev: true
-
-  registry.npmmirror.com/ws/6.2.2:
-    resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz}
-    name: ws
-    version: 6.2.2
-    peerDependencies:
-      bufferutil: ^4.0.1
-      utf-8-validate: ^5.0.2
-    peerDependenciesMeta:
-      bufferutil:
-        optional: true
-      utf-8-validate:
-        optional: true
-    dependencies:
-      async-limiter: registry.npmmirror.com/async-limiter/1.0.1
-    dev: true
-
-  registry.npmmirror.com/xtend/4.0.2:
-    resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz}
-    name: xtend
-    version: 4.0.2
-    engines: {node: '>=0.4'}
-    dev: true
-
-  registry.npmmirror.com/y18n/4.0.3:
-    resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz}
-    name: y18n
-    version: 4.0.3
-    dev: true
-
-  registry.npmmirror.com/y18n/5.0.8:
-    resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz}
-    name: y18n
-    version: 5.0.8
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/yallist/2.1.2:
-    resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz}
-    name: yallist
-    version: 2.1.2
-    dev: true
-
-  registry.npmmirror.com/yallist/3.1.1:
-    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz}
-    name: yallist
-    version: 3.1.1
-    dev: true
-
-  registry.npmmirror.com/yallist/4.0.0:
-    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz}
-    name: yallist
-    version: 4.0.0
-    dev: true
-
-  registry.npmmirror.com/yargs-parser/13.1.2:
-    resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz}
-    name: yargs-parser
-    version: 13.1.2
-    dependencies:
-      camelcase: registry.npmmirror.com/camelcase/5.3.1
-      decamelize: registry.npmmirror.com/decamelize/1.2.0
-    dev: true
-
-  registry.npmmirror.com/yargs-parser/20.2.9:
-    resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz}
-    name: yargs-parser
-    version: 20.2.9
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/yargs/13.3.2:
-    resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz}
-    name: yargs
-    version: 13.3.2
-    dependencies:
-      cliui: registry.npmmirror.com/cliui/5.0.0
-      find-up: registry.npmmirror.com/find-up/3.0.0
-      get-caller-file: registry.npmmirror.com/get-caller-file/2.0.5
-      require-directory: registry.npmmirror.com/require-directory/2.1.1
-      require-main-filename: registry.npmmirror.com/require-main-filename/2.0.0
-      set-blocking: registry.npmmirror.com/set-blocking/2.0.0
-      string-width: registry.npmmirror.com/string-width/3.1.0
-      which-module: registry.npmmirror.com/which-module/2.0.0
-      y18n: registry.npmmirror.com/y18n/4.0.3
-      yargs-parser: registry.npmmirror.com/yargs-parser/13.1.2
-    dev: true
-
-  registry.npmmirror.com/yargs/16.2.0:
-    resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz}
-    name: yargs
-    version: 16.2.0
-    engines: {node: '>=10'}
-    dependencies:
-      cliui: registry.npmmirror.com/cliui/7.0.4
-      escalade: registry.npmmirror.com/escalade/3.1.1
-      get-caller-file: registry.npmmirror.com/get-caller-file/2.0.5
-      require-directory: registry.npmmirror.com/require-directory/2.1.1
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      y18n: registry.npmmirror.com/y18n/5.0.8
-      yargs-parser: registry.npmmirror.com/yargs-parser/20.2.9
-    dev: true
-
-  registry.npmmirror.com/yorkie/2.0.0:
-    resolution: {integrity: sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yorkie/-/yorkie-2.0.0.tgz}
-    name: yorkie
-    version: 2.0.0
-    engines: {node: '>=4'}
-    requiresBuild: true
-    dependencies:
-      execa: registry.npmmirror.com/execa/0.8.0
-      is-ci: registry.npmmirror.com/is-ci/1.2.1
-      normalize-path: registry.npmmirror.com/normalize-path/1.0.0
-      strip-indent: registry.npmmirror.com/strip-indent/2.0.0
-    dev: true

+ 5 - 5
src/App.vue

@@ -1,5 +1,5 @@
-<template>
-  <div id="app">
-    <router-view />
-  </div>
-</template>
+<template>
+  <div id="app">
+    <router-view />
+  </div>
+</template>

+ 44 - 44
src/assets/styles/account.scss

@@ -1,44 +1,44 @@
-.user-info {
-  text-align: center;
-}
-.user-info-avatar {
-  margin: 50px auto 10px;
-  width: 100px;
-  height: 100px;
-  background-color: #e0e0e0;
-  border-radius: 50%;
-  overflow: hidden;
-  /* linshi */
-  line-height: 100px;
-  font-size: 50px;
-}
-.user-info-name {
-  margin: 10px 0;
-  font-size: 18px;
-}
-.user-info-email {
-  font-size: 14px;
-  margin-bottom: 20px;
-}
-.user-setting h3 {
-  font-size: 16px;
-  text-align: center;
-}
-.user-table {
-  min-width: 700px;
-  max-width: 1000px;
-  margin: 30px auto;
-}
-
-// reset-title
-.reset-title {
-  height: 30px;
-  line-height: 30px;
-  font-size: 16px;
-  text-align: center;
-  margin-bottom: 30px;
-}
-.reset-form {
-  width: 600px;
-  margin: 0 auto;
-}
+.user-info {
+  text-align: center;
+}
+.user-info-avatar {
+  margin: 50px auto 10px;
+  width: 100px;
+  height: 100px;
+  background-color: #e0e0e0;
+  border-radius: 50%;
+  overflow: hidden;
+  /* linshi */
+  line-height: 100px;
+  font-size: 50px;
+}
+.user-info-name {
+  margin: 10px 0;
+  font-size: 18px;
+}
+.user-info-email {
+  font-size: 14px;
+  margin-bottom: 20px;
+}
+.user-setting h3 {
+  font-size: 16px;
+  text-align: center;
+}
+.user-table {
+  min-width: 700px;
+  max-width: 1000px;
+  margin: 30px auto;
+}
+
+// reset-title
+.reset-title {
+  height: 30px;
+  line-height: 30px;
+  font-size: 16px;
+  text-align: center;
+  margin-bottom: 30px;
+}
+.reset-form {
+  width: 600px;
+  margin: 0 auto;
+}

+ 26 - 26
src/assets/styles/adaptive.scss

@@ -1,26 +1,26 @@
-@media screen and (min-width: 1440px) {
-  // home
-  .home-breadcrumb {
-    font-size: $--font-size-base;
-
-    .el-breadcrumb {
-      font-size: $--font-size-base;
-    }
-  }
-  .custom-tree-node {
-    font-size: $--font-size-base;
-  }
-  // element-ui
-  .el-form {
-    &--label-top {
-      .el-form-item__label {
-        padding-bottom: 8px;
-        font-size: $--font-size-base;
-      }
-    }
-  }
-  .el-table,
-  .el-button--small.el-button--text {
-    font-size: $--font-size-base;
-  }
-}
+@media screen and (min-width: 1440px) {
+  // home
+  .home-breadcrumb {
+    font-size: $--font-size-base;
+
+    .el-breadcrumb {
+      font-size: $--font-size-base;
+    }
+  }
+  .custom-tree-node {
+    font-size: $--font-size-base;
+  }
+  // element-ui
+  .el-form {
+    &--label-top {
+      .el-form-item__label {
+        padding-bottom: 8px;
+        font-size: $--font-size-base;
+      }
+    }
+  }
+  .el-table,
+  .el-button--small.el-button--text {
+    font-size: $--font-size-base;
+  }
+}

+ 507 - 507
src/assets/styles/base.scss

@@ -1,507 +1,507 @@
-/* reset */
-body,
-div,
-ul,
-ol,
-li,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-input,
-p,
-tr,
-th,
-td,
-span,
-a,
-header,
-footer,
-i {
-  margin: 0;
-  padding: 0;
-  box-sizing: border-box;
-  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
-}
-li {
-  list-style: none;
-}
-em,
-i,
-u {
-  font-style: normal;
-}
-input {
-  outline: none;
-  border: none;
-  background: rgba(245, 245, 245, 1);
-  font-family: $--font-family;
-}
-input::-webkit-input-placeholder,
-input::-moz-placeholder,
-input:-ms-input-placeholder,
-input:-moz-placeholder {
-  font-size: 12px;
-  font-weight: bold;
-  color: $--color-text-gray-4;
-}
-button,
-textarea {
-  font-family: $--font-family;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  font-size: 100%;
-}
-fieldset,
-img {
-  border: 0;
-}
-abbr {
-  border: 0;
-  font-variant: normal;
-}
-a {
-  text-decoration: none;
-  color: inherit;
-  *color: $--color-text-gray-3;
-}
-img {
-  vertical-align: middle;
-}
-
-/* common-style */
-input:-webkit-autofill {
-  box-shadow: 0 0 0 1000px white inset;
-}
-input[type="text"]:focus,
-input[type="password"]:focus,
-input[type="number"]:focus,
-textarea:focus {
-  box-shadow: 0 0 0 1000px white inset;
-}
-
-/* browse style */
-::-webkit-scrollbar {
-  width: 8px;
-  height: 8px;
-  background: transparent;
-}
-::-webkit-scrollbar-button {
-  display: none;
-}
-::-webkit-scrollbar-track {
-  background: transparent;
-}
-::-webkit-scrollbar-thumb {
-  border-radius: 8px;
-  background: #666;
-}
-::-webkit-scrollbar-corner {
-  background: transparent;
-}
-::-webkit-scrollbar-resizer {
-  background: transparent;
-}
-
-body {
-  font-family: $--font-family;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  font-size: $--font-size-base;
-  color: $--color-text-dark-1;
-}
-
-/* part */
-.part-box {
-  margin-bottom: 20px;
-  background-color: #fff;
-  border-radius: $--border-radius;
-
-  &-border {
-    border: 1px solid $--color-border;
-  }
-  &-pad {
-    padding: 20px;
-  }
-
-  &-filter {
-    padding: 20px 20px 5px 20px;
-
-    .el-form-item {
-      margin-bottom: 15px;
-    }
-    .el-form-item__label {
-      display: none;
-    }
-  }
-  &-gray {
-    background-color: $--color-text-gray-7;
-  }
-
-  &-flex {
-    display: flex;
-    align-items: stretch;
-    justify-content: space-between;
-  }
-
-  &-action {
-    padding-bottom: 15px;
-    white-space: nowrap;
-    display: flex;
-    align-items: flex-end;
-  }
-  &-tips {
-    font-size: 16px;
-    line-height: 25px;
-    color: $--color-text-dark-1;
-    margin-bottom: 15px;
-  }
-
-  &-head {
-    display: flex;
-    align-items: stretch;
-    justify-content: space-between;
-    min-height: 30px;
-    margin: -10px 0 10px -10px;
-    color: $--color-text-dark;
-
-    > h3 {
-      font-size: 17px;
-    }
-    .el-icon-question {
-      margin-left: 10px;
-      font-size: 16px;
-      color: $--color-text-gray-5;
-      cursor: pointer;
-
-      &:hover {
-        color: #fe8652;
-      }
-    }
-  }
-}
-.part-title {
-  font-size: 16px;
-  font-weight: bold;
-  padding: 15px 20px;
-  line-height: 30px;
-  overflow: hidden;
-
-  h2 {
-    float: left;
-  }
-  &-infos {
-    float: right;
-  }
-}
-.part-body {
-  padding: 25px;
-}
-.part-page {
-  margin-top: 15px;
-  text-align: right;
-}
-.part-none {
-  padding: 100px;
-  font-size: 20px;
-  color: $--color-text-gray-3;
-  text-align: center;
-}
-// box-justify
-.box-justify {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-}
-
-// page-head
-.page-head {
-  margin-bottom: 20px;
-  color: $--color-text-dark;
-  &-flex {
-    display: flex;
-    align-items: stretch;
-    justify-content: space-between;
-  }
-
-  > h2 {
-    font-size: 20px;
-  }
-  .el-icon-question {
-    margin-left: 10px;
-    font-size: 16px;
-    color: $--color-text-gray-5;
-    cursor: pointer;
-
-    &:hover {
-      color: #fe8652;
-    }
-  }
-}
-
-/* table */
-.table {
-  width: 100%;
-  border-spacing: 0;
-  border-collapse: collapse;
-  text-align: left;
-
-  &.table-white {
-    background-color: #fff;
-  }
-
-  th {
-    padding: 12px;
-    line-height: 1.2;
-    letter-spacing: 1px;
-    color: $--color-text-gray-2;
-    border: 1px solid $--color-border;
-  }
-  td {
-    padding: 14px;
-    line-height: 1.2;
-    color: $--color-text-dark;
-    border: 1px solid $--color-border;
-
-    &.td-link {
-      span {
-        cursor: pointer;
-        &:hover {
-          color: $--color-text-gray;
-        }
-      }
-    }
-  }
-  .td-th {
-    font-weight: 600;
-    color: $--color-text-gray;
-  }
-
-  &--border {
-    border: 1px solid $--color-border;
-    border-radius: 10px;
-    th {
-      background-color: #fcfcfd;
-      border: none;
-      border-bottom: 1px solid $--color-border;
-    }
-    td {
-      border: none;
-      border-bottom: 1px solid $--color-border;
-    }
-  }
-}
-
-/* list */
-.list-lr-right {
-  float: right;
-  width: 300px;
-}
-.list-lr-left {
-  margin-right: 320px;
-}
-
-.vlcode {
-  height: 36px;
-}
-.vlcode-left {
-  margin-right: 135px;
-}
-.vlcode-right {
-  float: right;
-  width: 120px;
-}
-
-// color
-.color-primary {
-  color: $--color-primary !important;
-}
-.color-success {
-  color: $--color-success;
-}
-.color-warning {
-  color: $--color-warning;
-}
-.color-danger {
-  color: $--color-danger;
-}
-.color-info {
-  color: $--color-text-gray-1;
-}
-.color-dark {
-  color: $--color-dark;
-}
-.color-gray {
-  color: $--color-text-gray;
-}
-.color-gray-2 {
-  color: $--color-text-gray-2;
-}
-.color-white {
-  color: #fff;
-}
-
-// text
-.text-center {
-  text-align: center;
-}
-.text-left {
-  text-align: left;
-}
-.text-right {
-  text-align: right;
-}
-.text-prewrap {
-  white-space: pre-wrap;
-}
-
-// other
-.btn-danger {
-  &.el-button--text:not(.is-disabled) {
-    color: $--color-danger !important;
-
-    &:hover {
-      font-weight: 600;
-      color: mix(#000, $--color-danger, 20%) !important;
-    }
-  }
-  &.is-disabled {
-    color: $--color-text-gray-4;
-  }
-}
-.btn-primary {
-  &.el-button--text:not(.is-disabled) {
-    color: $--color-text-dark-1 !important;
-    &:hover {
-      font-weight: 600;
-      color: $--color-primary !important;
-    }
-  }
-}
-
-.btn-white {
-  background-color: #fff !important;
-  color: #999 !important;
-}
-.font-bold {
-  font-weight: bold;
-}
-.table-head-bg {
-  th {
-    background-color: #f6f6f6;
-    color: $--color-text-gray;
-  }
-}
-
-.tab-btns {
-  .el-button {
-    border-bottom-right-radius: 0;
-    border-bottom-left-radius: 0;
-
-    &:first-child {
-      border-bottom-left-radius: 8px;
-    }
-
-    &:last-child {
-      border-bottom-right-radius: 8px;
-    }
-  }
-
-  .el-button + .el-button {
-    margin-left: 10px;
-  }
-}
-
-.cont-link {
-  color: $--color-primary;
-  cursor: pointer;
-  &:hover {
-    color: $--color-success;
-  }
-}
-.ml-1 {
-  margin-left: 5px;
-}
-.ml-2 {
-  margin-left: 10px;
-}
-.mr-1 {
-  margin-right: 5px;
-}
-.mr-2 {
-  margin-right: 10px;
-}
-.mr-4 {
-  margin-right: 20px;
-}
-.mb-0 {
-  margin-bottom: 0;
-}
-.mb-1 {
-  margin-bottom: 5px;
-}
-.mb-2 {
-  margin-bottom: 10px;
-}
-.mb-4 {
-  margin-bottom: 20px;
-}
-.mlr-1 {
-  margin-left: 5px;
-  margin-right: 5px;
-}
-.width-full {
-  width: 100%;
-}
-.width-400 {
-  width: 400px;
-}
-.width-80 {
-  width: 80px;
-}
-.width-200 {
-  width: 200px;
-}
-
-// other
-.tips-info {
-  font-size: 14px;
-  line-height: 20px;
-  color: $--color-text-gray-2;
-}
-.tips-dark {
-  color: $--color-text-gray;
-}
-.tips-error {
-  color: $--color-danger;
-}
-.tips-icon {
-  display: inline-block;
-  vertical-align: middle;
-  color: $--color-text-gray-3;
-  font-size: 18px;
-  margin: 0 10px;
-  cursor: pointer;
-}
-.form-item-content {
-  color: $--color-text-gray-2;
-}
-.inline-block {
-  display: inline-block;
-  vertical-align: top;
-}
-.custom-tree-node {
-  flex: 1;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  font-size: 12px;
-  padding-right: 8px;
-}
+/* reset */
+body,
+div,
+ul,
+ol,
+li,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+input,
+p,
+tr,
+th,
+td,
+span,
+a,
+header,
+footer,
+i {
+  margin: 0;
+  padding: 0;
+  box-sizing: border-box;
+  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+}
+li {
+  list-style: none;
+}
+em,
+i,
+u {
+  font-style: normal;
+}
+input {
+  outline: none;
+  border: none;
+  background: rgba(245, 245, 245, 1);
+  font-family: $--font-family;
+}
+input::-webkit-input-placeholder,
+input::-moz-placeholder,
+input:-ms-input-placeholder,
+input:-moz-placeholder {
+  font-size: 12px;
+  font-weight: bold;
+  color: $--color-text-gray-4;
+}
+button,
+textarea {
+  font-family: $--font-family;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  font-size: 100%;
+}
+fieldset,
+img {
+  border: 0;
+}
+abbr {
+  border: 0;
+  font-variant: normal;
+}
+a {
+  text-decoration: none;
+  color: inherit;
+  *color: $--color-text-gray-3;
+}
+img {
+  vertical-align: middle;
+}
+
+/* common-style */
+input:-webkit-autofill {
+  box-shadow: 0 0 0 1000px white inset;
+}
+input[type="text"]:focus,
+input[type="password"]:focus,
+input[type="number"]:focus,
+textarea:focus {
+  box-shadow: 0 0 0 1000px white inset;
+}
+
+/* browse style */
+::-webkit-scrollbar {
+  width: 8px;
+  height: 8px;
+  background: transparent;
+}
+::-webkit-scrollbar-button {
+  display: none;
+}
+::-webkit-scrollbar-track {
+  background: transparent;
+}
+::-webkit-scrollbar-thumb {
+  border-radius: 8px;
+  background: #666;
+}
+::-webkit-scrollbar-corner {
+  background: transparent;
+}
+::-webkit-scrollbar-resizer {
+  background: transparent;
+}
+
+body {
+  font-family: $--font-family;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  font-size: $--font-size-base;
+  color: $--color-text-dark-1;
+}
+
+/* part */
+.part-box {
+  margin-bottom: 20px;
+  background-color: #fff;
+  border-radius: $--border-radius;
+
+  &-border {
+    border: 1px solid $--color-border;
+  }
+  &-pad {
+    padding: 20px;
+  }
+
+  &-filter {
+    padding: 20px 20px 5px 20px;
+
+    .el-form-item {
+      margin-bottom: 15px;
+    }
+    .el-form-item__label {
+      display: none;
+    }
+  }
+  &-gray {
+    background-color: $--color-text-gray-7;
+  }
+
+  &-flex {
+    display: flex;
+    align-items: stretch;
+    justify-content: space-between;
+  }
+
+  &-action {
+    padding-bottom: 15px;
+    white-space: nowrap;
+    display: flex;
+    align-items: flex-end;
+  }
+  &-tips {
+    font-size: 16px;
+    line-height: 25px;
+    color: $--color-text-dark-1;
+    margin-bottom: 15px;
+  }
+
+  &-head {
+    display: flex;
+    align-items: stretch;
+    justify-content: space-between;
+    min-height: 30px;
+    margin: -10px 0 10px -10px;
+    color: $--color-text-dark;
+
+    > h3 {
+      font-size: 17px;
+    }
+    .el-icon-question {
+      margin-left: 10px;
+      font-size: 16px;
+      color: $--color-text-gray-5;
+      cursor: pointer;
+
+      &:hover {
+        color: #fe8652;
+      }
+    }
+  }
+}
+.part-title {
+  font-size: 16px;
+  font-weight: bold;
+  padding: 15px 20px;
+  line-height: 30px;
+  overflow: hidden;
+
+  h2 {
+    float: left;
+  }
+  &-infos {
+    float: right;
+  }
+}
+.part-body {
+  padding: 25px;
+}
+.part-page {
+  margin-top: 15px;
+  text-align: right;
+}
+.part-none {
+  padding: 100px;
+  font-size: 20px;
+  color: $--color-text-gray-3;
+  text-align: center;
+}
+// box-justify
+.box-justify {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+
+// page-head
+.page-head {
+  margin-bottom: 20px;
+  color: $--color-text-dark;
+  &-flex {
+    display: flex;
+    align-items: stretch;
+    justify-content: space-between;
+  }
+
+  > h2 {
+    font-size: 20px;
+  }
+  .el-icon-question {
+    margin-left: 10px;
+    font-size: 16px;
+    color: $--color-text-gray-5;
+    cursor: pointer;
+
+    &:hover {
+      color: #fe8652;
+    }
+  }
+}
+
+/* table */
+.table {
+  width: 100%;
+  border-spacing: 0;
+  border-collapse: collapse;
+  text-align: left;
+
+  &.table-white {
+    background-color: #fff;
+  }
+
+  th {
+    padding: 12px;
+    line-height: 1.2;
+    letter-spacing: 1px;
+    color: $--color-text-gray-2;
+    border: 1px solid $--color-border;
+  }
+  td {
+    padding: 14px;
+    line-height: 1.2;
+    color: $--color-text-dark;
+    border: 1px solid $--color-border;
+
+    &.td-link {
+      span {
+        cursor: pointer;
+        &:hover {
+          color: $--color-text-gray;
+        }
+      }
+    }
+  }
+  .td-th {
+    font-weight: 600;
+    color: $--color-text-gray;
+  }
+
+  &--border {
+    border: 1px solid $--color-border;
+    border-radius: 10px;
+    th {
+      background-color: #fcfcfd;
+      border: none;
+      border-bottom: 1px solid $--color-border;
+    }
+    td {
+      border: none;
+      border-bottom: 1px solid $--color-border;
+    }
+  }
+}
+
+/* list */
+.list-lr-right {
+  float: right;
+  width: 300px;
+}
+.list-lr-left {
+  margin-right: 320px;
+}
+
+.vlcode {
+  height: 36px;
+}
+.vlcode-left {
+  margin-right: 135px;
+}
+.vlcode-right {
+  float: right;
+  width: 120px;
+}
+
+// color
+.color-primary {
+  color: $--color-primary !important;
+}
+.color-success {
+  color: $--color-success;
+}
+.color-warning {
+  color: $--color-warning;
+}
+.color-danger {
+  color: $--color-danger;
+}
+.color-info {
+  color: $--color-text-gray-1;
+}
+.color-dark {
+  color: $--color-dark;
+}
+.color-gray {
+  color: $--color-text-gray;
+}
+.color-gray-2 {
+  color: $--color-text-gray-2;
+}
+.color-white {
+  color: #fff;
+}
+
+// text
+.text-center {
+  text-align: center;
+}
+.text-left {
+  text-align: left;
+}
+.text-right {
+  text-align: right;
+}
+.text-prewrap {
+  white-space: pre-wrap;
+}
+
+// other
+.btn-danger {
+  &.el-button--text:not(.is-disabled) {
+    color: $--color-danger !important;
+
+    &:hover {
+      font-weight: 600;
+      color: mix(#000, $--color-danger, 20%) !important;
+    }
+  }
+  &.is-disabled {
+    color: $--color-text-gray-4;
+  }
+}
+.btn-primary {
+  &.el-button--text:not(.is-disabled) {
+    color: $--color-text-dark-1 !important;
+    &:hover {
+      font-weight: 600;
+      color: $--color-primary !important;
+    }
+  }
+}
+
+.btn-white {
+  background-color: #fff !important;
+  color: #999 !important;
+}
+.font-bold {
+  font-weight: bold;
+}
+.table-head-bg {
+  th {
+    background-color: #f6f6f6;
+    color: $--color-text-gray;
+  }
+}
+
+.tab-btns {
+  .el-button {
+    border-bottom-right-radius: 0;
+    border-bottom-left-radius: 0;
+
+    &:first-child {
+      border-bottom-left-radius: 8px;
+    }
+
+    &:last-child {
+      border-bottom-right-radius: 8px;
+    }
+  }
+
+  .el-button + .el-button {
+    margin-left: 10px;
+  }
+}
+
+.cont-link {
+  color: $--color-primary;
+  cursor: pointer;
+  &:hover {
+    color: $--color-success;
+  }
+}
+.ml-1 {
+  margin-left: 5px;
+}
+.ml-2 {
+  margin-left: 10px;
+}
+.mr-1 {
+  margin-right: 5px;
+}
+.mr-2 {
+  margin-right: 10px;
+}
+.mr-4 {
+  margin-right: 20px;
+}
+.mb-0 {
+  margin-bottom: 0;
+}
+.mb-1 {
+  margin-bottom: 5px;
+}
+.mb-2 {
+  margin-bottom: 10px;
+}
+.mb-4 {
+  margin-bottom: 20px;
+}
+.mlr-1 {
+  margin-left: 5px;
+  margin-right: 5px;
+}
+.width-full {
+  width: 100%;
+}
+.width-400 {
+  width: 400px;
+}
+.width-80 {
+  width: 80px;
+}
+.width-200 {
+  width: 200px;
+}
+
+// other
+.tips-info {
+  font-size: 14px;
+  line-height: 20px;
+  color: $--color-text-gray-2;
+}
+.tips-dark {
+  color: $--color-text-gray;
+}
+.tips-error {
+  color: $--color-danger;
+}
+.tips-icon {
+  display: inline-block;
+  vertical-align: middle;
+  color: $--color-text-gray-3;
+  font-size: 18px;
+  margin: 0 10px;
+  cursor: pointer;
+}
+.form-item-content {
+  color: $--color-text-gray-2;
+}
+.inline-block {
+  display: inline-block;
+  vertical-align: top;
+}
+.custom-tree-node {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  font-size: 12px;
+  padding-right: 8px;
+}

+ 436 - 436
src/assets/styles/common-comp.scss

@@ -1,436 +1,436 @@
-// tips
-.cc-tips-error {
-  color: $--color-danger;
-}
-.cc-tips-success {
-  color: $--color-success;
-}
-
-// image-edit-upload
-.image-edit-upload {
-  position: relative;
-  height: 400px;
-  background: #fff;
-  padding-bottom: 30px;
-  box-sizing: content-box;
-}
-.cc-edit-upload {
-  &-main {
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    top: 0;
-    left: 0;
-    z-index: 8;
-
-    .el-upload-dragger {
-      height: auto;
-    }
-    .el-upload-input {
-      display: none;
-    }
-  }
-  &-cover {
-    height: 400px;
-    > img {
-      display: block;
-      height: 100%;
-      width: auto;
-      margin: 0 auto;
-    }
-  }
-  &-dcover {
-    padding: 109px 0;
-    > i {
-      font-size: 160px;
-      color: #999;
-    }
-  }
-  &-edit {
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    top: 0;
-    left: 0;
-    z-index: 9;
-  }
-
-  &-edit-box {
-    height: 350px;
-    position: relative;
-    .img-progress {
-      position: absolute;
-      height: 10px;
-      width: 100%;
-      bottom: -8px;
-      left: 0;
-      z-index: 7;
-    }
-  }
-  &-btns {
-    height: 50px;
-    padding-top: 10px;
-    text-align: center;
-    button {
-      margin: 0 10px;
-    }
-  }
-  &-tips {
-    position: absolute;
-    top: 405px;
-    left: 0;
-    font-size: 14px;
-    z-index: 9;
-  }
-}
-
-// image-list-upload
-$--cc-list-upload-pre: cc-list-upload;
-
-.cc-list-upload {
-  &-list {
-    font-size: 0;
-  }
-  &-item {
-    font-size: 14px;
-    display: inline-block;
-    vertical-align: top;
-    margin: 20px 10px;
-    border: 1px solid $--color-text-gray-6;
-    height: 150px;
-    width: 150px;
-    position: relative;
-
-    &-unvalid,
-    &-error {
-      border-color: $--color-danger;
-    }
-    &-success {
-      border-color: $--color-success;
-    }
-    &-ready .#{$--cc-list-upload-pre}-action,
-    &-uploading .#{$--cc-list-upload-pre}-action {
-      display: none !important;
-    }
-    &-ready .#{$--cc-list-upload-pre}-progress,
-    &-uploading .#{$--cc-list-upload-pre}-progress {
-      display: block;
-    }
-  }
-  &-box {
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    top: 0;
-    left: 0;
-    z-index: auto;
-  }
-  &-info {
-    z-index: 7;
-    > img {
-      width: 100%;
-      height: 100%;
-      object-fit: contain;
-    }
-  }
-  &-input {
-    visibility: hidden;
-  }
-  &-progress {
-    display: none;
-    z-index: 10;
-    background: rgba(0, 0, 0, 0.3);
-    padding: 5px;
-    text-align: center;
-    color: #000;
-  }
-  &-action {
-    display: none;
-    z-index: 8;
-    background: rgba(0, 0, 0, 0.7);
-    padding: 60px 5px 0;
-    line-height: 30px;
-    text-align: center;
-    > i {
-      font-size: 40px;
-      color: #c0c0c0;
-      cursor: pointer;
-    }
-    > i:hover {
-      color: #fff;
-    }
-  }
-  &-item:hover .#{$--cc-list-upload-pre}-action {
-    display: block;
-  }
-
-  &-tips {
-    position: absolute;
-    width: 100%;
-    bottom: -30px;
-    text-align: center;
-    line-height: 30px;
-    &-error {
-      color: $--color-danger;
-    }
-    &-success {
-      color: $--color-success;
-    }
-  }
-
-  &-add {
-    cursor: pointer;
-    > i {
-      display: block;
-      position: absolute;
-      top: 50%;
-      left: 50%;
-      font-size: 60px;
-      transform: translate(-50%, -50%);
-      color: #999;
-    }
-  }
-}
-
-// image-preview
-.cc-image-preview {
-  &-header {
-    position: absolute;
-    width: 100%;
-    padding: 15px;
-    top: 0;
-    left: 0;
-    line-height: 20px;
-    text-align: center;
-    font-size: 16px;
-    z-index: 99;
-    color: #f0f0f0;
-    h3 {
-      position: absolute;
-      left: 15px;
-      z-index: auto;
-    }
-  }
-  &-close {
-    position: absolute;
-    width: 30px;
-    height: 30px;
-    top: 5px;
-    right: 15px;
-    z-index: 100;
-    line-height: 30px;
-    text-align: center;
-    font-size: 40px;
-    color: #fff;
-    text-shadow: 0 0 2px #333;
-    cursor: pointer;
-
-    &:hover {
-      color: $--color-danger;
-    }
-  }
-  &-body {
-    position: absolute;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    z-index: auto;
-    overflow: hidden;
-  }
-  &-imgs {
-    position: absolute;
-    top: 0;
-    left: 50%;
-    width: 600px;
-    margin-left: -300px;
-    // box-shadow: 0px 24px 36px 0px rgba(0, 0, 0, 0.3);
-    transition: width, height, transform 0.2s linear;
-    z-index: 8;
-    &-nosition {
-      transition: none;
-    }
-    &-move {
-      cursor: move;
-    }
-    > img {
-      display: block;
-      width: 100%;
-    }
-  }
-  &-guide {
-    position: absolute;
-    width: 80px;
-    height: 80px;
-    line-height: 80px;
-    top: 50%;
-    margin-top: -80px;
-    text-align: center;
-    color: #d0d0d0;
-    z-index: 9;
-    font-size: 60px;
-    text-shadow: 0 0 2px #333;
-    cursor: pointer;
-
-    &:hover {
-      color: #eee;
-    }
-    > i {
-      margin-top: -5px;
-    }
-    &-prev {
-      left: 0;
-    }
-    &-next {
-      right: 0;
-    }
-  }
-  &-footer {
-    position: absolute;
-    height: 60px;
-    bottom: 0;
-    right: 0;
-    padding: 10px;
-    font-size: 30px;
-    color: #d0d0d0;
-    z-index: 99;
-    li {
-      display: inline-block;
-      vertical-align: top;
-      height: 40px;
-      width: 40px;
-      line-height: 40px;
-      margin: 0 5px;
-      text-align: center;
-      cursor: pointer;
-      transition: transform 0.2s linear;
-    }
-    li:hover {
-      // color: #000;
-      transform: scale(1.1, 1.1);
-    }
-    li.li-disabled {
-      cursor: not-allowed;
-      color: #d0d0d0 !important;
-      transform: none !important;
-    }
-  }
-
-  &-loading {
-    position: absolute;
-    width: 60px;
-    height: 60px;
-    top: 0;
-    left: 50%;
-    margin: 0 0 0 -30px;
-    color: $--color-border;
-    font-size: 50px;
-    text-align: center;
-    line-height: 60px;
-    z-index: 99;
-  }
-
-  &-preload {
-    position: absolute;
-    z-index: 9;
-    width: 100px;
-    height: 100px;
-    overflow: hidden;
-    top: -1000px;
-    left: -1000px;
-  }
-
-  &-none {
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    transform: translate(-50%, -50%);
-    color: #e0e0e0;
-    text-align: center;
-    font-size: 20px;
-    > i {
-      font-size: 30px;
-    }
-  }
-
-  // view-ui
-  .ivu-modal-content {
-    background: transparent;
-  }
-  .ivu-modal-header {
-    display: none;
-  }
-  .ivu-modal-body {
-    top: 0;
-  }
-  .ivu-modal-close {
-    display: none;
-  }
-  .ivu-modal-mask {
-    background: rgba(55, 55, 55, 0.8);
-  }
-}
-
-// import-file
-.cc-import-file {
-  &-tips {
-    height: 20px;
-    line-height: 20px;
-  }
-  &-footer {
-    padding: 10px 0;
-    font-size: 14px;
-    a:hover {
-      color: $--color-primary;
-    }
-  }
-}
-
-// rich-editor
-.cc-editor {
-  .ql-editor {
-    max-height: 500px !important;
-    height: 300px;
-    overflow: auto;
-  }
-}
-
-// label-select
-$--cc-labels-pre: cc-labels;
-.cc-labels {
-  margin-bottom: 8px;
-
-  &-label {
-    display: block;
-    float: left;
-    height: 24px;
-    line-height: 24px;
-    font-size: 14px;
-    padding-right: 20px;
-    font-weight: 600;
-  }
-  &-options {
-    margin-left: 60px;
-    li {
-      display: inline-block;
-      vertical-align: top;
-      margin: 0 5px 5px 0;
-      height: 24px;
-      line-height: 24px;
-      padding: 0 10px;
-      border-radius: 3px;
-      cursor: pointer;
-    }
-    li:hover {
-      color: #409eff;
-    }
-    li.#{$--cc-labels-pre}-selected {
-      background: #409eff;
-      color: #fff;
-    }
-    li.#{$--cc-labels-pre}-disabled {
-      color: #909399;
-      cursor: not-allowed;
-    }
-  }
-}
+// tips
+.cc-tips-error {
+  color: $--color-danger;
+}
+.cc-tips-success {
+  color: $--color-success;
+}
+
+// image-edit-upload
+.image-edit-upload {
+  position: relative;
+  height: 400px;
+  background: #fff;
+  padding-bottom: 30px;
+  box-sizing: content-box;
+}
+.cc-edit-upload {
+  &-main {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    z-index: 8;
+
+    .el-upload-dragger {
+      height: auto;
+    }
+    .el-upload-input {
+      display: none;
+    }
+  }
+  &-cover {
+    height: 400px;
+    > img {
+      display: block;
+      height: 100%;
+      width: auto;
+      margin: 0 auto;
+    }
+  }
+  &-dcover {
+    padding: 109px 0;
+    > i {
+      font-size: 160px;
+      color: #999;
+    }
+  }
+  &-edit {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    z-index: 9;
+  }
+
+  &-edit-box {
+    height: 350px;
+    position: relative;
+    .img-progress {
+      position: absolute;
+      height: 10px;
+      width: 100%;
+      bottom: -8px;
+      left: 0;
+      z-index: 7;
+    }
+  }
+  &-btns {
+    height: 50px;
+    padding-top: 10px;
+    text-align: center;
+    button {
+      margin: 0 10px;
+    }
+  }
+  &-tips {
+    position: absolute;
+    top: 405px;
+    left: 0;
+    font-size: 14px;
+    z-index: 9;
+  }
+}
+
+// image-list-upload
+$--cc-list-upload-pre: cc-list-upload;
+
+.cc-list-upload {
+  &-list {
+    font-size: 0;
+  }
+  &-item {
+    font-size: 14px;
+    display: inline-block;
+    vertical-align: top;
+    margin: 20px 10px;
+    border: 1px solid $--color-text-gray-6;
+    height: 150px;
+    width: 150px;
+    position: relative;
+
+    &-unvalid,
+    &-error {
+      border-color: $--color-danger;
+    }
+    &-success {
+      border-color: $--color-success;
+    }
+    &-ready .#{$--cc-list-upload-pre}-action,
+    &-uploading .#{$--cc-list-upload-pre}-action {
+      display: none !important;
+    }
+    &-ready .#{$--cc-list-upload-pre}-progress,
+    &-uploading .#{$--cc-list-upload-pre}-progress {
+      display: block;
+    }
+  }
+  &-box {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    z-index: auto;
+  }
+  &-info {
+    z-index: 7;
+    > img {
+      width: 100%;
+      height: 100%;
+      object-fit: contain;
+    }
+  }
+  &-input {
+    visibility: hidden;
+  }
+  &-progress {
+    display: none;
+    z-index: 10;
+    background: rgba(0, 0, 0, 0.3);
+    padding: 5px;
+    text-align: center;
+    color: #000;
+  }
+  &-action {
+    display: none;
+    z-index: 8;
+    background: rgba(0, 0, 0, 0.7);
+    padding: 60px 5px 0;
+    line-height: 30px;
+    text-align: center;
+    > i {
+      font-size: 40px;
+      color: #c0c0c0;
+      cursor: pointer;
+    }
+    > i:hover {
+      color: #fff;
+    }
+  }
+  &-item:hover .#{$--cc-list-upload-pre}-action {
+    display: block;
+  }
+
+  &-tips {
+    position: absolute;
+    width: 100%;
+    bottom: -30px;
+    text-align: center;
+    line-height: 30px;
+    &-error {
+      color: $--color-danger;
+    }
+    &-success {
+      color: $--color-success;
+    }
+  }
+
+  &-add {
+    cursor: pointer;
+    > i {
+      display: block;
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      font-size: 60px;
+      transform: translate(-50%, -50%);
+      color: #999;
+    }
+  }
+}
+
+// image-preview
+.cc-image-preview {
+  &-header {
+    position: absolute;
+    width: 100%;
+    padding: 15px;
+    top: 0;
+    left: 0;
+    line-height: 20px;
+    text-align: center;
+    font-size: 16px;
+    z-index: 99;
+    color: #f0f0f0;
+    h3 {
+      position: absolute;
+      left: 15px;
+      z-index: auto;
+    }
+  }
+  &-close {
+    position: absolute;
+    width: 30px;
+    height: 30px;
+    top: 5px;
+    right: 15px;
+    z-index: 100;
+    line-height: 30px;
+    text-align: center;
+    font-size: 40px;
+    color: #fff;
+    text-shadow: 0 0 2px #333;
+    cursor: pointer;
+
+    &:hover {
+      color: $--color-danger;
+    }
+  }
+  &-body {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    z-index: auto;
+    overflow: hidden;
+  }
+  &-imgs {
+    position: absolute;
+    top: 0;
+    left: 50%;
+    width: 600px;
+    margin-left: -300px;
+    // box-shadow: 0px 24px 36px 0px rgba(0, 0, 0, 0.3);
+    transition: width, height, transform 0.2s linear;
+    z-index: 8;
+    &-nosition {
+      transition: none;
+    }
+    &-move {
+      cursor: move;
+    }
+    > img {
+      display: block;
+      width: 100%;
+    }
+  }
+  &-guide {
+    position: absolute;
+    width: 80px;
+    height: 80px;
+    line-height: 80px;
+    top: 50%;
+    margin-top: -80px;
+    text-align: center;
+    color: #d0d0d0;
+    z-index: 9;
+    font-size: 60px;
+    text-shadow: 0 0 2px #333;
+    cursor: pointer;
+
+    &:hover {
+      color: #eee;
+    }
+    > i {
+      margin-top: -5px;
+    }
+    &-prev {
+      left: 0;
+    }
+    &-next {
+      right: 0;
+    }
+  }
+  &-footer {
+    position: absolute;
+    height: 60px;
+    bottom: 0;
+    right: 0;
+    padding: 10px;
+    font-size: 30px;
+    color: #d0d0d0;
+    z-index: 99;
+    li {
+      display: inline-block;
+      vertical-align: top;
+      height: 40px;
+      width: 40px;
+      line-height: 40px;
+      margin: 0 5px;
+      text-align: center;
+      cursor: pointer;
+      transition: transform 0.2s linear;
+    }
+    li:hover {
+      // color: #000;
+      transform: scale(1.1, 1.1);
+    }
+    li.li-disabled {
+      cursor: not-allowed;
+      color: #d0d0d0 !important;
+      transform: none !important;
+    }
+  }
+
+  &-loading {
+    position: absolute;
+    width: 60px;
+    height: 60px;
+    top: 0;
+    left: 50%;
+    margin: 0 0 0 -30px;
+    color: $--color-border;
+    font-size: 50px;
+    text-align: center;
+    line-height: 60px;
+    z-index: 99;
+  }
+
+  &-preload {
+    position: absolute;
+    z-index: 9;
+    width: 100px;
+    height: 100px;
+    overflow: hidden;
+    top: -1000px;
+    left: -1000px;
+  }
+
+  &-none {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    color: #e0e0e0;
+    text-align: center;
+    font-size: 20px;
+    > i {
+      font-size: 30px;
+    }
+  }
+
+  // view-ui
+  .ivu-modal-content {
+    background: transparent;
+  }
+  .ivu-modal-header {
+    display: none;
+  }
+  .ivu-modal-body {
+    top: 0;
+  }
+  .ivu-modal-close {
+    display: none;
+  }
+  .ivu-modal-mask {
+    background: rgba(55, 55, 55, 0.8);
+  }
+}
+
+// import-file
+.cc-import-file {
+  &-tips {
+    height: 20px;
+    line-height: 20px;
+  }
+  &-footer {
+    padding: 10px 0;
+    font-size: 14px;
+    a:hover {
+      color: $--color-primary;
+    }
+  }
+}
+
+// rich-editor
+.cc-editor {
+  .ql-editor {
+    max-height: 500px !important;
+    height: 300px;
+    overflow: auto;
+  }
+}
+
+// label-select
+$--cc-labels-pre: cc-labels;
+.cc-labels {
+  margin-bottom: 8px;
+
+  &-label {
+    display: block;
+    float: left;
+    height: 24px;
+    line-height: 24px;
+    font-size: 14px;
+    padding-right: 20px;
+    font-weight: 600;
+  }
+  &-options {
+    margin-left: 60px;
+    li {
+      display: inline-block;
+      vertical-align: top;
+      margin: 0 5px 5px 0;
+      height: 24px;
+      line-height: 24px;
+      padding: 0 10px;
+      border-radius: 3px;
+      cursor: pointer;
+    }
+    li:hover {
+      color: #409eff;
+    }
+    li.#{$--cc-labels-pre}-selected {
+      background: #409eff;
+      color: #fff;
+    }
+    li.#{$--cc-labels-pre}-disabled {
+      color: #909399;
+      cursor: not-allowed;
+    }
+  }
+}

+ 656 - 656
src/assets/styles/element-ui-costom.scss

@@ -1,656 +1,656 @@
-/*
-* element-ui不管是自行构建的主题还是动态设置的主题,
-* 产生的css文件中存在近乎1/3的冗余样式,过于累赘,不如直接覆盖样式简洁。
-*/
-// dialog
-.el-dialog {
-  border-radius: 8px;
-  overflow: hidden;
-  border: 1px solid #c8c8ca;
-  box-shadow: 5px 5px 4px 0px rgba(0, 0, 0, 0.1);
-
-  &.is-fullscreen {
-    border-radius: 0;
-
-    .el-dialog__header {
-      width: 100%;
-      position: fixed;
-      z-index: 9;
-      background-color: #fff;
-      border-bottom: 1px solid $--color-border;
-    }
-    .el-dialog__body {
-      padding-top: 90px;
-    }
-  }
-}
-.el-dialog__header {
-  padding: 15px 20px;
-  .el-dialog__title {
-    color: $--color-text-dark;
-    font-size: 16px;
-    line-height: 19px;
-  }
-  .el-dialog__headerbtn {
-    top: 15px;
-    width: 16px;
-    height: 16px;
-    background-image: url(../images/icon-close.png);
-    background-repeat: no-repeat;
-    background-size: 100% 100%;
-
-    &:hover {
-      background-image: url(../images/icon-close-act.png);
-    }
-
-    .el-dialog__close {
-      display: none;
-    }
-  }
-}
-.el-dialog__body {
-  padding: 30px 40px;
-  position: relative;
-  border-top: 1px solid $--color-border;
-  color: $--color-text-dark-1;
-
-  .el-form-item__label {
-    padding-right: 2px;
-  }
-  .el-input-tips {
-    color: rgba(187, 187, 187, 1);
-    margin-left: 13px;
-  }
-}
-.el-dialog__footer {
-  overflow: hidden;
-  .el-button {
-    width: 100px;
-    border-radius: 8px;
-    float: right;
-    margin-left: 10px;
-  }
-}
-//
-.page-dialog {
-  .el-dialog.is-fullscreen {
-    background: $--color-background;
-    .el-dialog__body {
-      padding: 70px 20px 20px;
-    }
-  }
-  .el-dialog {
-    background: $--color-background;
-    .el-dialog__body {
-      padding: 20px;
-    }
-    .el-dialog__header {
-      background-color: #fff;
-    }
-    .el-dialog__footer {
-      display: none;
-    }
-  }
-}
-
-// .opacity-dialog
-.opacity-dialog {
-  .el-dialog {
-    background-color: transparent;
-  }
-  .el-dialog__header,
-  .el-dialog__footer {
-    display: none;
-  }
-  .el-dialog__body {
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    top: 0;
-    left: 0;
-    padding: 0;
-    background-color: transparent;
-  }
-}
-
-// form
-.el-form {
-  &-item {
-    &__error {
-      font-size: 12px;
-      color: rgba(254, 108, 105, 1);
-    }
-    &__content {
-      .el-table {
-        line-height: 1;
-      }
-    }
-  }
-  // form-info
-  &.form-info {
-    .el-form-item {
-      margin-bottom: 0;
-
-      .el-form-item__label {
-        color: $--color-text-gray-2;
-      }
-    }
-  }
-  &--label-top {
-    .el-form-item__label {
-      line-height: 20px;
-      padding-bottom: 5px;
-      font-size: 12px;
-    }
-  }
-}
-// input
-.el-input {
-  &.is-focus {
-    .el-input__inner {
-      border-color: $--color-primary !important;
-    }
-  }
-  &.is-disabled {
-    .el-input__inner {
-      color: $--color-text-gray-2;
-    }
-  }
-  .el-input__inner {
-    border-radius: 8px;
-    border-color: #ddd;
-    background-color: #fff;
-  }
-  // .el-input__suffix {
-  //   right: 0;
-  //   border-left: 1px solid #ddd;
-  // }
-}
-// textarea
-.el-textarea {
-  &.is-disabled {
-    .el-textarea__inner {
-      color: $--color-text-gray-2;
-    }
-  }
-}
-.el-select {
-  .el-input__suffix {
-    right: 0;
-    border-left: 1px solid #ddd;
-  }
-  .el-input {
-    .el-select__caret {
-      width: 30px;
-    }
-    .el-icon-arrow-up:before {
-      font-size: 12px;
-      content: "\e78f";
-    }
-  }
-}
-.el-select-dropdown {
-  &.popper-filter {
-    .el-scrollbar {
-      display: block !important;
-      padding-top: 52px;
-    }
-    .el-select-filter {
-      padding: 0 10px;
-      position: absolute;
-      width: 100%;
-      top: 10px;
-      left: 0;
-      z-index: 9;
-    }
-  }
-}
-// upload
-.el-upload,
-.el-upload-dragger {
-  width: 100%;
-}
-// radio
-.el-radio-button {
-  &:not(.is-disabled):hover {
-    .el-radio-button__inner {
-      color: $--color-primary;
-    }
-  }
-
-  &.is-active {
-    .el-radio-button__inner {
-      color: $--color-white !important;
-      border-color: $--color-primary !important;
-      background: $--color-primary !important;
-    }
-  }
-}
-// button
-.el-button {
-  border-radius: $--border-radius;
-
-  > .icon {
-    margin-right: 5px;
-  }
-  > span {
-    display: inline-block;
-  }
-  &.is-disabled:not(.el-button--text) {
-    color: $--color-text-gray-3 !important;
-    background: $--color-background !important;
-    border: 1px solid $--color-border !important;
-  }
-}
-
-.el-button + .popover-button,
-.popover-button + .el-button {
-  margin-left: 10px;
-}
-.el-button + .el-button {
-  margin-left: 10px;
-}
-.el-button--text + .el-button--text {
-  margin-left: 5px;
-}
-.el-button--small {
-  padding-top: 9px;
-  padding-bottom: 9px;
-  font-size: 12px;
-}
-.el-button--text {
-  color: $--color-text-gray-2;
-
-  & + .el-button--text {
-    margin-left: 10px;
-  }
-}
-.el-button--info {
-  background-color: $--color-cyan;
-  border-color: $--color-cyan;
-
-  &:hover,
-  &:focus {
-    background-color: $--color-cyan-light;
-    border-color: $--color-cyan-light;
-  }
-}
-.el-button--primary {
-  background-color: $--color-primary;
-  border-color: $--color-primary;
-
-  &:hover,
-  &:focus {
-    background-color: $--color-primary-light;
-    border-color: $--color-primary-light;
-  }
-}
-.el-button--success {
-  background-color: $--color-success;
-  border-color: $--color-success;
-
-  &:hover,
-  &:focus {
-    background-color: $--color-success-light;
-    border-color: $--color-success-light;
-  }
-}
-
-// table
-.el-table {
-  color: $--color-text-dark-1;
-
-  thead th {
-    color: $--color-text-gray-2;
-  }
-
-  thead.is-group th {
-    background-color: $--color-white;
-  }
-
-  tr.el-table__row {
-    color: $--color-text-dark;
-  }
-  td,
-  th {
-    border-color: $--color-border !important;
-    padding: 14px 0;
-    font-weight: 500;
-  }
-  .el-table__row.row-danger {
-    color: $--color-danger;
-  }
-  &.el-table--noback {
-    tr.el-table__row {
-      background-color: $--color-white;
-    }
-  }
-
-  .cell-head {
-    display: inline-block;
-    vertical-align: middle;
-    line-height: 1.3;
-  }
-  // caret-wrapper
-  .caret-wrapper {
-    width: 20px;
-    height: 20px;
-    top: -1px;
-    .sort-caret {
-      &.ascending {
-        top: -1px;
-      }
-      &.descending {
-        bottom: -1px;
-      }
-    }
-  }
-  // action-column
-  td.action-column {
-    padding-left: 10px;
-    padding-right: 10px;
-    .cell {
-      padding: 0;
-      margin: 0 -5px;
-    }
-    .el-button--text {
-      padding: 0;
-      margin: 0 5px;
-      border: none !important;
-      outline: none !important;
-      &:not(.is-disabled):hover {
-        transform: scale(1.1);
-      }
-    }
-  }
-}
-.el-table--border {
-  border-radius: 10px;
-  th {
-    padding: 12px 0;
-    background-color: #fcfcfd;
-    border-right: none;
-  }
-  td {
-    border-right: none;
-  }
-}
-// el-checkbox
-.el-checkbox {
-  .el-checkbox__label {
-    color: $--color-text-gray-2 !important;
-  }
-  .el-checkbox__inner::after {
-    border-width: 2px;
-  }
-}
-.el-checkbox__input.is-checked .el-checkbox__inner {
-  background-color: $--color-white;
-  border-color: $--color-primary;
-
-  &::after {
-    border-color: $--color-primary;
-  }
-}
-.el-checkbox__input.is-indeterminate .el-checkbox__inner {
-  background-color: $--color-white;
-  border-color: $--color-primary;
-  &::before {
-    background-color: $--color-primary;
-  }
-}
-
-.el-radio {
-  .el-radio__label {
-    color: $--color-text-gray-2 !important;
-  }
-}
-.el-radio__input.is-checked .el-radio__inner {
-  background-color: $--color-white;
-  border-color: $--color-primary;
-  &::after {
-    width: 6px;
-    height: 6px;
-    background-color: $--color-primary;
-  }
-}
-
-// el-switch
-.el-switch {
-  &.is-checked {
-    .el-switch__core {
-      background-color: $--color-primary;
-      border-color: $--color-primary;
-    }
-  }
-}
-
-// el-pagination
-.el-pagination-li {
-  min-width: 32px;
-  height: 32px;
-  border-radius: 8px;
-  overflow: hidden;
-  background-color: $--color-white;
-  border: 1px solid #e1e3eb;
-}
-.el-pagination {
-  padding: 0;
-  .el-pagination__total {
-    float: left;
-  }
-  span:not([class*="suffix"]) {
-    line-height: 32px;
-    height: 32px;
-  }
-  &.is-background {
-    .btn-prev,
-    .btn-next {
-      color: $--color-text-gray-2;
-      margin: 0 5px;
-      @extend .el-pagination-li;
-    }
-    .btn-prev:disabled,
-    .btn-next:disabled {
-      opacity: 0.7;
-    }
-
-    .el-pager li {
-      color: $--color-text-gray-2;
-      margin: 0 5px;
-      padding: 0 8px;
-      line-height: 32px;
-
-      @extend .el-pagination-li;
-      &:not(.disabled).active {
-        color: #fff;
-        background-color: $--color-primary;
-      }
-    }
-  }
-}
-// el-message-box
-.el-message-box {
-  width: 320px;
-  background-color: #f6f6f6;
-  border-radius: 10px;
-  &__title {
-    display: none;
-  }
-  &__headerbtn {
-    display: none;
-  }
-  &__content {
-    text-align: center;
-
-    .el-message-box__status {
-      position: relative;
-      top: 0;
-      height: 48px;
-      width: 48px;
-      transform: none;
-      margin-bottom: 10px;
-
-      &.el-icon-warning {
-        border-radius: 50%;
-        &::before {
-          content: "";
-          position: absolute;
-          top: 0;
-          left: 0;
-          width: 100%;
-          height: 100%;
-          background-image: url(../images/icon-doubt.png);
-          background-repeat: no-repeat;
-          background-size: 100% 100%;
-        }
-      }
-    }
-    .el-message-box__message {
-      padding: 0;
-    }
-  }
-  &__btns {
-    height: 75px;
-    padding: 30px 20px 10px;
-    text-align: center;
-
-    > .el-button {
-      width: 100px;
-    }
-  }
-}
-
-.alert-message {
-  .el-message-box__btns {
-    text-align: center;
-    > .el-button {
-      position: relative;
-      left: auto;
-      top: 0;
-      margin: 0;
-    }
-  }
-}
-// .el-message
-.el-message {
-  .el-message__content {
-    word-wrap: break-word;
-    max-width: 600px;
-    line-height: 1.4;
-  }
-}
-.el-message-loading {
-  border-color: mix($--color-white, $--color-success, 80%);
-  background-color: mix($--color-white, $--color-success, 90%);
-}
-// el-date-editor
-.el-date-editor {
-  border-radius: 8px;
-  .el-range-separator {
-    width: auto;
-  }
-  .el-range-input {
-    background-color: transparent;
-  }
-}
-
-// el-step
-.el-step {
-  &__title.is-success,
-  &__description.is-success,
-  &__title.is-process,
-  &__description.is-process {
-    color: $--color-success;
-  }
-  &__title.is-process {
-    font-weight: normal;
-  }
-  &__head.is-success {
-    .el-step__line {
-      background-color: $--color-success;
-    }
-    .el-step__icon.is-text {
-      color: $--color-white;
-      border-color: $--color-success;
-      background-color: $--color-success;
-    }
-  }
-  &__head.is-process {
-    .el-step__icon.is-text {
-      color: $--color-success;
-      border-color: $--color-success;
-    }
-  }
-
-  &__title.is-wait,
-  &__description.is-wait {
-    color: $--color-text-gray-2;
-  }
-  &__head.is-wait {
-    .el-step__icon.is-text {
-      color: $--color-text-gray-2;
-      border-color: #e1e3eb;
-      background-color: #e1e3eb;
-    }
-  }
-}
-// el-popover
-.el-popper-dark {
-  background-color: $--color-text-dark-1;
-  color: #fff;
-  font-size: 12px;
-  line-height: 18px;
-  padding: 16px;
-  border: none;
-}
-.el-popper-dark {
-  box-shadow: 0px 10px 10px 0px rgba(54, 61, 89, 0.2);
-}
-.el-popper-dark[x-placement^="right"] .popper__arrow {
-  border-right-color: $--color-text-dark-1;
-
-  &::after {
-    border-right-color: $--color-text-dark-1;
-  }
-}
-.el-popper-dark[x-placement^="top"] .popper__arrow {
-  border-top-color: $--color-text-dark-1;
-
-  &::after {
-    border-top-color: $--color-text-dark-1;
-  }
-}
-.el-popper-dark[x-placement^="bottom"] .popper__arrow {
-  border-bottom-color: $--color-text-dark-1;
-
-  &::after {
-    border-bottom-color: $--color-text-dark-1;
-  }
-}
-.el-popper-dark[x-placement^="left"] .popper__arrow {
-  border-left-color: $--color-text-dark-1;
-
-  &::after {
-    border-left-color: $--color-text-dark-1;
-  }
-}
-// popper-list
-.popper-list {
-  min-width: auto;
-
-  .el-button {
-    display: block;
-    width: 100%;
-    margin: 0;
-    &:not(:last-child) {
-      margin-bottom: 5px;
-    }
-  }
-}
-// .el-tag
-.el-tag {
-  &.tag-spin {
-    margin: 3px;
-  }
-}
+/*
+* element-ui不管是自行构建的主题还是动态设置的主题,
+* 产生的css文件中存在近乎1/3的冗余样式,过于累赘,不如直接覆盖样式简洁。
+*/
+// dialog
+.el-dialog {
+  border-radius: 8px;
+  overflow: hidden;
+  border: 1px solid #c8c8ca;
+  box-shadow: 5px 5px 4px 0px rgba(0, 0, 0, 0.1);
+
+  &.is-fullscreen {
+    border-radius: 0;
+
+    .el-dialog__header {
+      width: 100%;
+      position: fixed;
+      z-index: 9;
+      background-color: #fff;
+      border-bottom: 1px solid $--color-border;
+    }
+    .el-dialog__body {
+      padding-top: 90px;
+    }
+  }
+}
+.el-dialog__header {
+  padding: 15px 20px;
+  .el-dialog__title {
+    color: $--color-text-dark;
+    font-size: 16px;
+    line-height: 19px;
+  }
+  .el-dialog__headerbtn {
+    top: 15px;
+    width: 16px;
+    height: 16px;
+    background-image: url(../images/icon-close.png);
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+
+    &:hover {
+      background-image: url(../images/icon-close-act.png);
+    }
+
+    .el-dialog__close {
+      display: none;
+    }
+  }
+}
+.el-dialog__body {
+  padding: 30px 40px;
+  position: relative;
+  border-top: 1px solid $--color-border;
+  color: $--color-text-dark-1;
+
+  .el-form-item__label {
+    padding-right: 2px;
+  }
+  .el-input-tips {
+    color: rgba(187, 187, 187, 1);
+    margin-left: 13px;
+  }
+}
+.el-dialog__footer {
+  overflow: hidden;
+  .el-button {
+    width: 100px;
+    border-radius: 8px;
+    float: right;
+    margin-left: 10px;
+  }
+}
+//
+.page-dialog {
+  .el-dialog.is-fullscreen {
+    background: $--color-background;
+    .el-dialog__body {
+      padding: 70px 20px 20px;
+    }
+  }
+  .el-dialog {
+    background: $--color-background;
+    .el-dialog__body {
+      padding: 20px;
+    }
+    .el-dialog__header {
+      background-color: #fff;
+    }
+    .el-dialog__footer {
+      display: none;
+    }
+  }
+}
+
+// .opacity-dialog
+.opacity-dialog {
+  .el-dialog {
+    background-color: transparent;
+  }
+  .el-dialog__header,
+  .el-dialog__footer {
+    display: none;
+  }
+  .el-dialog__body {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    padding: 0;
+    background-color: transparent;
+  }
+}
+
+// form
+.el-form {
+  &-item {
+    &__error {
+      font-size: 12px;
+      color: rgba(254, 108, 105, 1);
+    }
+    &__content {
+      .el-table {
+        line-height: 1;
+      }
+    }
+  }
+  // form-info
+  &.form-info {
+    .el-form-item {
+      margin-bottom: 0;
+
+      .el-form-item__label {
+        color: $--color-text-gray-2;
+      }
+    }
+  }
+  &--label-top {
+    .el-form-item__label {
+      line-height: 20px;
+      padding-bottom: 5px;
+      font-size: 12px;
+    }
+  }
+}
+// input
+.el-input {
+  &.is-focus {
+    .el-input__inner {
+      border-color: $--color-primary !important;
+    }
+  }
+  &.is-disabled {
+    .el-input__inner {
+      color: $--color-text-gray-2;
+    }
+  }
+  .el-input__inner {
+    border-radius: 8px;
+    border-color: #ddd;
+    background-color: #fff;
+  }
+  // .el-input__suffix {
+  //   right: 0;
+  //   border-left: 1px solid #ddd;
+  // }
+}
+// textarea
+.el-textarea {
+  &.is-disabled {
+    .el-textarea__inner {
+      color: $--color-text-gray-2;
+    }
+  }
+}
+.el-select {
+  .el-input__suffix {
+    right: 0;
+    border-left: 1px solid #ddd;
+  }
+  .el-input {
+    .el-select__caret {
+      width: 30px;
+    }
+    .el-icon-arrow-up:before {
+      font-size: 12px;
+      content: "\e78f";
+    }
+  }
+}
+.el-select-dropdown {
+  &.popper-filter {
+    .el-scrollbar {
+      display: block !important;
+      padding-top: 52px;
+    }
+    .el-select-filter {
+      padding: 0 10px;
+      position: absolute;
+      width: 100%;
+      top: 10px;
+      left: 0;
+      z-index: 9;
+    }
+  }
+}
+// upload
+.el-upload,
+.el-upload-dragger {
+  width: 100%;
+}
+// radio
+.el-radio-button {
+  &:not(.is-disabled):hover {
+    .el-radio-button__inner {
+      color: $--color-primary;
+    }
+  }
+
+  &.is-active {
+    .el-radio-button__inner {
+      color: $--color-white !important;
+      border-color: $--color-primary !important;
+      background: $--color-primary !important;
+    }
+  }
+}
+// button
+.el-button {
+  border-radius: $--border-radius;
+
+  > .icon {
+    margin-right: 5px;
+  }
+  > span {
+    display: inline-block;
+  }
+  &.is-disabled:not(.el-button--text) {
+    color: $--color-text-gray-3 !important;
+    background: $--color-background !important;
+    border: 1px solid $--color-border !important;
+  }
+}
+
+.el-button + .popover-button,
+.popover-button + .el-button {
+  margin-left: 10px;
+}
+.el-button + .el-button {
+  margin-left: 10px;
+}
+.el-button--text + .el-button--text {
+  margin-left: 5px;
+}
+.el-button--small {
+  padding-top: 9px;
+  padding-bottom: 9px;
+  font-size: 12px;
+}
+.el-button--text {
+  color: $--color-text-gray-2;
+
+  & + .el-button--text {
+    margin-left: 10px;
+  }
+}
+.el-button--info {
+  background-color: $--color-cyan;
+  border-color: $--color-cyan;
+
+  &:hover,
+  &:focus {
+    background-color: $--color-cyan-light;
+    border-color: $--color-cyan-light;
+  }
+}
+.el-button--primary {
+  background-color: $--color-primary;
+  border-color: $--color-primary;
+
+  &:hover,
+  &:focus {
+    background-color: $--color-primary-light;
+    border-color: $--color-primary-light;
+  }
+}
+.el-button--success {
+  background-color: $--color-success;
+  border-color: $--color-success;
+
+  &:hover,
+  &:focus {
+    background-color: $--color-success-light;
+    border-color: $--color-success-light;
+  }
+}
+
+// table
+.el-table {
+  color: $--color-text-dark-1;
+
+  thead th {
+    color: $--color-text-gray-2;
+  }
+
+  thead.is-group th {
+    background-color: $--color-white;
+  }
+
+  tr.el-table__row {
+    color: $--color-text-dark;
+  }
+  td,
+  th {
+    border-color: $--color-border !important;
+    padding: 14px 0;
+    font-weight: 500;
+  }
+  .el-table__row.row-danger {
+    color: $--color-danger;
+  }
+  &.el-table--noback {
+    tr.el-table__row {
+      background-color: $--color-white;
+    }
+  }
+
+  .cell-head {
+    display: inline-block;
+    vertical-align: middle;
+    line-height: 1.3;
+  }
+  // caret-wrapper
+  .caret-wrapper {
+    width: 20px;
+    height: 20px;
+    top: -1px;
+    .sort-caret {
+      &.ascending {
+        top: -1px;
+      }
+      &.descending {
+        bottom: -1px;
+      }
+    }
+  }
+  // action-column
+  td.action-column {
+    padding-left: 10px;
+    padding-right: 10px;
+    .cell {
+      padding: 0;
+      margin: 0 -5px;
+    }
+    .el-button--text {
+      padding: 0;
+      margin: 0 5px;
+      border: none !important;
+      outline: none !important;
+      &:not(.is-disabled):hover {
+        transform: scale(1.1);
+      }
+    }
+  }
+}
+.el-table--border {
+  border-radius: 10px;
+  th {
+    padding: 12px 0;
+    background-color: #fcfcfd;
+    border-right: none;
+  }
+  td {
+    border-right: none;
+  }
+}
+// el-checkbox
+.el-checkbox {
+  .el-checkbox__label {
+    color: $--color-text-gray-2 !important;
+  }
+  .el-checkbox__inner::after {
+    border-width: 2px;
+  }
+}
+.el-checkbox__input.is-checked .el-checkbox__inner {
+  background-color: $--color-white;
+  border-color: $--color-primary;
+
+  &::after {
+    border-color: $--color-primary;
+  }
+}
+.el-checkbox__input.is-indeterminate .el-checkbox__inner {
+  background-color: $--color-white;
+  border-color: $--color-primary;
+  &::before {
+    background-color: $--color-primary;
+  }
+}
+
+.el-radio {
+  .el-radio__label {
+    color: $--color-text-gray-2 !important;
+  }
+}
+.el-radio__input.is-checked .el-radio__inner {
+  background-color: $--color-white;
+  border-color: $--color-primary;
+  &::after {
+    width: 6px;
+    height: 6px;
+    background-color: $--color-primary;
+  }
+}
+
+// el-switch
+.el-switch {
+  &.is-checked {
+    .el-switch__core {
+      background-color: $--color-primary;
+      border-color: $--color-primary;
+    }
+  }
+}
+
+// el-pagination
+.el-pagination-li {
+  min-width: 32px;
+  height: 32px;
+  border-radius: 8px;
+  overflow: hidden;
+  background-color: $--color-white;
+  border: 1px solid #e1e3eb;
+}
+.el-pagination {
+  padding: 0;
+  .el-pagination__total {
+    float: left;
+  }
+  span:not([class*="suffix"]) {
+    line-height: 32px;
+    height: 32px;
+  }
+  &.is-background {
+    .btn-prev,
+    .btn-next {
+      color: $--color-text-gray-2;
+      margin: 0 5px;
+      @extend .el-pagination-li;
+    }
+    .btn-prev:disabled,
+    .btn-next:disabled {
+      opacity: 0.7;
+    }
+
+    .el-pager li {
+      color: $--color-text-gray-2;
+      margin: 0 5px;
+      padding: 0 8px;
+      line-height: 32px;
+
+      @extend .el-pagination-li;
+      &:not(.disabled).active {
+        color: #fff;
+        background-color: $--color-primary;
+      }
+    }
+  }
+}
+// el-message-box
+.el-message-box {
+  width: 320px;
+  background-color: #f6f6f6;
+  border-radius: 10px;
+  &__title {
+    display: none;
+  }
+  &__headerbtn {
+    display: none;
+  }
+  &__content {
+    text-align: center;
+
+    .el-message-box__status {
+      position: relative;
+      top: 0;
+      height: 48px;
+      width: 48px;
+      transform: none;
+      margin-bottom: 10px;
+
+      &.el-icon-warning {
+        border-radius: 50%;
+        &::before {
+          content: "";
+          position: absolute;
+          top: 0;
+          left: 0;
+          width: 100%;
+          height: 100%;
+          background-image: url(../images/icon-doubt.png);
+          background-repeat: no-repeat;
+          background-size: 100% 100%;
+        }
+      }
+    }
+    .el-message-box__message {
+      padding: 0;
+    }
+  }
+  &__btns {
+    height: 75px;
+    padding: 30px 20px 10px;
+    text-align: center;
+
+    > .el-button {
+      width: 100px;
+    }
+  }
+}
+
+.alert-message {
+  .el-message-box__btns {
+    text-align: center;
+    > .el-button {
+      position: relative;
+      left: auto;
+      top: 0;
+      margin: 0;
+    }
+  }
+}
+// .el-message
+.el-message {
+  .el-message__content {
+    word-wrap: break-word;
+    max-width: 600px;
+    line-height: 1.4;
+  }
+}
+.el-message-loading {
+  border-color: mix($--color-white, $--color-success, 80%);
+  background-color: mix($--color-white, $--color-success, 90%);
+}
+// el-date-editor
+.el-date-editor {
+  border-radius: 8px;
+  .el-range-separator {
+    width: auto;
+  }
+  .el-range-input {
+    background-color: transparent;
+  }
+}
+
+// el-step
+.el-step {
+  &__title.is-success,
+  &__description.is-success,
+  &__title.is-process,
+  &__description.is-process {
+    color: $--color-success;
+  }
+  &__title.is-process {
+    font-weight: normal;
+  }
+  &__head.is-success {
+    .el-step__line {
+      background-color: $--color-success;
+    }
+    .el-step__icon.is-text {
+      color: $--color-white;
+      border-color: $--color-success;
+      background-color: $--color-success;
+    }
+  }
+  &__head.is-process {
+    .el-step__icon.is-text {
+      color: $--color-success;
+      border-color: $--color-success;
+    }
+  }
+
+  &__title.is-wait,
+  &__description.is-wait {
+    color: $--color-text-gray-2;
+  }
+  &__head.is-wait {
+    .el-step__icon.is-text {
+      color: $--color-text-gray-2;
+      border-color: #e1e3eb;
+      background-color: #e1e3eb;
+    }
+  }
+}
+// el-popover
+.el-popper-dark {
+  background-color: $--color-text-dark-1;
+  color: #fff;
+  font-size: 12px;
+  line-height: 18px;
+  padding: 16px;
+  border: none;
+}
+.el-popper-dark {
+  box-shadow: 0px 10px 10px 0px rgba(54, 61, 89, 0.2);
+}
+.el-popper-dark[x-placement^="right"] .popper__arrow {
+  border-right-color: $--color-text-dark-1;
+
+  &::after {
+    border-right-color: $--color-text-dark-1;
+  }
+}
+.el-popper-dark[x-placement^="top"] .popper__arrow {
+  border-top-color: $--color-text-dark-1;
+
+  &::after {
+    border-top-color: $--color-text-dark-1;
+  }
+}
+.el-popper-dark[x-placement^="bottom"] .popper__arrow {
+  border-bottom-color: $--color-text-dark-1;
+
+  &::after {
+    border-bottom-color: $--color-text-dark-1;
+  }
+}
+.el-popper-dark[x-placement^="left"] .popper__arrow {
+  border-left-color: $--color-text-dark-1;
+
+  &::after {
+    border-left-color: $--color-text-dark-1;
+  }
+}
+// popper-list
+.popper-list {
+  min-width: auto;
+
+  .el-button {
+    display: block;
+    width: 100%;
+    margin: 0;
+    &:not(:last-child) {
+      margin-bottom: 5px;
+    }
+  }
+}
+// .el-tag
+.el-tag {
+  &.tag-spin {
+    margin: 3px;
+  }
+}

+ 341 - 341
src/assets/styles/home.scss

@@ -1,341 +1,341 @@
-/* home */
-.home {
-  position: absolute;
-  width: 100%;
-  height: 100%;
-  z-index: auto;
-}
-.home-body {
-  position: absolute;
-  left: 0;
-  top: 50px;
-  right: 0;
-  bottom: 0;
-  overflow: auto;
-  background: $--color-background;
-  z-index: 98;
-}
-.home-main {
-  position: relative;
-  padding: 20px 30px 50px 250px;
-  min-height: 100%;
-}
-
-/* navs */
-.home-navs {
-  position: absolute;
-  width: 220px;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  z-index: 100;
-  overflow: auto;
-  font-size: 14px;
-  background: $--color-white;
-  border-top-right-radius: $--border-radius-huge;
-  border-bottom-right-radius: $--border-radius-huge;
-
-  &::before {
-    content: "";
-    display: block;
-    position: absolute;
-    height: 100%;
-    width: 1px;
-    right: 0;
-    bottom: 0;
-    z-index: 9;
-    background: rgba(229, 229, 229, 1);
-  }
-
-  .head-logo {
-    padding: 0 20px;
-    font-size: 20px;
-    line-height: 40px;
-    text-align: center;
-    &-content {
-      display: block;
-      padding: 30px 0;
-      border-bottom: 1px solid #eff0f5;
-    }
-    img {
-      display: block;
-      max-width: 160px;
-      height: 40px;
-    }
-  }
-
-  .nav-part {
-    padding: 20px 0;
-    border-top: 1px solid $--color-border;
-  }
-
-  .nav-head {
-    padding: 10px 0;
-    color: $--color-text-gray-2;
-    font-size: $--font-size-base;
-    line-height: 20px;
-    position: relative;
-    font-weight: 500;
-    > span {
-      display: inline-block;
-      vertical-align: top;
-      font-weight: 600;
-    }
-    &-right-icon {
-      position: absolute;
-      right: 0;
-      top: 50%;
-      transform: translateY(-50%);
-      color: #d3d5e0;
-      font-size: 12px;
-    }
-  }
-
-  // .nav-list {
-  //   padding: 0 0 0 23px;
-  // }
-  .nav-item {
-    overflow: hidden;
-    color: $--color-text-dark-1;
-    &-main {
-      padding: 10px 0;
-      line-height: 20px;
-      position: relative;
-      font-weight: 500;
-      cursor: pointer;
-      &-act,
-      &:hover {
-        font-weight: 600;
-        color: $--color-primary;
-      }
-    }
-    &-icon {
-      display: block;
-      position: absolute;
-      width: 20px;
-      height: 20px;
-      top: 50%;
-      margin-top: -10px;
-      text-align: center;
-      line-height: 20px;
-    }
-    &-icon-right {
-      right: 5px;
-    }
-    &-info {
-      display: block;
-      position: absolute;
-      padding: 0 3px;
-      min-width: 16px;
-      height: 16px;
-      font-size: 12px;
-      line-height: 16px;
-      top: 12px;
-      right: 40px;
-      background-color: $--color-warning;
-      color: #fff;
-      text-align: center;
-      border-radius: 3px;
-    }
-  }
-}
-.el-menu-home {
-  padding-top: 20px;
-  .el-submenu {
-    margin-bottom: 20px;
-  }
-  .el-submenu__title {
-    padding: 0 40px !important;
-    height: 50px;
-    line-height: 50px;
-    font-weight: 600;
-
-    > .icon {
-      margin-right: 12px;
-    }
-  }
-  .el-menu-item {
-    height: auto;
-    min-height: 40px;
-    line-height: 20px;
-    padding: 10px 40px !important;
-    white-space: normal;
-  }
-  .el-menu-item.is-active {
-    font-weight: 600;
-  }
-  .el-submenu__icon-arrow {
-    right: 40px;
-  }
-}
-
-/* head */
-.home-header {
-  position: absolute;
-  width: 100%;
-  height: 50px;
-  top: 0;
-  left: 0;
-  z-index: 99;
-  color: #fff;
-  padding-left: 220px;
-  background-color: $--color-text-dark;
-  overflow: hidden;
-
-  .menu-list {
-    li {
-      display: inline-block;
-      vertical-align: top;
-      padding: 10px 25px;
-      height: 50px;
-      line-height: 30px;
-      opacity: 0.4;
-      font-size: 16px;
-      position: relative;
-      text-align: center;
-      cursor: pointer;
-
-      &:hover {
-        opacity: 1;
-      }
-
-      &.menu-item-act {
-        opacity: 1;
-      }
-
-      span {
-        display: inline-block;
-        vertical-align: top;
-        margin-left: 8px;
-      }
-      .icon {
-        margin-top: -3px;
-      }
-    }
-  }
-  .head-menu {
-    float: left;
-  }
-  .head-user {
-    float: right;
-    padding-right: 10px;
-    li {
-      padding: 10px;
-    }
-    .menu-item-account {
-      white-space: nowrap;
-      padding: 10px;
-      span {
-        max-width: 156px;
-        overflow: hidden;
-        text-overflow: ellipsis;
-      }
-    }
-  }
-  // .head-menu-btn
-  .head-menu-btn {
-    display: none;
-    float: right;
-    line-height: 36px;
-    padding: 12px 15px;
-    text-align: center;
-    > span {
-      display: block;
-      height: 36px;
-      width: 36px;
-      border-radius: 5px;
-      background-color: rgba($color: #fff, $alpha: 0.3);
-    }
-    i {
-      font-size: 22px;
-      vertical-align: middle;
-    }
-  }
-}
-// menu-dialog
-.menu-dialog {
-  .el-dialog.is-fullscreen {
-    border-radius: 0;
-    box-shadow: none;
-
-    .el-dialog__body {
-      padding: 10px;
-      &::after {
-        display: none;
-      }
-    }
-  }
-
-  .menu-logout {
-    padding: 10px;
-    width: 52px;
-    height: 52px;
-    margin: 0 auto;
-    border: 1px solid $--color-text-gray-3;
-    border-radius: 50%;
-    font-size: 30px;
-    text-align: center;
-    color: $--color-text-gray-3;
-    cursor: pointer;
-
-    &:hover {
-      border-color: $--color-danger;
-      color: $--color-danger;
-    }
-  }
-}
-
-// home-breadcrumb
-.home-breadcrumb {
-  margin-bottom: 18px;
-  font-size: 12px;
-  font-weight: 500;
-  color: $--color-text-gray-2;
-
-  .breadcrumb-tips {
-    display: inline-block;
-    vertical-align: middle;
-    > i {
-      margin-top: -2px;
-      margin-right: 8px;
-    }
-  }
-  .el-breadcrumb {
-    line-height: 16px;
-    display: inline-block;
-    vertical-align: middle;
-    font-size: 12px;
-
-    .el-breadcrumb__item {
-      .el-breadcrumb__inner {
-        color: $--color-text-gray-2;
-      }
-    }
-    .el-breadcrumb__separator {
-      margin: 0 5px;
-    }
-  }
-}
-
-// home-view
-
-/* view-footer */
-.home-footer {
-  position: absolute;
-  width: 100%;
-  height: 60px;
-  bottom: 0;
-  left: 0;
-  z-index: auto;
-  padding: 20px 0;
-  line-height: 20px;
-  color: $--color-text-gray-3;
-  text-align: center;
-  font-size: 13px;
-  a {
-    color: $--color-text-gray-3;
-  }
-  a:hover {
-    color: $--color-text-gray;
-  }
-}
+/* home */
+.home {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  z-index: auto;
+}
+.home-body {
+  position: absolute;
+  left: 0;
+  top: 50px;
+  right: 0;
+  bottom: 0;
+  overflow: auto;
+  background: $--color-background;
+  z-index: 98;
+}
+.home-main {
+  position: relative;
+  padding: 20px 30px 50px 250px;
+  min-height: 100%;
+}
+
+/* navs */
+.home-navs {
+  position: absolute;
+  width: 220px;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  z-index: 100;
+  overflow: auto;
+  font-size: 14px;
+  background: $--color-white;
+  border-top-right-radius: $--border-radius-huge;
+  border-bottom-right-radius: $--border-radius-huge;
+
+  &::before {
+    content: "";
+    display: block;
+    position: absolute;
+    height: 100%;
+    width: 1px;
+    right: 0;
+    bottom: 0;
+    z-index: 9;
+    background: rgba(229, 229, 229, 1);
+  }
+
+  .head-logo {
+    padding: 0 20px;
+    font-size: 20px;
+    line-height: 40px;
+    text-align: center;
+    &-content {
+      display: block;
+      padding: 30px 0;
+      border-bottom: 1px solid #eff0f5;
+    }
+    img {
+      display: block;
+      max-width: 160px;
+      height: 40px;
+    }
+  }
+
+  .nav-part {
+    padding: 20px 0;
+    border-top: 1px solid $--color-border;
+  }
+
+  .nav-head {
+    padding: 10px 0;
+    color: $--color-text-gray-2;
+    font-size: $--font-size-base;
+    line-height: 20px;
+    position: relative;
+    font-weight: 500;
+    > span {
+      display: inline-block;
+      vertical-align: top;
+      font-weight: 600;
+    }
+    &-right-icon {
+      position: absolute;
+      right: 0;
+      top: 50%;
+      transform: translateY(-50%);
+      color: #d3d5e0;
+      font-size: 12px;
+    }
+  }
+
+  // .nav-list {
+  //   padding: 0 0 0 23px;
+  // }
+  .nav-item {
+    overflow: hidden;
+    color: $--color-text-dark-1;
+    &-main {
+      padding: 10px 0;
+      line-height: 20px;
+      position: relative;
+      font-weight: 500;
+      cursor: pointer;
+      &-act,
+      &:hover {
+        font-weight: 600;
+        color: $--color-primary;
+      }
+    }
+    &-icon {
+      display: block;
+      position: absolute;
+      width: 20px;
+      height: 20px;
+      top: 50%;
+      margin-top: -10px;
+      text-align: center;
+      line-height: 20px;
+    }
+    &-icon-right {
+      right: 5px;
+    }
+    &-info {
+      display: block;
+      position: absolute;
+      padding: 0 3px;
+      min-width: 16px;
+      height: 16px;
+      font-size: 12px;
+      line-height: 16px;
+      top: 12px;
+      right: 40px;
+      background-color: $--color-warning;
+      color: #fff;
+      text-align: center;
+      border-radius: 3px;
+    }
+  }
+}
+.el-menu-home {
+  padding-top: 20px;
+  .el-submenu {
+    margin-bottom: 20px;
+  }
+  .el-submenu__title {
+    padding: 0 40px !important;
+    height: 50px;
+    line-height: 50px;
+    font-weight: 600;
+
+    > .icon {
+      margin-right: 12px;
+    }
+  }
+  .el-menu-item {
+    height: auto;
+    min-height: 40px;
+    line-height: 20px;
+    padding: 10px 40px !important;
+    white-space: normal;
+  }
+  .el-menu-item.is-active {
+    font-weight: 600;
+  }
+  .el-submenu__icon-arrow {
+    right: 40px;
+  }
+}
+
+/* head */
+.home-header {
+  position: absolute;
+  width: 100%;
+  height: 50px;
+  top: 0;
+  left: 0;
+  z-index: 99;
+  color: #fff;
+  padding-left: 220px;
+  background-color: $--color-text-dark;
+  overflow: hidden;
+
+  .menu-list {
+    li {
+      display: inline-block;
+      vertical-align: top;
+      padding: 10px 25px;
+      height: 50px;
+      line-height: 30px;
+      opacity: 0.4;
+      font-size: 16px;
+      position: relative;
+      text-align: center;
+      cursor: pointer;
+
+      &:hover {
+        opacity: 1;
+      }
+
+      &.menu-item-act {
+        opacity: 1;
+      }
+
+      span {
+        display: inline-block;
+        vertical-align: top;
+        margin-left: 8px;
+      }
+      .icon {
+        margin-top: -3px;
+      }
+    }
+  }
+  .head-menu {
+    float: left;
+  }
+  .head-user {
+    float: right;
+    padding-right: 10px;
+    li {
+      padding: 10px;
+    }
+    .menu-item-account {
+      white-space: nowrap;
+      padding: 10px;
+      span {
+        max-width: 156px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+      }
+    }
+  }
+  // .head-menu-btn
+  .head-menu-btn {
+    display: none;
+    float: right;
+    line-height: 36px;
+    padding: 12px 15px;
+    text-align: center;
+    > span {
+      display: block;
+      height: 36px;
+      width: 36px;
+      border-radius: 5px;
+      background-color: rgba($color: #fff, $alpha: 0.3);
+    }
+    i {
+      font-size: 22px;
+      vertical-align: middle;
+    }
+  }
+}
+// menu-dialog
+.menu-dialog {
+  .el-dialog.is-fullscreen {
+    border-radius: 0;
+    box-shadow: none;
+
+    .el-dialog__body {
+      padding: 10px;
+      &::after {
+        display: none;
+      }
+    }
+  }
+
+  .menu-logout {
+    padding: 10px;
+    width: 52px;
+    height: 52px;
+    margin: 0 auto;
+    border: 1px solid $--color-text-gray-3;
+    border-radius: 50%;
+    font-size: 30px;
+    text-align: center;
+    color: $--color-text-gray-3;
+    cursor: pointer;
+
+    &:hover {
+      border-color: $--color-danger;
+      color: $--color-danger;
+    }
+  }
+}
+
+// home-breadcrumb
+.home-breadcrumb {
+  margin-bottom: 18px;
+  font-size: 12px;
+  font-weight: 500;
+  color: $--color-text-gray-2;
+
+  .breadcrumb-tips {
+    display: inline-block;
+    vertical-align: middle;
+    > i {
+      margin-top: -2px;
+      margin-right: 8px;
+    }
+  }
+  .el-breadcrumb {
+    line-height: 16px;
+    display: inline-block;
+    vertical-align: middle;
+    font-size: 12px;
+
+    .el-breadcrumb__item {
+      .el-breadcrumb__inner {
+        color: $--color-text-gray-2;
+      }
+    }
+    .el-breadcrumb__separator {
+      margin: 0 5px;
+    }
+  }
+}
+
+// home-view
+
+/* view-footer */
+.home-footer {
+  position: absolute;
+  width: 100%;
+  height: 60px;
+  bottom: 0;
+  left: 0;
+  z-index: auto;
+  padding: 20px 0;
+  line-height: 20px;
+  color: $--color-text-gray-3;
+  text-align: center;
+  font-size: 13px;
+  a {
+    color: $--color-text-gray-3;
+  }
+  a:hover {
+    color: $--color-text-gray;
+  }
+}

+ 92 - 92
src/assets/styles/icons.scss

@@ -1,92 +1,92 @@
-// icon
-.icon {
-  display: inline-block;
-  vertical-align: middle;
-  width: 16px;
-  height: 16px;
-  background-repeat: no-repeat;
-  background-size: 100% 100%;
-
-  // home
-  &-location {
-    background-image: url(../images/icon-location.png);
-    width: 10px;
-    height: 10px;
-  }
-  // navs
-  &-exam {
-    background-image: url(../images/icon-exam.png);
-  }
-  &-report {
-    background-image: url(../images/icon-report.png);
-  }
-  &-base {
-    width: 14px;
-    background-image: url(../images/icon-base.png);
-  }
-  &-customer {
-    background-image: url(../images/icon-customer.png);
-  }
-  &-workspace {
-    background-image: url(../images/icon-workspace.png);
-  }
-  &-book {
-    background-image: url(../images/icon-book.png);
-  }
-
-  &-account {
-    background-image: url(../images/icon-account.png);
-  }
-  &-logout {
-    background-image: url(../images/icon-logout.png);
-  }
-
-  // login
-  &-phone {
-    background-image: url(../images/icon-phone.png);
-    width: 14px;
-    height: 16px;
-  }
-  &-password {
-    background-image: url(../images/icon-password.png);
-    width: 14px;
-    height: 14px;
-  }
-  &-checkcode {
-    background-image: url(../images/icon-checkcode.png);
-    width: 14px;
-    height: 16px;
-  }
-  // other
-  &-error {
-    background-image: url(../images/icon-error.png);
-    width: 16px;
-    height: 16px;
-  }
-  &-search {
-    background-image: url(../images/icon-search.png);
-    width: 14px;
-    height: 14px;
-  }
-  &-download {
-    background-image: url(../images/icon-download.png);
-    width: 14px;
-    height: 14px;
-  }
-  &-close {
-    background-image: url(../images/icon-close.png);
-  }
-  &-close-act {
-    background-image: url(../images/icon-close-act.png);
-  }
-  &-files {
-    background-image: url(../images/icon-files.png);
-    width: 14px;
-    height: 12px;
-  }
-  &-files-act {
-    background-image: url(../images/icon-files-act.png);
-    width: 14px;
-    height: 12px;
-  }
-}
+// icon
+.icon {
+  display: inline-block;
+  vertical-align: middle;
+  width: 16px;
+  height: 16px;
+  background-repeat: no-repeat;
+  background-size: 100% 100%;
+
+  // home
+  &-location {
+    background-image: url(../images/icon-location.png);
+    width: 10px;
+    height: 10px;
+  }
+  // navs
+  &-exam {
+    background-image: url(../images/icon-exam.png);
+  }
+  &-report {
+    background-image: url(../images/icon-report.png);
+  }
+  &-base {
+    width: 14px;
+    background-image: url(../images/icon-base.png);
+  }
+  &-customer {
+    background-image: url(../images/icon-customer.png);
+  }
+  &-workspace {
+    background-image: url(../images/icon-workspace.png);
+  }
+  &-book {
+    background-image: url(../images/icon-book.png);
+  }
+
+  &-account {
+    background-image: url(../images/icon-account.png);
+  }
+  &-logout {
+    background-image: url(../images/icon-logout.png);
+  }
+
+  // login
+  &-phone {
+    background-image: url(../images/icon-phone.png);
+    width: 14px;
+    height: 16px;
+  }
+  &-password {
+    background-image: url(../images/icon-password.png);
+    width: 14px;
+    height: 14px;
+  }
+  &-checkcode {
+    background-image: url(../images/icon-checkcode.png);
+    width: 14px;
+    height: 16px;
+  }
+  // other
+  &-error {
+    background-image: url(../images/icon-error.png);
+    width: 16px;
+    height: 16px;
+  }
+  &-search {
+    background-image: url(../images/icon-search.png);
+    width: 14px;
+    height: 14px;
+  }
+  &-download {
+    background-image: url(../images/icon-download.png);
+    width: 14px;
+    height: 14px;
+  }
+  &-close {
+    background-image: url(../images/icon-close.png);
+  }
+  &-close-act {
+    background-image: url(../images/icon-close-act.png);
+  }
+  &-files {
+    background-image: url(../images/icon-files.png);
+    width: 14px;
+    height: 12px;
+  }
+  &-files-act {
+    background-image: url(../images/icon-files-act.png);
+    width: 14px;
+    height: 12px;
+  }
+}

+ 11 - 11
src/assets/styles/index.scss

@@ -1,11 +1,11 @@
-@import "./variables.scss";
-@import "./base.scss";
-@import "./icons.scss";
-@import "./home.scss";
-
-@import "./login.scss";
-@import "./pages.scss";
-
-@import "./element-ui-costom.scss";
-@import "./common-comp.scss";
-@import "./adaptive.scss";
+@import "./variables.scss";
+@import "./base.scss";
+@import "./icons.scss";
+@import "./home.scss";
+
+@import "./login.scss";
+@import "./pages.scss";
+
+@import "./element-ui-costom.scss";
+@import "./common-comp.scss";
+@import "./adaptive.scss";

+ 99 - 99
src/assets/styles/login.scss

@@ -1,99 +1,99 @@
-/* login */
-.login-home {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  z-index: 8;
-  background-image: url(../images/login-back.png);
-  background-repeat: no-repeat;
-  background-size: cover;
-  overflow: auto;
-}
-.login-footer {
-  position: absolute;
-  width: 100%;
-  bottom: 0;
-  padding: 10px;
-  color: $--color-text-gray;
-  text-align: center;
-
-  a {
-    margin: 0 5px;
-
-    &:hover {
-      color: $--color-primary;
-    }
-  }
-}
-
-.login-box {
-  position: absolute;
-  width: 440px;
-  top: 50%;
-  left: 50%;
-  transform: translate(-50%, -50%);
-  border-radius: 20px;
-  background-color: #fff;
-  overflow: hidden;
-}
-.login-body {
-  height: 100%;
-  overflow: hidden;
-  padding: 80px 50px;
-}
-.login-title {
-  text-align: center;
-  margin-bottom: 40px;
-  h1 {
-    font-size: 21px;
-    font-weight: bold;
-  }
-
-  img {
-    display: block;
-    max-width: 160px;
-    height: 40px;
-    margin: 0 auto;
-  }
-}
-.login-form {
-  .login-submit-btn {
-    width: 100%;
-    height: 48px;
-    border-radius: 24px;
-    font-size: 18px;
-  }
-  .vlcode-right {
-    width: 100px;
-  }
-  .vlcode-left {
-    margin-right: 105px;
-  }
-  .el-form-item__content {
-    border-bottom: 1px solid #e1e3eb;
-    padding-bottom: 2px;
-  }
-  .el-form-item:last-child {
-    margin-bottom: 0;
-    .el-form-item__content {
-      border: none;
-    }
-  }
-  .el-form-item:nth-last-of-type(2) {
-    .el-form-item__content {
-      border: none;
-    }
-  }
-  .el-input__inner {
-    border: none;
-    border-radius: 0 !important;
-  }
-  .el-input__prefix {
-    left: 5px;
-  }
-}
-.login-link {
-  text-align: right;
-}
+/* login */
+.login-home {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  z-index: 8;
+  background-image: url(../images/login-back.png);
+  background-repeat: no-repeat;
+  background-size: cover;
+  overflow: auto;
+}
+.login-footer {
+  position: absolute;
+  width: 100%;
+  bottom: 0;
+  padding: 10px;
+  color: $--color-text-gray;
+  text-align: center;
+
+  a {
+    margin: 0 5px;
+
+    &:hover {
+      color: $--color-primary;
+    }
+  }
+}
+
+.login-box {
+  position: absolute;
+  width: 440px;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  border-radius: 20px;
+  background-color: #fff;
+  overflow: hidden;
+}
+.login-body {
+  height: 100%;
+  overflow: hidden;
+  padding: 80px 50px;
+}
+.login-title {
+  text-align: center;
+  margin-bottom: 40px;
+  h1 {
+    font-size: 21px;
+    font-weight: bold;
+  }
+
+  img {
+    display: block;
+    max-width: 160px;
+    height: 40px;
+    margin: 0 auto;
+  }
+}
+.login-form {
+  .login-submit-btn {
+    width: 100%;
+    height: 48px;
+    border-radius: 24px;
+    font-size: 18px;
+  }
+  .vlcode-right {
+    width: 100px;
+  }
+  .vlcode-left {
+    margin-right: 105px;
+  }
+  .el-form-item__content {
+    border-bottom: 1px solid #e1e3eb;
+    padding-bottom: 2px;
+  }
+  .el-form-item:last-child {
+    margin-bottom: 0;
+    .el-form-item__content {
+      border: none;
+    }
+  }
+  .el-form-item:nth-last-of-type(2) {
+    .el-form-item__content {
+      border: none;
+    }
+  }
+  .el-input__inner {
+    border: none;
+    border-radius: 0 !important;
+  }
+  .el-input__prefix {
+    left: 5px;
+  }
+}
+.login-link {
+  text-align: right;
+}

+ 1088 - 1088
src/assets/styles/pages.scss

@@ -1,1088 +1,1088 @@
-.task-apply-steps {
-  min-height: 90px;
-  margin-bottom: 20px;
-  margin-top: -32px;
-  .el-step__title {
-    font-size: 14px;
-    line-height: 30px;
-  }
-}
-.task-exam-room {
-  background-color: #fff;
-  border-radius: $--border-radius;
-  margin-bottom: 10px;
-}
-// task-detail
-.task-detail {
-  .table {
-    border-radius: $--border-radius;
-    color: $--color-text-dark-1;
-    border: 1px solid $--color-border;
-    border-bottom: 0;
-    border-right: 0;
-    border-collapse: separate;
-    overflow: hidden;
-
-    th {
-      border-left: 0;
-      border-top: 0;
-      color: $--color-text-gray-2;
-      padding: 15px;
-    }
-    td {
-      border-left: 0;
-      border-top: 0;
-      padding: 10px 15px;
-
-      i {
-        display: inline-block;
-        vertical-align: middle;
-      }
-    }
-  }
-  .icon {
-    margin-right: 8px;
-  }
-
-  .task-action {
-    margin-top: 50px;
-    text-align: center;
-  }
-  .task-audit {
-    padding-top: 15px;
-    border-top: 2px dashed $--color-border;
-    margin-top: 20px;
-  }
-  // .task-audit-history {
-  // }
-
-  .image-item {
-    display: inline-block;
-    vertical-align: top;
-    width: 80px;
-    height: 80px;
-    margin: 0 10px 10px 0;
-    border: 1px solid $--color-text-gray-4;
-    position: relative;
-    border-radius: 5px;
-    overflow: hidden;
-
-    img {
-      position: absolute;
-      margin: auto;
-      max-width: 100%;
-      max-height: 100%;
-      top: 0;
-      left: 0;
-      right: 0;
-      bottom: 0;
-      z-index: auto;
-      cursor: pointer;
-    }
-
-    .image-delete {
-      display: none;
-      position: absolute;
-      z-index: 99;
-      width: 100%;
-      height: 30px;
-      line-height: 30px;
-      text-align: center;
-      font-size: 20px;
-      bottom: 0;
-      left: 0;
-      background-color: rgba($color: #000000, $alpha: 0.3);
-      color: $--color-danger;
-      cursor: pointer;
-    }
-
-    &:hover {
-      .image-delete {
-        display: block;
-      }
-    }
-  }
-  .image-add {
-    font-size: 40px;
-    line-height: 1;
-    padding: 19px;
-    text-align: center;
-    border-radius: 5px;
-    border-style: dashed;
-    overflow: hidden;
-    cursor: pointer;
-    color: $--color-text-gray-5;
-
-    &:hover {
-      color: $--color-text-gray-3;
-    }
-  }
-  .image-list-none {
-    color: $--color-text-gray-2;
-    margin-bottom: 10px;
-  }
-}
-// apply-audit-history
-.apply-audit-history {
-  .audit-result {
-    margin: 10px 0;
-  }
-}
-// task-list
-.task-head {
-  font-size: 16px;
-
-  i {
-    cursor: pointer;
-
-    &:hover {
-      color: $--color-primary;
-    }
-  }
-}
-.task-list {
-  .task-item {
-    margin-bottom: 15px;
-    padding: 15px;
-    border-radius: $--border-radius;
-    background-color: $--color-background;
-
-    p {
-      line-height: 1.5;
-      margin-bottom: 5px;
-      > span:first-child {
-        color: $--color-text-dark-1;
-      }
-    }
-  }
-  .task-action {
-    cursor: pointer;
-    &:hover {
-      color: $--color-primary;
-    }
-  }
-}
-// create-exam-and-print-task
-.create-exam-and-print-task {
-  .apply-body {
-    width: 1000px;
-    margin: 0 auto 30px;
-  }
-  .apply-part {
-    padding: 20px 30px;
-    border-radius: 20px;
-    border: 1px solid $--color-text-gray-5;
-    margin-bottom: 20px;
-
-    &-title {
-      font-weight: 600;
-      font-size: 18px;
-      line-height: 1;
-      margin-bottom: 30px;
-    }
-  }
-}
-// flow-timeline
-.flow-timeline {
-  margin-top: 10px;
-  padding: 15px;
-  border: 1px solid $--color-text-gray-6;
-  border-radius: 10px;
-  background-color: $--color-text-gray-7;
-  .el-timeline {
-    padding: 0 10px;
-    &-item__tail {
-      border-color: #ddd;
-    }
-  }
-  .timeline-item-stop {
-    .el-timeline-item__tail {
-      border-left-style: dashed;
-    }
-  }
-
-  .el-timeline-item__node--success {
-    background-color: $--color-success;
-  }
-
-  .flow-item {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-
-    &-time {
-      color: #909399;
-      line-height: 1;
-      font-size: 13px;
-      margin-bottom: 8px;
-      padding-top: 4px;
-    }
-    &-title {
-      font-size: 16px;
-      line-height: 1;
-      margin-bottom: 5px;
-    }
-    &-desc {
-      color: $--color-text-gray;
-
-      > span:not(:first-child) {
-        margin-left: 10px;
-      }
-    }
-
-    &-attachment {
-      .btn-primary {
-        &:hover {
-          font-weight: normal;
-        }
-
-        & + .btn-primary {
-          position: relative;
-          margin-left: 20px;
-
-          &::before {
-            content: "";
-            display: block;
-            position: absolute;
-            width: 0;
-            height: 14px;
-            border-left: 1px solid $--color-text-gray-4;
-            left: -10px;
-            top: 50%;
-            margin-top: -7px;
-          }
-        }
-      }
-    }
-
-    &-action {
-      text-align: center;
-    }
-
-    // action
-    .user-select {
-      width: 40px;
-      height: 40px;
-      padding: 10px;
-      font-size: 18px;
-      line-height: 1;
-    }
-  }
-}
-
-// wait-task
-.wait-task {
-  .wait-module {
-    height: 100%;
-  }
-}
-// card-title-rule-edit
-.card-title-rule-edit {
-  .field-item {
-    display: inline-block;
-    vertical-align: top;
-    margin: 0 10px 10px 0;
-    padding: 8px 10px;
-    border-radius: 4px;
-    line-height: 1;
-    background-color: $--color-background;
-    cursor: pointer;
-
-    &:hover {
-      color: $--color-primary;
-    }
-    &-act {
-      background-color: $--color-primary;
-      color: #fff !important;
-    }
-    &-disabled {
-      cursor: not-allowed;
-
-      &:hover {
-        color: $--color-text-dark;
-      }
-    }
-  }
-  .field-textarea {
-    border-radius: $--border-radius;
-    border: 1px solid $--color-text-gray-4;
-    min-height: 60px;
-    padding: 2px;
-    overflow: hidden;
-
-    &:focus {
-      border-color: $--color-primary;
-    }
-
-    span.var-field {
-      display: inline-block;
-      vertical-align: middle;
-      padding: 3px 5px;
-      background-color: $--color-primary;
-      color: $--color-white;
-      line-height: 1;
-      border-radius: 3px;
-    }
-  }
-}
-
-// page-preview
-.preview-frame {
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  z-index: 99;
-}
-// label-edit
-.label-edit {
-  min-height: 60px;
-  .label-item {
-    display: inline-block;
-    vertical-align: top;
-    border: 1px solid $--color-text-gray-6;
-    border-radius: $--border-radius;
-    padding: 5px 40px 5px 10px;
-    position: relative;
-    margin: 0 10px 10px 0;
-    line-height: 21px;
-  }
-  .label-item-content {
-    margin: 0;
-    line-height: 21px;
-    vertical-align: middle;
-  }
-  .label-item-delete {
-    position: absolute;
-    right: 10px;
-    top: 50%;
-    transform: translateY(-50%);
-    z-index: 99;
-    font-size: 16px;
-    color: $--color-text-gray-5;
-    cursor: pointer;
-    &:hover {
-      color: $--color-danger;
-    }
-  }
-  .label-add {
-    display: inline-block;
-    vertical-align: top;
-    border: 1px solid $--color-text-gray-6;
-    border-radius: $--border-radius;
-    padding: 0 10px;
-    color: $--color-text-gray-2;
-    cursor: pointer;
-    &:hover {
-      border-color: $--color-primary;
-      color: $--color-primary;
-    }
-  }
-}
-
-// rule-exam
-
-// select-orgs
-.select-orgs {
-  position: relative;
-
-  &-disabled {
-    &::before {
-      content: "";
-      position: absolute;
-      top: 0;
-      left: 0;
-      right: 0;
-      bottom: 0;
-      z-index: 99;
-      background-color: #f5f7fa;
-      opacity: 0.3;
-      cursor: not-allowed;
-    }
-  }
-
-  .el-checkbox.is-disabled + span.el-tree-node__label {
-    color: $--color-text-gray-4;
-  }
-}
-// privilege-set
-.privilege-set {
-  .cell-check-list {
-    text-align: left;
-    padding-left: 20px;
-  }
-}
-// organization-manage
-.organization-manage {
-  .org-tree-head {
-    height: 40px;
-    line-height: 40px;
-    color: $--color-text-gray-2;
-    border-bottom: 1px solid $--color-border;
-    padding: 0 8px;
-
-    > div {
-      float: right;
-      font-weight: 500;
-      &:first-child {
-        float: left;
-      }
-
-      &:nth-of-type(2) {
-        width: 200px;
-        text-align: right;
-      }
-      &:nth-of-type(3) {
-        width: 100px;
-      }
-    }
-  }
-  .el-tree-node__content {
-    height: auto;
-    padding: 4px 0;
-    border-bottom: 1px solid $--color-border;
-  }
-  .org-edit {
-    .org-type {
-      width: 100px;
-      display: inline-block;
-    }
-    .org-actions {
-      width: 200px;
-      display: inline-block;
-      text-align: right;
-    }
-    .el-button--text:hover {
-      transform: scale(1.1);
-    }
-  }
-}
-// modify-print-plan
-.modify-print-plan {
-  .part-box {
-    margin-bottom: 40px;
-  }
-}
-
-// paper-track-preview-dialog
-.paper-track-preview-dialog {
-  .paper-preview {
-    overflow: auto;
-    canvas {
-      display: block;
-      margin: 0 auto;
-    }
-  }
-  .preview-loading {
-    position: absolute;
-    top: 100px;
-    width: 100%;
-    z-index: auto;
-    font-size: 100px;
-    text-align: center;
-    color: #aaa;
-  }
-  .el-dialog__body {
-    padding: 70px 20px 80px !important;
-  }
-  .el-dialog__footer {
-    position: fixed;
-    width: 100%;
-    left: 0;
-    bottom: 0;
-    z-index: 9;
-    padding: 15px 20px;
-    border-top: 1px solid #eff0f5;
-    background-color: #fff;
-    .el-button {
-      float: none;
-    }
-  }
-}
-
-// marker-login
-.marker-login {
-  .part-box {
-    padding: 100px 50px;
-    text-align: center;
-  }
-  .auth-item {
-    padding: 80px;
-    margin: 0 20px;
-    font-size: 40px;
-  }
-}
-
-// modify-exam
-.modify-exam {
-  .tips-info {
-    font-size: 14px;
-  }
-  .el-radio-v {
-    display: block;
-    margin-bottom: 8px;
-  }
-}
-// modify-exam-config
-
-// modify-flow-detail
-.modify-flow-detail {
-  .flow-box {
-    display: flex;
-    justify-content: space-between;
-    align-items: stretch;
-  }
-  .flow-property {
-    width: 300px;
-    min-height: 400px;
-    flex-grow: 0;
-    flex-shrink: 0;
-    border: 1px solid $--color-text-gray-5;
-    border-radius: 10px;
-    padding: 15px;
-    background-color: #fff;
-
-    &-title {
-      font-size: 16px;
-      line-height: 1;
-      padding-bottom: 10px;
-      margin-bottom: 10px;
-      border-bottom: 1px solid $--color-text-gray-5;
-    }
-  }
-  .property-part {
-    margin-bottom: 15px;
-    padding-bottom: 15px;
-    border-bottom: 1px solid $--color-text-gray-5;
-
-    &-title {
-      font-size: 14px;
-      line-height: 1;
-      margin-bottom: 10px;
-    }
-  }
-  .property-desc {
-    margin-bottom: 10px;
-  }
-  .flow-radio-v {
-    .el-radio {
-      display: block;
-      margin-bottom: 8px;
-    }
-  }
-  .flow-users {
-    margin-top: 10px;
-  }
-  .user-list {
-    margin-top: 10px;
-
-    .el-tag {
-      margin: 3px;
-    }
-  }
-  .user-clear {
-    padding: 5px 10px;
-    width: 68px;
-    margin: 3px;
-  }
-
-  .flow-content {
-    margin-right: 20px;
-    flex-grow: 1;
-    border: 1px solid $--color-text-gray-5;
-    border-radius: 10px;
-    padding: 10px;
-    position: relative;
-    background-color: #fff;
-  }
-  .flow-main {
-    width: 200px;
-    margin: 30px auto 0;
-  }
-  .flow-node {
-    position: relative;
-    box-shadow: 0 0 0 1px #ccc;
-    border-radius: 10px;
-    margin-bottom: 60px;
-    cursor: pointer;
-
-    &:hover {
-      opacity: 0.9;
-    }
-    &.is-active {
-      opacity: 1;
-      box-shadow: 0 0 0 2px $--color-blue;
-    }
-
-    &-title {
-      padding: 8px 10px;
-      border-bottom: 1px solid #ccc;
-      background-color: $--color-blue;
-      color: #fff;
-      border-top-left-radius: 10px;
-      border-top-right-radius: 10px;
-    }
-    &-content {
-      padding: 10px;
-      min-height: 40px;
-    }
-  }
-  .node-start {
-    cursor: default;
-    .flow-node-content {
-      background-color: mix(#fff, $--color-success, 20%);
-      text-align: center;
-      font-size: 18px;
-      border-radius: 10px;
-      color: #fff;
-    }
-  }
-  .node-end {
-    cursor: default;
-
-    .flow-node-content {
-      background-color: mix(#fff, $--color-danger, 20%);
-      text-align: center;
-      font-size: 18px;
-      border-radius: 10px;
-      color: #fff;
-    }
-  }
-  .flow-link {
-    position: absolute;
-    width: 30px;
-    left: 50%;
-    margin-left: -15px;
-    height: 52px;
-    bottom: -56px;
-
-    &::before {
-      content: "";
-      display: block;
-      position: absolute;
-      border-left: 2px solid $--color-text-gray-2;
-      top: 0;
-      bottom: 2px;
-      left: 50%;
-      margin-left: -1px;
-      z-index: 8;
-    }
-    &::after {
-      content: "";
-      display: block;
-      position: absolute;
-      width: 0;
-      height: 0;
-      border-width: 8px;
-      border-style: solid;
-      border-color: $--color-text-gray-2 transparent transparent transparent;
-      left: 50%;
-      margin-left: -8px;
-      bottom: -8px;
-      z-index: 9;
-    }
-
-    .node-add {
-      position: absolute;
-      width: 24px;
-      height: 24px;
-      top: 50%;
-      left: 50%;
-      transform: translate(-50%, -50%);
-      border-radius: 50%;
-      z-index: 99;
-      background-color: $--color-primary;
-      color: #fff;
-      font-size: 16px;
-      line-height: 25px;
-      text-align: center;
-      cursor: pointer;
-
-      &:hover {
-        background-color: mix(#000, $--color-primary, 10%);
-      }
-    }
-  }
-}
-.select-user-dialog {
-  .user-search {
-    margin-bottom: 5px;
-  }
-  .user-types {
-    font-size: 0;
-    margin-bottom: 5px;
-  }
-  .user-type {
-    display: inline-block;
-    vertical-align: top;
-    font-size: 14px;
-    height: 28px;
-    width: 50%;
-    padding: 0 10px;
-    line-height: 26px;
-    border: 1px solid #e0e0e0;
-    text-align: center;
-    cursor: pointer;
-    &:hover {
-      border-color: $--color-primary;
-      color: $--color-primary;
-    }
-
-    &.is-active {
-      background-color: $--color-primary;
-      border-color: $--color-primary;
-      color: #fff;
-    }
-  }
-  .user-tree {
-    padding: 5px;
-    border: 1px solid #e0e0e0;
-    height: 300px;
-    overflow: auto;
-  }
-  .user-part-title {
-    height: 28px;
-    line-height: 26px;
-    border-radius: 5px;
-    background-color: #f0f0f0;
-    border: 1px solid #e0e0e0;
-    text-align: center;
-    margin-bottom: 5px;
-  }
-  .user-list {
-    border: 1px solid #e0e0e0;
-    padding: 5px;
-    height: 333px;
-    overflow: auto;
-  }
-  .user-item {
-    margin: 3px 0;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    background-color: #f0f0f0;
-    border-radius: 3px;
-  }
-  .user-cont {
-    line-height: 20px;
-    padding: 4px 6px;
-  }
-  .user-delete {
-    padding: 0;
-    color: $--color-danger;
-
-    &:hover {
-      color: mix(#000, $--color-danger, 10%);
-    }
-  }
-}
-
-// card-manage
-.card-create-type {
-  .card-types {
-    font-size: 0;
-    text-align: center;
-  }
-  .card-type {
-    display: inline-block;
-    vertical-align: top;
-    font-size: 20px;
-    margin: 0 5px;
-    height: 70px;
-    width: 150px;
-    line-height: 1;
-    padding: 25px 0;
-    border-radius: $--border-radius;
-    color: #fff;
-    cursor: pointer;
-
-    &:hover {
-      opacity: 0.8;
-    }
-
-    &:nth-of-type(1) {
-      background-color: $--color-primary;
-    }
-    &:nth-of-type(2) {
-      background-color: $--color-success;
-    }
-    &:nth-of-type(3) {
-      background-color: $--color-cyan;
-    }
-  }
-}
-// modify-card
-.modify-card {
-  .el-dialog.is-fullscreen {
-    border: none;
-    .el-dialog__body {
-      border: none;
-      padding: 0;
-    }
-  }
-}
-// modify-mark-params
-.modify-mark-params {
-  .mark-body {
-    margin: 40px 0;
-  }
-  .structure-desc {
-    margin-bottom: 10px;
-  }
-  .expand-btn {
-    display: inline-block;
-    width: 20px;
-    height: 20px;
-    line-height: 19px;
-    font-size: 13px;
-    border: 1px solid #6f7482;
-    border-radius: 3px;
-    text-align: center;
-    cursor: pointer;
-
-    &:hover {
-      color: $--color-primary;
-      border-color: $--color-primary;
-    }
-
-    &-unexpand {
-      background-color: #ebeffc;
-    }
-  }
-  .total-info {
-    text-align: right;
-    padding-top: 10px;
-    padding-right: 210px;
-    > span {
-      color: $--color-danger;
-      font-weight: 600;
-      margin: 0 2px;
-    }
-  }
-  .row-unexpand-sub {
-    display: none;
-  }
-  .marker-header {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    margin-bottom: 10px;
-  }
-}
-// modify-marker-question
-.modify-marker-question {
-  .el-dialog {
-    width: 900px;
-    margin: 0 auto;
-
-    &__header,
-    &__footer {
-      display: none;
-    }
-    &__body {
-      padding: 20px;
-    }
-  }
-
-  .marker-box {
-    height: 600px;
-    background-color: $--color-background;
-    border-radius: $--border-radius;
-    padding: 15px;
-    display: flex;
-    flex-direction: column;
-
-    &-uq {
-      display: block;
-      height: 100%;
-      overflow: auto;
-      background-color: #fff;
-      border: 1px solid $--color-background;
-
-      .el-tag {
-        margin: 3px;
-      }
-    }
-  }
-  .user-title {
-    margin-bottom: 10px;
-    flex-grow: 0;
-  }
-  .user-search {
-    margin-bottom: 10px;
-    flex-grow: 0;
-  }
-  .user-tree {
-    padding: 10px;
-    border-radius: 4px;
-    background-color: #fff;
-    overflow: auto;
-    flex-grow: 2;
-  }
-
-  .marker-footer {
-    margin-top: 15px;
-    text-align: center;
-  }
-}
-// modify-student-simple
-.modify-student-simple {
-  .tab-body {
-    min-height: 300px;
-  }
-}
-// modify-mark-area
-.modify-mark-area {
-  .el-dialog__body {
-    background-color: $--color-background;
-    position: relative;
-    z-index: 3;
-  }
-  .el-dialog__footer {
-    display: none;
-  }
-}
-.area-cropper {
-  position: relative;
-  border: 1px solid #e0e0e0;
-  background-color: #fff;
-  margin: 10px 0;
-
-  .cropper-img img {
-    display: block;
-    width: 100%;
-    height: auto;
-  }
-  .cropper-areas {
-    position: absolute;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    z-index: 9;
-  }
-
-  .area-selection {
-    position: absolute;
-    z-index: 999;
-    border: 1px solid $--color-blue;
-    background-color: rgba($color: #000000, $alpha: 0.2);
-  }
-
-  .element-item-body {
-    position: absolute;
-    background-color: rgba($color: #000000, $alpha: 0.2);
-  }
-  .element-delete {
-    position: absolute;
-    height: 20px;
-    width: 20px;
-    top: 0;
-    right: -20px;
-    line-height: 20px;
-    text-align: center;
-    font-size: 18px;
-    display: none;
-    z-index: 9;
-    color: $--color-danger;
-    cursor: pointer;
-    &:hover {
-      color: mix(#fff, $--color-danger, 20%);
-    }
-  }
-
-  .element-resize {
-    background-color: transparent;
-    > .resize-control {
-      > .control-point,
-      > .control-line {
-        display: none;
-      }
-    }
-
-    &:hover {
-      > .resize-control {
-        > .control-line {
-          display: block;
-        }
-      }
-    }
-
-    &-act {
-      > .resize-control {
-        > .control-point,
-        > .control-line {
-          display: block;
-        }
-      }
-      .element-delete {
-        display: block;
-      }
-    }
-  }
-  .element-resize-compact {
-    > .resize-control {
-      > .control-line {
-        display: block;
-      }
-    }
-
-    &:hover {
-      > .resize-control {
-        > .control-line {
-          border-color: $--color-primary;
-        }
-      }
-    }
-
-    &.element-resize-act {
-      > .resize-control {
-        > .control-line {
-          border-color: $--color-primary;
-          &-left,
-          &-right {
-            border-left-style: solid;
-          }
-          &-top,
-          &-bottom {
-            border-top-style: solid;
-          }
-        }
-      }
-    }
-  }
-}
-// answer-popover
-.answer-popover {
-  line-height: 24px;
-  padding: 15px;
-
-  .answer-divider {
-    margin: 10px 0;
-    height: 1px;
-    border-bottom: 1px dashed $--color-text-gray-5;
-  }
-  .el-checkbox__label,
-  .el-radio__label {
-    width: 24px;
-    text-align: center;
-  }
-  .el-radio__label {
-    display: inline-block;
-  }
-}
-// ecs-exam-select
-.ecs-exam-select {
-  display: inline-block;
-  vertical-align: middle;
-  .el-select .el-input__inner {
-    border-top-right-radius: 0;
-    border-bottom-right-radius: 0;
-    width: 300px;
-  }
-  .el-button {
-    border-top-left-radius: 0;
-    border-bottom-left-radius: 0;
-  }
-}
+.task-apply-steps {
+  min-height: 90px;
+  margin-bottom: 20px;
+  margin-top: -32px;
+  .el-step__title {
+    font-size: 14px;
+    line-height: 30px;
+  }
+}
+.task-exam-room {
+  background-color: #fff;
+  border-radius: $--border-radius;
+  margin-bottom: 10px;
+}
+// task-detail
+.task-detail {
+  .table {
+    border-radius: $--border-radius;
+    color: $--color-text-dark-1;
+    border: 1px solid $--color-border;
+    border-bottom: 0;
+    border-right: 0;
+    border-collapse: separate;
+    overflow: hidden;
+
+    th {
+      border-left: 0;
+      border-top: 0;
+      color: $--color-text-gray-2;
+      padding: 15px;
+    }
+    td {
+      border-left: 0;
+      border-top: 0;
+      padding: 10px 15px;
+
+      i {
+        display: inline-block;
+        vertical-align: middle;
+      }
+    }
+  }
+  .icon {
+    margin-right: 8px;
+  }
+
+  .task-action {
+    margin-top: 50px;
+    text-align: center;
+  }
+  .task-audit {
+    padding-top: 15px;
+    border-top: 2px dashed $--color-border;
+    margin-top: 20px;
+  }
+  // .task-audit-history {
+  // }
+
+  .image-item {
+    display: inline-block;
+    vertical-align: top;
+    width: 80px;
+    height: 80px;
+    margin: 0 10px 10px 0;
+    border: 1px solid $--color-text-gray-4;
+    position: relative;
+    border-radius: 5px;
+    overflow: hidden;
+
+    img {
+      position: absolute;
+      margin: auto;
+      max-width: 100%;
+      max-height: 100%;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      z-index: auto;
+      cursor: pointer;
+    }
+
+    .image-delete {
+      display: none;
+      position: absolute;
+      z-index: 99;
+      width: 100%;
+      height: 30px;
+      line-height: 30px;
+      text-align: center;
+      font-size: 20px;
+      bottom: 0;
+      left: 0;
+      background-color: rgba($color: #000000, $alpha: 0.3);
+      color: $--color-danger;
+      cursor: pointer;
+    }
+
+    &:hover {
+      .image-delete {
+        display: block;
+      }
+    }
+  }
+  .image-add {
+    font-size: 40px;
+    line-height: 1;
+    padding: 19px;
+    text-align: center;
+    border-radius: 5px;
+    border-style: dashed;
+    overflow: hidden;
+    cursor: pointer;
+    color: $--color-text-gray-5;
+
+    &:hover {
+      color: $--color-text-gray-3;
+    }
+  }
+  .image-list-none {
+    color: $--color-text-gray-2;
+    margin-bottom: 10px;
+  }
+}
+// apply-audit-history
+.apply-audit-history {
+  .audit-result {
+    margin: 10px 0;
+  }
+}
+// task-list
+.task-head {
+  font-size: 16px;
+
+  i {
+    cursor: pointer;
+
+    &:hover {
+      color: $--color-primary;
+    }
+  }
+}
+.task-list {
+  .task-item {
+    margin-bottom: 15px;
+    padding: 15px;
+    border-radius: $--border-radius;
+    background-color: $--color-background;
+
+    p {
+      line-height: 1.5;
+      margin-bottom: 5px;
+      > span:first-child {
+        color: $--color-text-dark-1;
+      }
+    }
+  }
+  .task-action {
+    cursor: pointer;
+    &:hover {
+      color: $--color-primary;
+    }
+  }
+}
+// create-exam-and-print-task
+.create-exam-and-print-task {
+  .apply-body {
+    width: 1000px;
+    margin: 0 auto 30px;
+  }
+  .apply-part {
+    padding: 20px 30px;
+    border-radius: 20px;
+    border: 1px solid $--color-text-gray-5;
+    margin-bottom: 20px;
+
+    &-title {
+      font-weight: 600;
+      font-size: 18px;
+      line-height: 1;
+      margin-bottom: 30px;
+    }
+  }
+}
+// flow-timeline
+.flow-timeline {
+  margin-top: 10px;
+  padding: 15px;
+  border: 1px solid $--color-text-gray-6;
+  border-radius: 10px;
+  background-color: $--color-text-gray-7;
+  .el-timeline {
+    padding: 0 10px;
+    &-item__tail {
+      border-color: #ddd;
+    }
+  }
+  .timeline-item-stop {
+    .el-timeline-item__tail {
+      border-left-style: dashed;
+    }
+  }
+
+  .el-timeline-item__node--success {
+    background-color: $--color-success;
+  }
+
+  .flow-item {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+
+    &-time {
+      color: #909399;
+      line-height: 1;
+      font-size: 13px;
+      margin-bottom: 8px;
+      padding-top: 4px;
+    }
+    &-title {
+      font-size: 16px;
+      line-height: 1;
+      margin-bottom: 5px;
+    }
+    &-desc {
+      color: $--color-text-gray;
+
+      > span:not(:first-child) {
+        margin-left: 10px;
+      }
+    }
+
+    &-attachment {
+      .btn-primary {
+        &:hover {
+          font-weight: normal;
+        }
+
+        & + .btn-primary {
+          position: relative;
+          margin-left: 20px;
+
+          &::before {
+            content: "";
+            display: block;
+            position: absolute;
+            width: 0;
+            height: 14px;
+            border-left: 1px solid $--color-text-gray-4;
+            left: -10px;
+            top: 50%;
+            margin-top: -7px;
+          }
+        }
+      }
+    }
+
+    &-action {
+      text-align: center;
+    }
+
+    // action
+    .user-select {
+      width: 40px;
+      height: 40px;
+      padding: 10px;
+      font-size: 18px;
+      line-height: 1;
+    }
+  }
+}
+
+// wait-task
+.wait-task {
+  .wait-module {
+    height: 100%;
+  }
+}
+// card-title-rule-edit
+.card-title-rule-edit {
+  .field-item {
+    display: inline-block;
+    vertical-align: top;
+    margin: 0 10px 10px 0;
+    padding: 8px 10px;
+    border-radius: 4px;
+    line-height: 1;
+    background-color: $--color-background;
+    cursor: pointer;
+
+    &:hover {
+      color: $--color-primary;
+    }
+    &-act {
+      background-color: $--color-primary;
+      color: #fff !important;
+    }
+    &-disabled {
+      cursor: not-allowed;
+
+      &:hover {
+        color: $--color-text-dark;
+      }
+    }
+  }
+  .field-textarea {
+    border-radius: $--border-radius;
+    border: 1px solid $--color-text-gray-4;
+    min-height: 60px;
+    padding: 2px;
+    overflow: hidden;
+
+    &:focus {
+      border-color: $--color-primary;
+    }
+
+    span.var-field {
+      display: inline-block;
+      vertical-align: middle;
+      padding: 3px 5px;
+      background-color: $--color-primary;
+      color: $--color-white;
+      line-height: 1;
+      border-radius: 3px;
+    }
+  }
+}
+
+// page-preview
+.preview-frame {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 99;
+}
+// label-edit
+.label-edit {
+  min-height: 60px;
+  .label-item {
+    display: inline-block;
+    vertical-align: top;
+    border: 1px solid $--color-text-gray-6;
+    border-radius: $--border-radius;
+    padding: 5px 40px 5px 10px;
+    position: relative;
+    margin: 0 10px 10px 0;
+    line-height: 21px;
+  }
+  .label-item-content {
+    margin: 0;
+    line-height: 21px;
+    vertical-align: middle;
+  }
+  .label-item-delete {
+    position: absolute;
+    right: 10px;
+    top: 50%;
+    transform: translateY(-50%);
+    z-index: 99;
+    font-size: 16px;
+    color: $--color-text-gray-5;
+    cursor: pointer;
+    &:hover {
+      color: $--color-danger;
+    }
+  }
+  .label-add {
+    display: inline-block;
+    vertical-align: top;
+    border: 1px solid $--color-text-gray-6;
+    border-radius: $--border-radius;
+    padding: 0 10px;
+    color: $--color-text-gray-2;
+    cursor: pointer;
+    &:hover {
+      border-color: $--color-primary;
+      color: $--color-primary;
+    }
+  }
+}
+
+// rule-exam
+
+// select-orgs
+.select-orgs {
+  position: relative;
+
+  &-disabled {
+    &::before {
+      content: "";
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      z-index: 99;
+      background-color: #f5f7fa;
+      opacity: 0.3;
+      cursor: not-allowed;
+    }
+  }
+
+  .el-checkbox.is-disabled + span.el-tree-node__label {
+    color: $--color-text-gray-4;
+  }
+}
+// privilege-set
+.privilege-set {
+  .cell-check-list {
+    text-align: left;
+    padding-left: 20px;
+  }
+}
+// organization-manage
+.organization-manage {
+  .org-tree-head {
+    height: 40px;
+    line-height: 40px;
+    color: $--color-text-gray-2;
+    border-bottom: 1px solid $--color-border;
+    padding: 0 8px;
+
+    > div {
+      float: right;
+      font-weight: 500;
+      &:first-child {
+        float: left;
+      }
+
+      &:nth-of-type(2) {
+        width: 200px;
+        text-align: right;
+      }
+      &:nth-of-type(3) {
+        width: 100px;
+      }
+    }
+  }
+  .el-tree-node__content {
+    height: auto;
+    padding: 4px 0;
+    border-bottom: 1px solid $--color-border;
+  }
+  .org-edit {
+    .org-type {
+      width: 100px;
+      display: inline-block;
+    }
+    .org-actions {
+      width: 200px;
+      display: inline-block;
+      text-align: right;
+    }
+    .el-button--text:hover {
+      transform: scale(1.1);
+    }
+  }
+}
+// modify-print-plan
+.modify-print-plan {
+  .part-box {
+    margin-bottom: 40px;
+  }
+}
+
+// paper-track-preview-dialog
+.paper-track-preview-dialog {
+  .paper-preview {
+    overflow: auto;
+    canvas {
+      display: block;
+      margin: 0 auto;
+    }
+  }
+  .preview-loading {
+    position: absolute;
+    top: 100px;
+    width: 100%;
+    z-index: auto;
+    font-size: 100px;
+    text-align: center;
+    color: #aaa;
+  }
+  .el-dialog__body {
+    padding: 70px 20px 80px !important;
+  }
+  .el-dialog__footer {
+    position: fixed;
+    width: 100%;
+    left: 0;
+    bottom: 0;
+    z-index: 9;
+    padding: 15px 20px;
+    border-top: 1px solid #eff0f5;
+    background-color: #fff;
+    .el-button {
+      float: none;
+    }
+  }
+}
+
+// marker-login
+.marker-login {
+  .part-box {
+    padding: 100px 50px;
+    text-align: center;
+  }
+  .auth-item {
+    padding: 80px;
+    margin: 0 20px;
+    font-size: 40px;
+  }
+}
+
+// modify-exam
+.modify-exam {
+  .tips-info {
+    font-size: 14px;
+  }
+  .el-radio-v {
+    display: block;
+    margin-bottom: 8px;
+  }
+}
+// modify-exam-config
+
+// modify-flow-detail
+.modify-flow-detail {
+  .flow-box {
+    display: flex;
+    justify-content: space-between;
+    align-items: stretch;
+  }
+  .flow-property {
+    width: 300px;
+    min-height: 400px;
+    flex-grow: 0;
+    flex-shrink: 0;
+    border: 1px solid $--color-text-gray-5;
+    border-radius: 10px;
+    padding: 15px;
+    background-color: #fff;
+
+    &-title {
+      font-size: 16px;
+      line-height: 1;
+      padding-bottom: 10px;
+      margin-bottom: 10px;
+      border-bottom: 1px solid $--color-text-gray-5;
+    }
+  }
+  .property-part {
+    margin-bottom: 15px;
+    padding-bottom: 15px;
+    border-bottom: 1px solid $--color-text-gray-5;
+
+    &-title {
+      font-size: 14px;
+      line-height: 1;
+      margin-bottom: 10px;
+    }
+  }
+  .property-desc {
+    margin-bottom: 10px;
+  }
+  .flow-radio-v {
+    .el-radio {
+      display: block;
+      margin-bottom: 8px;
+    }
+  }
+  .flow-users {
+    margin-top: 10px;
+  }
+  .user-list {
+    margin-top: 10px;
+
+    .el-tag {
+      margin: 3px;
+    }
+  }
+  .user-clear {
+    padding: 5px 10px;
+    width: 68px;
+    margin: 3px;
+  }
+
+  .flow-content {
+    margin-right: 20px;
+    flex-grow: 1;
+    border: 1px solid $--color-text-gray-5;
+    border-radius: 10px;
+    padding: 10px;
+    position: relative;
+    background-color: #fff;
+  }
+  .flow-main {
+    width: 200px;
+    margin: 30px auto 0;
+  }
+  .flow-node {
+    position: relative;
+    box-shadow: 0 0 0 1px #ccc;
+    border-radius: 10px;
+    margin-bottom: 60px;
+    cursor: pointer;
+
+    &:hover {
+      opacity: 0.9;
+    }
+    &.is-active {
+      opacity: 1;
+      box-shadow: 0 0 0 2px $--color-blue;
+    }
+
+    &-title {
+      padding: 8px 10px;
+      border-bottom: 1px solid #ccc;
+      background-color: $--color-blue;
+      color: #fff;
+      border-top-left-radius: 10px;
+      border-top-right-radius: 10px;
+    }
+    &-content {
+      padding: 10px;
+      min-height: 40px;
+    }
+  }
+  .node-start {
+    cursor: default;
+    .flow-node-content {
+      background-color: mix(#fff, $--color-success, 20%);
+      text-align: center;
+      font-size: 18px;
+      border-radius: 10px;
+      color: #fff;
+    }
+  }
+  .node-end {
+    cursor: default;
+
+    .flow-node-content {
+      background-color: mix(#fff, $--color-danger, 20%);
+      text-align: center;
+      font-size: 18px;
+      border-radius: 10px;
+      color: #fff;
+    }
+  }
+  .flow-link {
+    position: absolute;
+    width: 30px;
+    left: 50%;
+    margin-left: -15px;
+    height: 52px;
+    bottom: -56px;
+
+    &::before {
+      content: "";
+      display: block;
+      position: absolute;
+      border-left: 2px solid $--color-text-gray-2;
+      top: 0;
+      bottom: 2px;
+      left: 50%;
+      margin-left: -1px;
+      z-index: 8;
+    }
+    &::after {
+      content: "";
+      display: block;
+      position: absolute;
+      width: 0;
+      height: 0;
+      border-width: 8px;
+      border-style: solid;
+      border-color: $--color-text-gray-2 transparent transparent transparent;
+      left: 50%;
+      margin-left: -8px;
+      bottom: -8px;
+      z-index: 9;
+    }
+
+    .node-add {
+      position: absolute;
+      width: 24px;
+      height: 24px;
+      top: 50%;
+      left: 50%;
+      transform: translate(-50%, -50%);
+      border-radius: 50%;
+      z-index: 99;
+      background-color: $--color-primary;
+      color: #fff;
+      font-size: 16px;
+      line-height: 25px;
+      text-align: center;
+      cursor: pointer;
+
+      &:hover {
+        background-color: mix(#000, $--color-primary, 10%);
+      }
+    }
+  }
+}
+.select-user-dialog {
+  .user-search {
+    margin-bottom: 5px;
+  }
+  .user-types {
+    font-size: 0;
+    margin-bottom: 5px;
+  }
+  .user-type {
+    display: inline-block;
+    vertical-align: top;
+    font-size: 14px;
+    height: 28px;
+    width: 50%;
+    padding: 0 10px;
+    line-height: 26px;
+    border: 1px solid #e0e0e0;
+    text-align: center;
+    cursor: pointer;
+    &:hover {
+      border-color: $--color-primary;
+      color: $--color-primary;
+    }
+
+    &.is-active {
+      background-color: $--color-primary;
+      border-color: $--color-primary;
+      color: #fff;
+    }
+  }
+  .user-tree {
+    padding: 5px;
+    border: 1px solid #e0e0e0;
+    height: 300px;
+    overflow: auto;
+  }
+  .user-part-title {
+    height: 28px;
+    line-height: 26px;
+    border-radius: 5px;
+    background-color: #f0f0f0;
+    border: 1px solid #e0e0e0;
+    text-align: center;
+    margin-bottom: 5px;
+  }
+  .user-list {
+    border: 1px solid #e0e0e0;
+    padding: 5px;
+    height: 333px;
+    overflow: auto;
+  }
+  .user-item {
+    margin: 3px 0;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    background-color: #f0f0f0;
+    border-radius: 3px;
+  }
+  .user-cont {
+    line-height: 20px;
+    padding: 4px 6px;
+  }
+  .user-delete {
+    padding: 0;
+    color: $--color-danger;
+
+    &:hover {
+      color: mix(#000, $--color-danger, 10%);
+    }
+  }
+}
+
+// card-manage
+.card-create-type {
+  .card-types {
+    font-size: 0;
+    text-align: center;
+  }
+  .card-type {
+    display: inline-block;
+    vertical-align: top;
+    font-size: 20px;
+    margin: 0 5px;
+    height: 70px;
+    width: 150px;
+    line-height: 1;
+    padding: 25px 0;
+    border-radius: $--border-radius;
+    color: #fff;
+    cursor: pointer;
+
+    &:hover {
+      opacity: 0.8;
+    }
+
+    &:nth-of-type(1) {
+      background-color: $--color-primary;
+    }
+    &:nth-of-type(2) {
+      background-color: $--color-success;
+    }
+    &:nth-of-type(3) {
+      background-color: $--color-cyan;
+    }
+  }
+}
+// modify-card
+.modify-card {
+  .el-dialog.is-fullscreen {
+    border: none;
+    .el-dialog__body {
+      border: none;
+      padding: 0;
+    }
+  }
+}
+// modify-mark-params
+.modify-mark-params {
+  .mark-body {
+    margin: 40px 0;
+  }
+  .structure-desc {
+    margin-bottom: 10px;
+  }
+  .expand-btn {
+    display: inline-block;
+    width: 20px;
+    height: 20px;
+    line-height: 19px;
+    font-size: 13px;
+    border: 1px solid #6f7482;
+    border-radius: 3px;
+    text-align: center;
+    cursor: pointer;
+
+    &:hover {
+      color: $--color-primary;
+      border-color: $--color-primary;
+    }
+
+    &-unexpand {
+      background-color: #ebeffc;
+    }
+  }
+  .total-info {
+    text-align: right;
+    padding-top: 10px;
+    padding-right: 210px;
+    > span {
+      color: $--color-danger;
+      font-weight: 600;
+      margin: 0 2px;
+    }
+  }
+  .row-unexpand-sub {
+    display: none;
+  }
+  .marker-header {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin-bottom: 10px;
+  }
+}
+// modify-marker-question
+.modify-marker-question {
+  .el-dialog {
+    width: 900px;
+    margin: 0 auto;
+
+    &__header,
+    &__footer {
+      display: none;
+    }
+    &__body {
+      padding: 20px;
+    }
+  }
+
+  .marker-box {
+    height: 600px;
+    background-color: $--color-background;
+    border-radius: $--border-radius;
+    padding: 15px;
+    display: flex;
+    flex-direction: column;
+
+    &-uq {
+      display: block;
+      height: 100%;
+      overflow: auto;
+      background-color: #fff;
+      border: 1px solid $--color-background;
+
+      .el-tag {
+        margin: 3px;
+      }
+    }
+  }
+  .user-title {
+    margin-bottom: 10px;
+    flex-grow: 0;
+  }
+  .user-search {
+    margin-bottom: 10px;
+    flex-grow: 0;
+  }
+  .user-tree {
+    padding: 10px;
+    border-radius: 4px;
+    background-color: #fff;
+    overflow: auto;
+    flex-grow: 2;
+  }
+
+  .marker-footer {
+    margin-top: 15px;
+    text-align: center;
+  }
+}
+// modify-student-simple
+.modify-student-simple {
+  .tab-body {
+    min-height: 300px;
+  }
+}
+// modify-mark-area
+.modify-mark-area {
+  .el-dialog__body {
+    background-color: $--color-background;
+    position: relative;
+    z-index: 3;
+  }
+  .el-dialog__footer {
+    display: none;
+  }
+}
+.area-cropper {
+  position: relative;
+  border: 1px solid #e0e0e0;
+  background-color: #fff;
+  margin: 10px 0;
+
+  .cropper-img img {
+    display: block;
+    width: 100%;
+    height: auto;
+  }
+  .cropper-areas {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    z-index: 9;
+  }
+
+  .area-selection {
+    position: absolute;
+    z-index: 999;
+    border: 1px solid $--color-blue;
+    background-color: rgba($color: #000000, $alpha: 0.2);
+  }
+
+  .element-item-body {
+    position: absolute;
+    background-color: rgba($color: #000000, $alpha: 0.2);
+  }
+  .element-delete {
+    position: absolute;
+    height: 20px;
+    width: 20px;
+    top: 0;
+    right: -20px;
+    line-height: 20px;
+    text-align: center;
+    font-size: 18px;
+    display: none;
+    z-index: 9;
+    color: $--color-danger;
+    cursor: pointer;
+    &:hover {
+      color: mix(#fff, $--color-danger, 20%);
+    }
+  }
+
+  .element-resize {
+    background-color: transparent;
+    > .resize-control {
+      > .control-point,
+      > .control-line {
+        display: none;
+      }
+    }
+
+    &:hover {
+      > .resize-control {
+        > .control-line {
+          display: block;
+        }
+      }
+    }
+
+    &-act {
+      > .resize-control {
+        > .control-point,
+        > .control-line {
+          display: block;
+        }
+      }
+      .element-delete {
+        display: block;
+      }
+    }
+  }
+  .element-resize-compact {
+    > .resize-control {
+      > .control-line {
+        display: block;
+      }
+    }
+
+    &:hover {
+      > .resize-control {
+        > .control-line {
+          border-color: $--color-primary;
+        }
+      }
+    }
+
+    &.element-resize-act {
+      > .resize-control {
+        > .control-line {
+          border-color: $--color-primary;
+          &-left,
+          &-right {
+            border-left-style: solid;
+          }
+          &-top,
+          &-bottom {
+            border-top-style: solid;
+          }
+        }
+      }
+    }
+  }
+}
+// answer-popover
+.answer-popover {
+  line-height: 24px;
+  padding: 15px;
+
+  .answer-divider {
+    margin: 10px 0;
+    height: 1px;
+    border-bottom: 1px dashed $--color-text-gray-5;
+  }
+  .el-checkbox__label,
+  .el-radio__label {
+    width: 24px;
+    text-align: center;
+  }
+  .el-radio__label {
+    display: inline-block;
+  }
+}
+// ecs-exam-select
+.ecs-exam-select {
+  display: inline-block;
+  vertical-align: middle;
+  .el-select .el-input__inner {
+    border-top-right-radius: 0;
+    border-bottom-right-radius: 0;
+    width: 300px;
+  }
+  .el-button {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+  }
+}

+ 82 - 82
src/assets/styles/paper-approve.css

@@ -1,82 +1,82 @@
-body,
-div,
-h1,
-p,
-tr,
-th,
-td,
-span {
-  margin: 0;
-  padding: 0;
-  box-sizing: border-box;
-  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
-}
-
-body {
-  font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
-    "Microsoft YaHei", Arial, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  font-size: 14px;
-  color: #1f2230;
-}
-
-.paper-main {
-  width: 210mm;
-  margin: 0 auto;
-  color: #1f2230;
-}
-.paper-a4 {
-  width: 210mm;
-  height: 297mm;
-  padding: 40px;
-  overflow: hidden;
-  page-break-after: always;
-}
-.paper-h1 {
-  font-size: 24px;
-  text-align: center;
-  line-height: 1;
-  padding-top: 20px;
-  padding-bottom: 30px;
-}
-.paper-base {
-  margin-bottom: 30px;
-}
-.paper-row {
-  margin: 0 -5px 10px;
-}
-.paper-item {
-  display: inline-block;
-  vertical-align: top;
-  width: 50%;
-  padding: 0 5px;
-}
-.paper-item > span:first-child {
-  float: left;
-  width: 96px;
-  text-align: right;
-}
-.paper-item > span:last-child {
-  display: block;
-  margin-left: 96px;
-}
-
-.paper-table {
-  width: 100%;
-  border-spacing: 0;
-  border-collapse: collapse;
-  margin-bottom: 40px;
-  text-align: center;
-}
-.paper-table th {
-  padding: 8px;
-  line-height: 20px;
-  letter-spacing: 1px;
-  border: 1px solid #1f2230;
-}
-.paper-table td {
-  padding: 8px;
-  line-height: 20px;
-  border: 1px solid #1f2230;
-}
+body,
+div,
+h1,
+p,
+tr,
+th,
+td,
+span {
+  margin: 0;
+  padding: 0;
+  box-sizing: border-box;
+  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+}
+
+body {
+  font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
+    "Microsoft YaHei", Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  font-size: 14px;
+  color: #1f2230;
+}
+
+.paper-main {
+  width: 210mm;
+  margin: 0 auto;
+  color: #1f2230;
+}
+.paper-a4 {
+  width: 210mm;
+  height: 297mm;
+  padding: 40px;
+  overflow: hidden;
+  page-break-after: always;
+}
+.paper-h1 {
+  font-size: 24px;
+  text-align: center;
+  line-height: 1;
+  padding-top: 20px;
+  padding-bottom: 30px;
+}
+.paper-base {
+  margin-bottom: 30px;
+}
+.paper-row {
+  margin: 0 -5px 10px;
+}
+.paper-item {
+  display: inline-block;
+  vertical-align: top;
+  width: 50%;
+  padding: 0 5px;
+}
+.paper-item > span:first-child {
+  float: left;
+  width: 96px;
+  text-align: right;
+}
+.paper-item > span:last-child {
+  display: block;
+  margin-left: 96px;
+}
+
+.paper-table {
+  width: 100%;
+  border-spacing: 0;
+  border-collapse: collapse;
+  margin-bottom: 40px;
+  text-align: center;
+}
+.paper-table th {
+  padding: 8px;
+  line-height: 20px;
+  letter-spacing: 1px;
+  border: 1px solid #1f2230;
+}
+.paper-table td {
+  padding: 8px;
+  line-height: 20px;
+  border: 1px solid #1f2230;
+}

+ 42 - 42
src/assets/styles/variables.scss

@@ -1,42 +1,42 @@
-// color ------------------->
-$--color-text-dark: #1f2230 !default;
-$--color-text-dark-1: #434656 !default;
-$--color-text-gray: #6f7482 !default;
-$--color-text-gray-1: #7a7c87 !default;
-$--color-text-gray-2: #8b8fa1 !default;
-$--color-text-gray-3: #aaa !default;
-$--color-text-gray-4: #ccc !default;
-$--color-text-gray-5: #d3d5e0 !default;
-$--color-text-gray-6: #e0e1eb !default;
-$--color-text-gray-7: #f2f4fa !default;
-$--color-border: #eff0f5;
-$--color-background: #eff0f5;
-// status
-$--color-primary: #3a5ae5 !default;
-$--color-primary-light: mix(#fff, $--color-primary, 20%) !default;
-$--color-success: #3fcb98 !default;
-$--color-success-light: #32cf8a !default;
-$--color-warning: #ff9427 !default;
-$--color-danger: #fe5d4e !default;
-$--color-cyan: #2abcff !default;
-$--color-cyan-light: #5fc9fa !default;
-$--color-blue: #556dff !default;
-$--color-blue-white: #4f79ff !default;
-$--color-blue-dark: #172666 !default;
-$--color-purple: #9877ff !default;
-$--color-white: #ffffff;
-$--color-dark: #1f2230;
-
-// shadow
-$--shadow-light: 0 0 1px rgba(0, 0, 0, 0.15) !default;
-
-// size ------------------->
-$--font-size-base: 14px !default;
-$--font-size-medium: 16px !default;
-$--font-size-large: 18px !default;
-$--border-radius: 8px;
-$--border-radius-large: 12px;
-$--border-radius-huge: 20px;
-// font-family
-$--font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
-  "Microsoft YaHei", Arial, sans-serif;
+// color ------------------->
+$--color-text-dark: #1f2230 !default;
+$--color-text-dark-1: #434656 !default;
+$--color-text-gray: #6f7482 !default;
+$--color-text-gray-1: #7a7c87 !default;
+$--color-text-gray-2: #8b8fa1 !default;
+$--color-text-gray-3: #aaa !default;
+$--color-text-gray-4: #ccc !default;
+$--color-text-gray-5: #d3d5e0 !default;
+$--color-text-gray-6: #e0e1eb !default;
+$--color-text-gray-7: #f2f4fa !default;
+$--color-border: #eff0f5;
+$--color-background: #eff0f5;
+// status
+$--color-primary: #3a5ae5 !default;
+$--color-primary-light: mix(#fff, $--color-primary, 20%) !default;
+$--color-success: #3fcb98 !default;
+$--color-success-light: #32cf8a !default;
+$--color-warning: #ff9427 !default;
+$--color-danger: #fe5d4e !default;
+$--color-cyan: #2abcff !default;
+$--color-cyan-light: #5fc9fa !default;
+$--color-blue: #556dff !default;
+$--color-blue-white: #4f79ff !default;
+$--color-blue-dark: #172666 !default;
+$--color-purple: #9877ff !default;
+$--color-white: #ffffff;
+$--color-dark: #1f2230;
+
+// shadow
+$--shadow-light: 0 0 1px rgba(0, 0, 0, 0.15) !default;
+
+// size ------------------->
+$--font-size-base: 14px !default;
+$--font-size-medium: 16px !default;
+$--font-size-large: 18px !default;
+$--border-radius: 8px;
+$--border-radius-large: 12px;
+$--border-radius-huge: 20px;
+// font-family
+$--font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
+  "Microsoft YaHei", Arial, sans-serif;

+ 60 - 60
src/components/MoreText.vue

@@ -1,60 +1,60 @@
-<template>
-  <div class="more-text">
-    <span>{{ showContent }}</span>
-    <el-popover
-      v-if="moreContent"
-      placement="top"
-      width="300"
-      trigger="hover"
-      :content="moreContent"
-    >
-      <el-button
-        class="ml-1"
-        type="text"
-        icon="el-icon-more"
-        slot="reference"
-      ></el-button>
-    </el-popover>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "more-text",
-  props: {
-    data: {
-      type: Array,
-      default() {
-        return [];
-      }
-    },
-    showCount: {
-      type: Number,
-      default: 1
-    }
-  },
-  data() {
-    return {
-      showContent: "",
-      moreContent: ""
-    };
-  },
-  watch: {
-    data(val) {
-      this.initData();
-    }
-  },
-  created() {
-    this.initData();
-  },
-  methods: {
-    initData() {
-      this.showContent = this.data.slice(0, this.showCount).join(",");
-      this.moreContent = "";
-      if (this.data.length > this.showCount) {
-        this.moreContent = this.data.join(",");
-      }
-    }
-  }
-};
-</script>
+<template>
+  <div class="more-text">
+    <span>{{ showContent }}</span>
+    <el-popover
+      v-if="moreContent"
+      placement="top"
+      width="300"
+      trigger="hover"
+      :content="moreContent"
+    >
+      <el-button
+        class="ml-1"
+        type="text"
+        icon="el-icon-more"
+        slot="reference"
+      ></el-button>
+    </el-popover>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "more-text",
+  props: {
+    data: {
+      type: Array,
+      default() {
+        return [];
+      },
+    },
+    showCount: {
+      type: Number,
+      default: 1,
+    },
+  },
+  data() {
+    return {
+      showContent: "",
+      moreContent: "",
+    };
+  },
+  watch: {
+    data(val) {
+      this.initData();
+    },
+  },
+  created() {
+    this.initData();
+  },
+  methods: {
+    initData() {
+      this.showContent = this.data.slice(0, this.showCount).join(",");
+      this.moreContent = "";
+      if (this.data.length > this.showCount) {
+        this.moreContent = this.data.join(",");
+      }
+    },
+  },
+};
+</script>

+ 247 - 247
src/components/SimpleImagePreview.vue

@@ -1,247 +1,247 @@
-<template>
-  <el-dialog
-    :class="[prefixCls, 'opacity-dialog']"
-    :visible.sync="modalIsShow"
-    title="图片预览"
-    fullscreen
-    append-to-body
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-  >
-    <div slot="title"></div>
-    <div slot="footer"></div>
-    <div :class="[`${prefixCls}-close`]" @click="cancel">
-      <i class="el-icon-circle-close"></i>
-    </div>
-
-    <div :class="[`${prefixCls}-body`]" ref="ReviewBody">
-      <div
-        v-if="!simple"
-        :class="[`${prefixCls}-guide`, `${prefixCls}-guide-prev`]"
-        @click.stop="showPrev"
-      >
-        <i class="el-icon-arrow-left"></i>
-      </div>
-      <div
-        v-if="!simple"
-        :class="[`${prefixCls}-guide`, `${prefixCls}-guide-next`]"
-        @click.stop="showNext"
-      >
-        <i class="el-icon-arrow-right"></i>
-      </div>
-      <div
-        :class="[
-          `${prefixCls}-imgs`,
-          { [`${prefixCls}-imgs-nosition`]: nosition }
-        ]"
-        :style="styles"
-        v-if="modalIsShow"
-      >
-        <img
-          :key="curImage.url"
-          :src="curImage.url"
-          :alt="curImage.filename"
-          ref="PreviewImgDetail"
-          @load="reizeImage"
-        />
-      </div>
-      <div :class="[`${prefixCls}-none`]" v-if="!curImage.url">
-        <i class="el-icon-picture"></i>
-        <p>暂无数据</p>
-      </div>
-
-      <div :class="[`${prefixCls}-loading`]" v-show="loading">
-        <i class="el-icon-loading"></i>
-      </div>
-    </div>
-
-    <div v-if="!simple" :class="[`${prefixCls}-footer`]">
-      <ul>
-        <li title="旋转" @click.stop="toRotate">
-          <i class="el-icon-refresh-right"></i>
-        </li>
-      </ul>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-const prefixCls = "cc-image-preview";
-
-export default {
-  name: "simple-image-preview",
-  props: {
-    curImage: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    simple: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      prefixCls,
-      modalIsShow: false,
-      styles: { width: "", height: "", top: "", left: "", transform: "" },
-      initWidth: 500,
-      transform: {
-        scale: 1,
-        rotate: 0
-      },
-      loading: false,
-      loadingSetT: null,
-      nosition: false
-    };
-  },
-  watch: {
-    "curImage.url": {
-      handler(val) {
-        if (val) {
-          this.loadingSetT = setTimeout(() => {
-            this.loading = true;
-          }, 300);
-          this.styles = {
-            width: "",
-            height: "",
-            top: "",
-            left: "",
-            transform: ""
-          };
-        }
-      }
-    }
-  },
-  methods: {
-    reizeImage() {
-      if (this.loadingSetT) clearTimeout(this.loadingSetT);
-
-      const imgDom = this.$refs.PreviewImgDetail;
-      const { naturalWidth, naturalHeight } = imgDom;
-      const imageSize = this.getImageSizePos({
-        win: {
-          width: this.$refs.ReviewBody.clientWidth,
-          height: this.$refs.ReviewBody.clientHeight
-        },
-        img: {
-          width: naturalWidth,
-          height: naturalHeight
-        },
-        rotate: 0
-      });
-
-      this.styles = Object.assign(this.styles, {
-        width: imageSize.width + "px",
-        height: imageSize.height + "px",
-        top: imageSize.top + "px",
-        left: imageSize.left + "px",
-        marginLeft: "auto",
-        transform: "none"
-      });
-      this.transform = {
-        scale: 1,
-        rotate: 0
-      };
-      this.loading = false;
-      setTimeout(() => {
-        this.nosition = false;
-      }, 100);
-    },
-    getImageSizePos({ win, img, rotate }) {
-      const imageSize = {
-        width: 0,
-        height: 0,
-        top: 0,
-        left: 0
-      };
-      const isHorizontal = !!(rotate % 180);
-
-      const rateWin = isHorizontal
-        ? win.height / win.width
-        : win.width / win.height;
-      const hwin = isHorizontal
-        ? {
-            width: win.height,
-            height: win.width
-          }
-        : win;
-
-      const rateImg = img.width / img.height;
-
-      if (rateImg <= rateWin) {
-        imageSize.height = Math.min(hwin.height, img.height);
-        imageSize.width = Math.floor(
-          (imageSize.height * img.width) / img.height
-        );
-      } else {
-        imageSize.width = Math.min(hwin.width, img.width);
-        imageSize.height = Math.floor(
-          (imageSize.width * img.height) / img.width
-        );
-      }
-      imageSize.left = (win.width - imageSize.width) / 2;
-      imageSize.top = (win.height - imageSize.height) / 2;
-      return imageSize;
-    },
-    cancel() {
-      this.modalIsShow = false;
-      this.$emit("on-close");
-    },
-    open() {
-      this.modalIsShow = true;
-    },
-    showPrev() {
-      this.$emit("on-prev");
-      // this.initData();
-    },
-    showNext() {
-      this.$emit("on-next");
-      // this.initData();
-    },
-    // dome-move
-    setStyleTransform() {
-      const { scale, rotate } = this.transform;
-      this.styles.transform = `scale(${scale}, ${scale}) rotate(${rotate}deg)`;
-    },
-    toRotate() {
-      this.transform.rotate = this.transform.rotate + 90;
-      this.setStyleTransform();
-      // 调整图片尺寸
-      const { naturalWidth, naturalHeight } = this.$refs.PreviewImgDetail;
-      const imageSize = this.getImageSizePos({
-        win: {
-          width: this.$refs.ReviewBody.clientWidth,
-          height: this.$refs.ReviewBody.clientHeight
-        },
-        img: {
-          width: naturalWidth,
-          height: naturalHeight
-        },
-        rotate: this.transform.rotate
-      });
-
-      this.styles = Object.assign(this.styles, {
-        width: imageSize.width + "px",
-        height: imageSize.height + "px",
-        top: imageSize.top + "px",
-        left: imageSize.left + "px"
-      });
-      // 360度无缝切换到0度
-      if (this.transform.rotate >= 360) {
-        setTimeout(() => {
-          this.nosition = true;
-          this.transform.rotate = 0;
-          this.setStyleTransform();
-          setTimeout(() => {
-            this.nosition = false;
-          }, 100);
-        }, 200);
-        // 200ms当次旋转动画持续时间
-      }
-    }
-  }
-};
-</script>
+<template>
+  <el-dialog
+    :class="[prefixCls, 'opacity-dialog']"
+    :visible.sync="modalIsShow"
+    title="图片预览"
+    fullscreen
+    append-to-body
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+  >
+    <div slot="title"></div>
+    <div slot="footer"></div>
+    <div :class="[`${prefixCls}-close`]" @click="cancel">
+      <i class="el-icon-circle-close"></i>
+    </div>
+
+    <div :class="[`${prefixCls}-body`]" ref="ReviewBody">
+      <div
+        v-if="!simple"
+        :class="[`${prefixCls}-guide`, `${prefixCls}-guide-prev`]"
+        @click.stop="showPrev"
+      >
+        <i class="el-icon-arrow-left"></i>
+      </div>
+      <div
+        v-if="!simple"
+        :class="[`${prefixCls}-guide`, `${prefixCls}-guide-next`]"
+        @click.stop="showNext"
+      >
+        <i class="el-icon-arrow-right"></i>
+      </div>
+      <div
+        :class="[
+          `${prefixCls}-imgs`,
+          { [`${prefixCls}-imgs-nosition`]: nosition },
+        ]"
+        :style="styles"
+        v-if="modalIsShow"
+      >
+        <img
+          :key="curImage.url"
+          :src="curImage.url"
+          :alt="curImage.filename"
+          ref="PreviewImgDetail"
+          @load="reizeImage"
+        />
+      </div>
+      <div :class="[`${prefixCls}-none`]" v-if="!curImage.url">
+        <i class="el-icon-picture"></i>
+        <p>暂无数据</p>
+      </div>
+
+      <div :class="[`${prefixCls}-loading`]" v-show="loading">
+        <i class="el-icon-loading"></i>
+      </div>
+    </div>
+
+    <div v-if="!simple" :class="[`${prefixCls}-footer`]">
+      <ul>
+        <li title="旋转" @click.stop="toRotate">
+          <i class="el-icon-refresh-right"></i>
+        </li>
+      </ul>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+const prefixCls = "cc-image-preview";
+
+export default {
+  name: "simple-image-preview",
+  props: {
+    curImage: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    simple: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      prefixCls,
+      modalIsShow: false,
+      styles: { width: "", height: "", top: "", left: "", transform: "" },
+      initWidth: 500,
+      transform: {
+        scale: 1,
+        rotate: 0,
+      },
+      loading: false,
+      loadingSetT: null,
+      nosition: false,
+    };
+  },
+  watch: {
+    "curImage.url": {
+      handler(val) {
+        if (val) {
+          this.loadingSetT = setTimeout(() => {
+            this.loading = true;
+          }, 300);
+          this.styles = {
+            width: "",
+            height: "",
+            top: "",
+            left: "",
+            transform: "",
+          };
+        }
+      },
+    },
+  },
+  methods: {
+    reizeImage() {
+      if (this.loadingSetT) clearTimeout(this.loadingSetT);
+
+      const imgDom = this.$refs.PreviewImgDetail;
+      const { naturalWidth, naturalHeight } = imgDom;
+      const imageSize = this.getImageSizePos({
+        win: {
+          width: this.$refs.ReviewBody.clientWidth,
+          height: this.$refs.ReviewBody.clientHeight,
+        },
+        img: {
+          width: naturalWidth,
+          height: naturalHeight,
+        },
+        rotate: 0,
+      });
+
+      this.styles = Object.assign(this.styles, {
+        width: imageSize.width + "px",
+        height: imageSize.height + "px",
+        top: imageSize.top + "px",
+        left: imageSize.left + "px",
+        marginLeft: "auto",
+        transform: "none",
+      });
+      this.transform = {
+        scale: 1,
+        rotate: 0,
+      };
+      this.loading = false;
+      setTimeout(() => {
+        this.nosition = false;
+      }, 100);
+    },
+    getImageSizePos({ win, img, rotate }) {
+      const imageSize = {
+        width: 0,
+        height: 0,
+        top: 0,
+        left: 0,
+      };
+      const isHorizontal = !!(rotate % 180);
+
+      const rateWin = isHorizontal
+        ? win.height / win.width
+        : win.width / win.height;
+      const hwin = isHorizontal
+        ? {
+            width: win.height,
+            height: win.width,
+          }
+        : win;
+
+      const rateImg = img.width / img.height;
+
+      if (rateImg <= rateWin) {
+        imageSize.height = Math.min(hwin.height, img.height);
+        imageSize.width = Math.floor(
+          (imageSize.height * img.width) / img.height
+        );
+      } else {
+        imageSize.width = Math.min(hwin.width, img.width);
+        imageSize.height = Math.floor(
+          (imageSize.width * img.height) / img.width
+        );
+      }
+      imageSize.left = (win.width - imageSize.width) / 2;
+      imageSize.top = (win.height - imageSize.height) / 2;
+      return imageSize;
+    },
+    cancel() {
+      this.modalIsShow = false;
+      this.$emit("on-close");
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    showPrev() {
+      this.$emit("on-prev");
+      // this.initData();
+    },
+    showNext() {
+      this.$emit("on-next");
+      // this.initData();
+    },
+    // dome-move
+    setStyleTransform() {
+      const { scale, rotate } = this.transform;
+      this.styles.transform = `scale(${scale}, ${scale}) rotate(${rotate}deg)`;
+    },
+    toRotate() {
+      this.transform.rotate = this.transform.rotate + 90;
+      this.setStyleTransform();
+      // 调整图片尺寸
+      const { naturalWidth, naturalHeight } = this.$refs.PreviewImgDetail;
+      const imageSize = this.getImageSizePos({
+        win: {
+          width: this.$refs.ReviewBody.clientWidth,
+          height: this.$refs.ReviewBody.clientHeight,
+        },
+        img: {
+          width: naturalWidth,
+          height: naturalHeight,
+        },
+        rotate: this.transform.rotate,
+      });
+
+      this.styles = Object.assign(this.styles, {
+        width: imageSize.width + "px",
+        height: imageSize.height + "px",
+        top: imageSize.top + "px",
+        left: imageSize.left + "px",
+      });
+      // 360度无缝切换到0度
+      if (this.transform.rotate >= 360) {
+        setTimeout(() => {
+          this.nosition = true;
+          this.transform.rotate = 0;
+          this.setStyleTransform();
+          setTimeout(() => {
+            this.nosition = false;
+          }, 100);
+        }, 200);
+        // 200ms当次旋转动画持续时间
+      }
+    },
+  },
+};
+</script>

+ 161 - 164
src/components/UploadButton.vue

@@ -1,164 +1,161 @@
-<template>
-  <el-upload
-    :action="uploadUrl"
-    :headers="headers"
-    :max-size="maxSize"
-    :format="format"
-    :accept="accept"
-    :data="uploadDataDict"
-    :before-upload="handleBeforeUpload"
-    :on-error="handleError"
-    :on-success="handleSuccess"
-    :http-request="upload"
-    :disabled="disabled"
-    :show-file-list="false"
-    style="display:inline-block;margin: 0 10px;"
-    ref="UploadComp"
-  >
-    <el-button
-      :type="btnType"
-      :icon="btnIcon"
-      :loading="loading"
-      :disabled="disabled"
-      >{{ btnContent }}</el-button
-    >
-  </el-upload>
-</template>
-
-<script>
-import { fileMD5 } from "../plugins/md5";
-import { $post } from "@/plugins/axios";
-
-export default {
-  name: "upload-button",
-  props: {
-    btnIcon: {
-      type: String
-    },
-    btnType: {
-      type: String,
-      default: "default"
-    },
-    btnContent: {
-      type: String
-    },
-    accept: {
-      type: String
-    },
-    format: {
-      type: Array,
-      default() {
-        return ["jpg", "jpeg", "png"];
-      }
-    },
-    uploadUrl: {
-      type: String,
-      required: true
-    },
-    uploadData: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    maxSize: {
-      type: Number,
-      default: 20 * 1024 * 1024
-    },
-    addFilenameParam: {
-      type: String,
-      default: "filename"
-    },
-    disabled: { type: Boolean, default: false }
-  },
-  data() {
-    return {
-      headers: {
-        md5: ""
-      },
-      res: {},
-      loading: false,
-      uploadDataDict: {}
-    };
-  },
-  methods: {
-    checkFileFormat(fileType) {
-      const _file_format = fileType
-        .split(".")
-        .pop()
-        .toLocaleLowerCase();
-      return this.format.length
-        ? this.format.some(item => item.toLocaleLowerCase() === _file_format)
-        : true;
-    },
-    async handleBeforeUpload(file) {
-      this.uploadDataDict = {
-        ...this.uploadData
-      };
-      this.uploadDataDict[this.addFilenameParam] = file.name;
-
-      if (file.size > this.maxSize) {
-        this.handleExceededSize();
-        return Promise.reject();
-      }
-
-      if (!this.checkFileFormat(file.name)) {
-        this.handleFormatError();
-        return Promise.reject();
-      }
-
-      const md5 = await fileMD5(file);
-      this.headers["md5"] = md5;
-      this.loading = true;
-
-      return true;
-    },
-    upload(options) {
-      let formData = new FormData();
-      Object.entries(options.data).forEach(([k, v]) => {
-        formData.append(k, v);
-      });
-      formData.append("file", options.file);
-      this.$emit("uploading");
-
-      return $post(options.action, formData, { headers: options.headers });
-    },
-    handleError(error) {
-      this.loading = false;
-      this.res = {
-        success: false,
-        message: error.message
-      };
-      this.$emit("upload-error", error);
-    },
-    handleSuccess(responseData) {
-      this.loading = false;
-      this.res = {
-        success: true,
-        message: "导入成功!"
-      };
-      this.$emit("upload-success", {
-        data: responseData,
-        filename: this.uploadDataDict[this.addFilenameParam]
-      });
-    },
-    handleFormatError() {
-      const content = "只支持文件格式为" + this.format.join("/");
-      this.res = {
-        success: false,
-        message: content
-      };
-      this.$emit("valid-error", this.res);
-    },
-    handleExceededSize() {
-      const content =
-        "文件大小不能超过" + Math.floor(this.maxSize / (1024 * 1024)) + "M";
-      this.res = {
-        success: false,
-        message: content
-      };
-      this.$emit("valid-error", this.res);
-    }
-  }
-};
-</script>
+<template>
+  <el-upload
+    :action="uploadUrl"
+    :headers="headers"
+    :max-size="maxSize"
+    :format="format"
+    :accept="accept"
+    :data="uploadDataDict"
+    :before-upload="handleBeforeUpload"
+    :on-error="handleError"
+    :on-success="handleSuccess"
+    :http-request="upload"
+    :disabled="disabled"
+    :show-file-list="false"
+    style="display: inline-block; margin: 0 10px"
+    ref="UploadComp"
+  >
+    <el-button
+      :type="btnType"
+      :icon="btnIcon"
+      :loading="loading"
+      :disabled="disabled"
+      >{{ btnContent }}</el-button
+    >
+  </el-upload>
+</template>
+
+<script>
+import { fileMD5 } from "../plugins/md5";
+import { $post } from "@/plugins/axios";
+
+export default {
+  name: "upload-button",
+  props: {
+    btnIcon: {
+      type: String,
+    },
+    btnType: {
+      type: String,
+      default: "default",
+    },
+    btnContent: {
+      type: String,
+    },
+    accept: {
+      type: String,
+    },
+    format: {
+      type: Array,
+      default() {
+        return ["jpg", "jpeg", "png"];
+      },
+    },
+    uploadUrl: {
+      type: String,
+      required: true,
+    },
+    uploadData: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    maxSize: {
+      type: Number,
+      default: 20 * 1024 * 1024,
+    },
+    addFilenameParam: {
+      type: String,
+      default: "filename",
+    },
+    disabled: { type: Boolean, default: false },
+  },
+  data() {
+    return {
+      headers: {
+        md5: "",
+      },
+      res: {},
+      loading: false,
+      uploadDataDict: {},
+    };
+  },
+  methods: {
+    checkFileFormat(fileType) {
+      const _file_format = fileType.split(".").pop().toLocaleLowerCase();
+      return this.format.length
+        ? this.format.some((item) => item.toLocaleLowerCase() === _file_format)
+        : true;
+    },
+    async handleBeforeUpload(file) {
+      this.uploadDataDict = {
+        ...this.uploadData,
+      };
+      this.uploadDataDict[this.addFilenameParam] = file.name;
+
+      if (file.size > this.maxSize) {
+        this.handleExceededSize();
+        return Promise.reject();
+      }
+
+      if (!this.checkFileFormat(file.name)) {
+        this.handleFormatError();
+        return Promise.reject();
+      }
+
+      const md5 = await fileMD5(file);
+      this.headers["md5"] = md5;
+      this.loading = true;
+
+      return true;
+    },
+    upload(options) {
+      let formData = new FormData();
+      Object.entries(options.data).forEach(([k, v]) => {
+        formData.append(k, v);
+      });
+      formData.append("file", options.file);
+      this.$emit("uploading");
+
+      return $post(options.action, formData, { headers: options.headers });
+    },
+    handleError(error) {
+      this.loading = false;
+      this.res = {
+        success: false,
+        message: error.message,
+      };
+      this.$emit("upload-error", error);
+    },
+    handleSuccess(responseData) {
+      this.loading = false;
+      this.res = {
+        success: true,
+        message: "导入成功!",
+      };
+      this.$emit("upload-success", {
+        data: responseData,
+        filename: this.uploadDataDict[this.addFilenameParam],
+      });
+    },
+    handleFormatError() {
+      const content = "只支持文件格式为" + this.format.join("/");
+      this.res = {
+        success: false,
+        message: content,
+      };
+      this.$emit("valid-error", this.res);
+    },
+    handleExceededSize() {
+      const content =
+        "文件大小不能超过" + Math.floor(this.maxSize / (1024 * 1024)) + "M";
+      this.res = {
+        success: false,
+        message: content,
+      };
+      this.$emit("valid-error", this.res);
+    },
+  },
+};
+</script>

+ 127 - 130
src/components/UploadFetchFile.vue

@@ -1,130 +1,127 @@
-<template>
-  <div class="upload-file-view">
-    <el-input
-      :style="{ width: inputWidth }"
-      v-model.trim="attachmentName"
-      placeholder="文件名称"
-      readonly
-    ></el-input>
-    <el-upload
-      action="upload-url"
-      :on-change="handleFileChange"
-      :show-file-list="false"
-      :auto-upload="false"
-      :disabled="disabled"
-      style="display:inline-block;margin: 0 10px;"
-      ref="UploadComp"
-    >
-      <el-button type="primary" :disabled="disabled" :loading="loading"
-        >选择</el-button
-      >
-    </el-upload>
-  </div>
-</template>
-
-<script>
-import { fileMD5 } from "@/plugins/md5";
-
-export default {
-  name: "upload-file-view",
-  props: {
-    inputWidth: {
-      type: String,
-      default: "200px"
-    },
-    format: {
-      type: Array,
-      default() {
-        return ["xls", "xlsx"];
-      }
-    },
-    maxSize: {
-      type: Number,
-      default: 20 * 1024 * 1024
-    },
-    disabled: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      attachmentName: "",
-      canUpload: false,
-      loading: false,
-      res: {}
-    };
-  },
-  methods: {
-    checkFileFormat(fileType) {
-      const _file_format = fileType
-        .split(".")
-        .pop()
-        .toLocaleLowerCase();
-      return this.format.some(
-        item => item.toLocaleLowerCase() === _file_format
-      );
-    },
-    async handleFileChange(file) {
-      console.log(file);
-      this.attachmentName = file.name;
-      this.canUpload = file.status === "ready";
-
-      if (file.size > this.maxSize) {
-        this.handleExceededSize();
-        return Promise.reject();
-      }
-
-      if (!this.checkFileFormat(file.name)) {
-        this.handleFormatError();
-        return Promise.reject();
-      }
-      this.$emit("valid-change", { success: true });
-
-      const md5 = await fileMD5(file.raw);
-
-      this.$emit("file-change", {
-        md5,
-        filename: file.name,
-        file: file.raw
-      });
-    },
-    // upload(options) {
-    //   let formData = new FormData();
-    //   Object.entries(options.data).forEach(([k, v]) => {
-    //     formData.append(k, v);
-    //   });
-    //   formData.append("file", options.file);
-    //   this.$emit("uploading");
-
-    //   return $post(options.action, formData, { headers: options.headers });
-    // },
-    handleFormatError() {
-      const content = "只支持文件格式为" + this.format.join("/");
-      this.res = {
-        success: false,
-        message: content
-      };
-      this.$emit("valid-change", this.res);
-    },
-    handleExceededSize() {
-      const content =
-        "文件大小不能超过" + Math.floor(this.maxSize / 1024) + "M";
-      this.res = {
-        success: false,
-        message: content
-      };
-      this.$emit("valid-change", this.res);
-    },
-    setAttachmentName(name) {
-      this.attachmentName = name;
-    }
-  }
-};
-</script>
-
-<style scoped>
-.upload-file-view {
-  display: inline-block;
-}
-</style>
+<template>
+  <div class="upload-file-view">
+    <el-input
+      :style="{ width: inputWidth }"
+      v-model.trim="attachmentName"
+      placeholder="文件名称"
+      readonly
+    ></el-input>
+    <el-upload
+      action="upload-url"
+      :on-change="handleFileChange"
+      :show-file-list="false"
+      :auto-upload="false"
+      :disabled="disabled"
+      style="display: inline-block; margin: 0 10px"
+      ref="UploadComp"
+    >
+      <el-button type="primary" :disabled="disabled" :loading="loading"
+        >选择</el-button
+      >
+    </el-upload>
+  </div>
+</template>
+
+<script>
+import { fileMD5 } from "@/plugins/md5";
+
+export default {
+  name: "upload-file-view",
+  props: {
+    inputWidth: {
+      type: String,
+      default: "200px",
+    },
+    format: {
+      type: Array,
+      default() {
+        return ["xls", "xlsx"];
+      },
+    },
+    maxSize: {
+      type: Number,
+      default: 20 * 1024 * 1024,
+    },
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      attachmentName: "",
+      canUpload: false,
+      loading: false,
+      res: {},
+    };
+  },
+  methods: {
+    checkFileFormat(fileType) {
+      const _file_format = fileType.split(".").pop().toLocaleLowerCase();
+      return this.format.some(
+        (item) => item.toLocaleLowerCase() === _file_format
+      );
+    },
+    async handleFileChange(file) {
+      console.log(file);
+      this.attachmentName = file.name;
+      this.canUpload = file.status === "ready";
+
+      if (file.size > this.maxSize) {
+        this.handleExceededSize();
+        return Promise.reject();
+      }
+
+      if (!this.checkFileFormat(file.name)) {
+        this.handleFormatError();
+        return Promise.reject();
+      }
+      this.$emit("valid-change", { success: true });
+
+      const md5 = await fileMD5(file.raw);
+
+      this.$emit("file-change", {
+        md5,
+        filename: file.name,
+        file: file.raw,
+      });
+    },
+    // upload(options) {
+    //   let formData = new FormData();
+    //   Object.entries(options.data).forEach(([k, v]) => {
+    //     formData.append(k, v);
+    //   });
+    //   formData.append("file", options.file);
+    //   this.$emit("uploading");
+
+    //   return $post(options.action, formData, { headers: options.headers });
+    // },
+    handleFormatError() {
+      const content = "只支持文件格式为" + this.format.join("/");
+      this.res = {
+        success: false,
+        message: content,
+      };
+      this.$emit("valid-change", this.res);
+    },
+    handleExceededSize() {
+      const content =
+        "文件大小不能超过" + Math.floor(this.maxSize / 1024) + "M";
+      this.res = {
+        success: false,
+        message: content,
+      };
+      this.$emit("valid-change", this.res);
+    },
+    setAttachmentName(name) {
+      this.attachmentName = name;
+    },
+  },
+};
+</script>
+
+<style scoped>
+.upload-file-view {
+  display: inline-block;
+}
+</style>

+ 105 - 105
src/components/UploadFileDialog.vue

@@ -1,105 +1,105 @@
-<template>
-  <el-dialog
-    class="upload-file-dialog"
-    :visible.sync="modalIsShow"
-    title="上传文件"
-    top="10vh"
-    width="710px"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    @opened="visibleChange"
-  >
-    <div class="file-upload-body">
-      <upload-file-view
-        input-width="270px"
-        :format="format"
-        :upload-url="uploadUrl"
-        @valid-error="validError"
-        @upload-success="uploadSuccess"
-        ref="UploadFileView"
-      ></upload-file-view>
-      <el-button @click="toPreview" style="margin-left: 10px;">预览</el-button>
-    </div>
-    <div slot="footer" style="text-align: right">
-      <el-button type="primary" @click="confirm">保存</el-button>
-      <el-button type="danger" @click="cancel" plain>返回</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import UploadFileView from "./UploadFileView";
-import { attachmentPreview } from "@/modules/login/api";
-
-export default {
-  name: "upload-file-dialog",
-  components: { UploadFileView },
-  props: {
-    paperAttachment: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    format: {
-      type: Array,
-      default() {
-        return ["xls", "xlsx"];
-      }
-    }
-  },
-  data() {
-    return {
-      modalIsShow: false,
-      attachment: {},
-      // import
-      uploadUrl: "/api/print/basic/sys/saveAttachment"
-    };
-  },
-  methods: {
-    visibleChange() {
-      this.$refs.UploadFileView.setAttachmentName(
-        `${this.paperAttachment.filename || ""}`
-      );
-      this.attachment = { ...this.paperAttachment };
-    },
-    // upload-handler
-    validError(errorData) {
-      this.$message.error(errorData.message);
-    },
-    uploadSuccess(data) {
-      this.$message.success("上传成功!");
-      let infos = {
-        attachmentId: data.id,
-        filename: data.filename
-      };
-      this.attachment = Object.assign(this.attachment, infos);
-    },
-    cancel() {
-      this.modalIsShow = false;
-    },
-    open() {
-      this.modalIsShow = true;
-    },
-    confirm() {
-      this.$emit("confirm", this.attachment);
-      this.cancel();
-    },
-    async toPreview() {
-      if (!this.attachment.attachmentId) {
-        this.$message.error("请先上传附件!");
-        return;
-      }
-      const data = await attachmentPreview(this.attachment.attachmentId);
-      window.open(data.url);
-    }
-  }
-};
-</script>
-
-<style lang="css" scoped>
-.file-upload-body {
-  min-height: 150px;
-}
-</style>
+<template>
+  <el-dialog
+    class="upload-file-dialog"
+    :visible.sync="modalIsShow"
+    title="上传文件"
+    top="10vh"
+    width="710px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @opened="visibleChange"
+  >
+    <div class="file-upload-body">
+      <upload-file-view
+        input-width="270px"
+        :format="format"
+        :upload-url="uploadUrl"
+        @valid-error="validError"
+        @upload-success="uploadSuccess"
+        ref="UploadFileView"
+      ></upload-file-view>
+      <el-button @click="toPreview" style="margin-left: 10px">预览</el-button>
+    </div>
+    <div slot="footer" style="text-align: right">
+      <el-button type="primary" @click="confirm">保存</el-button>
+      <el-button type="danger" @click="cancel" plain>返回</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import UploadFileView from "./UploadFileView";
+import { attachmentPreview } from "@/modules/login/api";
+
+export default {
+  name: "upload-file-dialog",
+  components: { UploadFileView },
+  props: {
+    paperAttachment: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    format: {
+      type: Array,
+      default() {
+        return ["xls", "xlsx"];
+      },
+    },
+  },
+  data() {
+    return {
+      modalIsShow: false,
+      attachment: {},
+      // import
+      uploadUrl: "/api/print/basic/sys/saveAttachment",
+    };
+  },
+  methods: {
+    visibleChange() {
+      this.$refs.UploadFileView.setAttachmentName(
+        `${this.paperAttachment.filename || ""}`
+      );
+      this.attachment = { ...this.paperAttachment };
+    },
+    // upload-handler
+    validError(errorData) {
+      this.$message.error(errorData.message);
+    },
+    uploadSuccess(data) {
+      this.$message.success("上传成功!");
+      let infos = {
+        attachmentId: data.id,
+        filename: data.filename,
+      };
+      this.attachment = Object.assign(this.attachment, infos);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    confirm() {
+      this.$emit("confirm", this.attachment);
+      this.cancel();
+    },
+    async toPreview() {
+      if (!this.attachment.attachmentId) {
+        this.$message.error("请先上传附件!");
+        return;
+      }
+      const data = await attachmentPreview(this.attachment.attachmentId);
+      window.open(data.url);
+    },
+  },
+};
+</script>
+
+<style lang="css" scoped>
+.file-upload-body {
+  min-height: 150px;
+}
+</style>

+ 199 - 202
src/components/UploadFileView.vue

@@ -1,202 +1,199 @@
-<template>
-  <div class="upload-file-view">
-    <el-input
-      :style="{ width: inputWidth }"
-      v-model.trim="attachmentName"
-      placeholder="文件名称"
-      readonly
-    ></el-input>
-    <el-upload
-      :action="uploadUrl"
-      :headers="headers"
-      :max-size="maxSize"
-      :format="format"
-      :data="uploadDataDict"
-      :on-change="handleFileChange"
-      :before-upload="handleBeforeUpload"
-      :on-error="handleError"
-      :on-success="handleSuccess"
-      :on-progress="handleProgress"
-      :http-request="upload"
-      :show-file-list="false"
-      :disabled="disabled"
-      style="display:inline-block;margin: 0 10px;"
-      ref="UploadComp"
-    >
-      <el-button type="primary" :disabled="disabled" :loading="loading"
-        >选择</el-button
-      >
-    </el-upload>
-    <el-button
-      type="primary"
-      @click="startUpload"
-      v-if="canUpload && !autoUpload"
-      :loading="loading"
-      style="margin-right: 10px;"
-      >开始上传</el-button
-    >
-  </div>
-</template>
-
-<script>
-import { fileMD5 } from "@/plugins/md5";
-import { $post } from "@/plugins/axios";
-
-export default {
-  name: "upload-file-view",
-  props: {
-    inputWidth: {
-      type: String,
-      default: "400px"
-    },
-    format: {
-      type: Array,
-      default() {
-        return ["xls", "xlsx"];
-      }
-    },
-    uploadUrl: {
-      type: String,
-      required: true
-    },
-    uploadData: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    maxSize: {
-      type: Number,
-      default: 20 * 1024 * 1024
-    },
-    addFilenameParam: {
-      type: String,
-      default: "filename"
-    },
-    autoUpload: {
-      type: Boolean,
-      default: true
-    },
-    disabled: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      attachmentName: "",
-      canUpload: false,
-      loading: false,
-      uploadDataDict: {},
-      headers: {
-        md5: ""
-      },
-      res: {}
-    };
-  },
-  methods: {
-    startUpload() {
-      this.loading = true;
-      this.$refs.UploadComp.submit();
-    },
-    checkFileFormat(fileType) {
-      const _file_format = fileType
-        .split(".")
-        .pop()
-        .toLocaleLowerCase();
-      return this.format.some(
-        item => item.toLocaleLowerCase() === _file_format
-      );
-    },
-    handleFileChange(file) {
-      this.attachmentName = file.name;
-      this.canUpload = file.status === "ready";
-    },
-    async handleBeforeUpload(file) {
-      this.uploadDataDict = {
-        ...this.uploadData
-      };
-      this.uploadDataDict[this.addFilenameParam] = file.name;
-
-      if (file.size > this.maxSize) {
-        this.handleExceededSize();
-        return Promise.reject();
-      }
-
-      if (!this.checkFileFormat(file.name)) {
-        this.handleFormatError();
-        return Promise.reject();
-      }
-
-      const md5 = await fileMD5(file);
-      this.headers["md5"] = md5;
-
-      if (this.autoUpload) this.loading = true;
-
-      return this.autoUpload;
-    },
-    upload(options) {
-      let formData = new FormData();
-      Object.entries(options.data).forEach(([k, v]) => {
-        formData.append(k, v);
-      });
-      formData.append("file", options.file);
-      this.$emit("uploading");
-
-      return $post(options.action, formData, { headers: options.headers });
-    },
-    handleError(error) {
-      this.canUpload = false;
-      this.loading = false;
-      this.res = {
-        success: false,
-        message: error.message
-      };
-      this.$emit("upload-error", error);
-    },
-    handleSuccess(responseData) {
-      this.canUpload = false;
-      this.loading = false;
-      this.res = {
-        success: true,
-        message: "导入成功!"
-      };
-      this.$emit("upload-success", {
-        ...responseData,
-        filename: this.uploadDataDict[this.addFilenameParam]
-      });
-    },
-    handleProgress() {
-      this.loading = true;
-    },
-    handleFormatError() {
-      const content = "只支持文件格式为" + this.format.join("/");
-      this.res = {
-        success: false,
-        message: content
-      };
-      this.loading = false;
-      this.$emit("valid-error", this.res);
-    },
-    handleExceededSize() {
-      const content =
-        "文件大小不能超过" + Math.floor(this.maxSize / 1024) + "M";
-      this.res = {
-        success: false,
-        message: content
-      };
-      this.loading = false;
-      this.$emit("valid-error", this.res);
-    },
-    setAttachmentName(name) {
-      this.attachmentName = name;
-    }
-  }
-};
-</script>
-
-<style scoped>
-.upload-file-view {
-  display: inline-block;
-}
-</style>
+<template>
+  <div class="upload-file-view">
+    <el-input
+      :style="{ width: inputWidth }"
+      v-model.trim="attachmentName"
+      placeholder="文件名称"
+      readonly
+    ></el-input>
+    <el-upload
+      :action="uploadUrl"
+      :headers="headers"
+      :max-size="maxSize"
+      :format="format"
+      :data="uploadDataDict"
+      :on-change="handleFileChange"
+      :before-upload="handleBeforeUpload"
+      :on-error="handleError"
+      :on-success="handleSuccess"
+      :on-progress="handleProgress"
+      :http-request="upload"
+      :show-file-list="false"
+      :disabled="disabled"
+      style="display: inline-block; margin: 0 10px"
+      ref="UploadComp"
+    >
+      <el-button type="primary" :disabled="disabled" :loading="loading"
+        >选择</el-button
+      >
+    </el-upload>
+    <el-button
+      type="primary"
+      @click="startUpload"
+      v-if="canUpload && !autoUpload"
+      :loading="loading"
+      style="margin-right: 10px"
+      >开始上传</el-button
+    >
+  </div>
+</template>
+
+<script>
+import { fileMD5 } from "@/plugins/md5";
+import { $post } from "@/plugins/axios";
+
+export default {
+  name: "upload-file-view",
+  props: {
+    inputWidth: {
+      type: String,
+      default: "400px",
+    },
+    format: {
+      type: Array,
+      default() {
+        return ["xls", "xlsx"];
+      },
+    },
+    uploadUrl: {
+      type: String,
+      required: true,
+    },
+    uploadData: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    maxSize: {
+      type: Number,
+      default: 20 * 1024 * 1024,
+    },
+    addFilenameParam: {
+      type: String,
+      default: "filename",
+    },
+    autoUpload: {
+      type: Boolean,
+      default: true,
+    },
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      attachmentName: "",
+      canUpload: false,
+      loading: false,
+      uploadDataDict: {},
+      headers: {
+        md5: "",
+      },
+      res: {},
+    };
+  },
+  methods: {
+    startUpload() {
+      this.loading = true;
+      this.$refs.UploadComp.submit();
+    },
+    checkFileFormat(fileType) {
+      const _file_format = fileType.split(".").pop().toLocaleLowerCase();
+      return this.format.some(
+        (item) => item.toLocaleLowerCase() === _file_format
+      );
+    },
+    handleFileChange(file) {
+      this.attachmentName = file.name;
+      this.canUpload = file.status === "ready";
+    },
+    async handleBeforeUpload(file) {
+      this.uploadDataDict = {
+        ...this.uploadData,
+      };
+      this.uploadDataDict[this.addFilenameParam] = file.name;
+
+      if (file.size > this.maxSize) {
+        this.handleExceededSize();
+        return Promise.reject();
+      }
+
+      if (!this.checkFileFormat(file.name)) {
+        this.handleFormatError();
+        return Promise.reject();
+      }
+
+      const md5 = await fileMD5(file);
+      this.headers["md5"] = md5;
+
+      if (this.autoUpload) this.loading = true;
+
+      return this.autoUpload;
+    },
+    upload(options) {
+      let formData = new FormData();
+      Object.entries(options.data).forEach(([k, v]) => {
+        formData.append(k, v);
+      });
+      formData.append("file", options.file);
+      this.$emit("uploading");
+
+      return $post(options.action, formData, { headers: options.headers });
+    },
+    handleError(error) {
+      this.canUpload = false;
+      this.loading = false;
+      this.res = {
+        success: false,
+        message: error.message,
+      };
+      this.$emit("upload-error", error);
+    },
+    handleSuccess(responseData) {
+      this.canUpload = false;
+      this.loading = false;
+      this.res = {
+        success: true,
+        message: "导入成功!",
+      };
+      this.$emit("upload-success", {
+        ...responseData,
+        filename: this.uploadDataDict[this.addFilenameParam],
+      });
+    },
+    handleProgress() {
+      this.loading = true;
+    },
+    handleFormatError() {
+      const content = "只支持文件格式为" + this.format.join("/");
+      this.res = {
+        success: false,
+        message: content,
+      };
+      this.loading = false;
+      this.$emit("valid-error", this.res);
+    },
+    handleExceededSize() {
+      const content =
+        "文件大小不能超过" + Math.floor(this.maxSize / 1024) + "M";
+      this.res = {
+        success: false,
+        message: content,
+      };
+      this.loading = false;
+      this.$emit("valid-error", this.res);
+    },
+    setAttachmentName(name) {
+      this.attachmentName = name;
+    },
+  },
+};
+</script>
+
+<style scoped>
+.upload-file-view {
+  display: inline-block;
+}
+</style>

+ 15 - 15
src/components/ViewFooter.vue

@@ -1,15 +1,15 @@
-<template>
-  <div class="view-footer home-footer">
-    <p>
-      Copyright © 2018-2021
-      <a href="http://www.qmth.com.cn" target="_blank">www.qmth.com.cn</a> , All
-      Rights Reserved.
-    </p>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "view-footer"
-};
-</script>
+<template>
+  <div class="view-footer home-footer">
+    <p>
+      Copyright © 2018-2021
+      <a href="http://www.qmth.com.cn" target="_blank">www.qmth.com.cn</a> , All
+      Rights Reserved.
+    </p>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "view-footer",
+};
+</script>

+ 7 - 7
src/components/base/CollegeSelect.vue

@@ -27,12 +27,12 @@ export default {
     disabled: { type: Boolean, default: false },
     placeholder: { type: String, default: "请选择学院" },
     value: { type: [Number, String], default: "" },
-    clearable: { type: Boolean, default: true }
+    clearable: { type: Boolean, default: true },
   },
   data() {
     return {
       optionList: [],
-      selected: ""
+      selected: "",
     };
   },
   watch: {
@@ -40,8 +40,8 @@ export default {
       immediate: true,
       handler(val) {
         this.selected = val;
-      }
-    }
+      },
+    },
   },
   created() {
     this.search();
@@ -57,9 +57,9 @@ export default {
       this.$emit("input", this.selected);
       this.$emit(
         "change",
-        this.optionList.find(item => item.id === this.selected)
+        this.optionList.find((item) => item.id === this.selected)
       );
-    }
-  }
+    },
+  },
 };
 </script>

+ 96 - 96
src/components/base/EcsExamSelect.vue

@@ -1,96 +1,96 @@
-<template>
-  <div class="ecs-exam-select">
-    <el-select
-      v-model="selected"
-      :placeholder="placeholder"
-      filterable
-      :clearable="clearable"
-      :disabled="disabled || loading"
-      @change="select"
-    >
-      <el-option
-        v-for="item in optionList"
-        :key="item.examId"
-        :value="item.examId"
-        :label="`${item.examId}-${item.examName}`"
-      >
-      </el-option>
-    </el-select>
-    <el-button
-      icon="el-icon-refresh"
-      type="primary"
-      title="同步考试"
-      :loading="loading"
-      @click="toSync"
-    ></el-button>
-  </div>
-</template>
-
-<script>
-import { ecsExamQuery, ecsExamSync } from "../../modules/base/api";
-
-export default {
-  name: "ecs-exam-select",
-  props: {
-    disabled: { type: Boolean, default: false },
-    placeholder: { type: String, default: "请选择考试" },
-    value: { type: [Number, String], default: "" },
-    clearable: { type: Boolean, default: true },
-    collegeId: { type: [Number, String], default: "" }
-  },
-  data() {
-    return {
-      optionList: [],
-      selected: "",
-      loading: false
-    };
-  },
-  watch: {
-    value: {
-      immediate: true,
-      handler(val) {
-        this.selected = val;
-      }
-    },
-    collegeId(val, oldval) {
-      if (val !== oldval) {
-        this.search();
-        this.$emit("input", "");
-        this.$emit("change", {});
-      }
-    }
-  },
-  created() {
-    this.search();
-  },
-  methods: {
-    async search() {
-      this.optionList = [];
-      if (!this.collegeId) return;
-
-      const res = await ecsExamQuery(this.collegeId);
-      this.optionList = res;
-    },
-    async toSync() {
-      if (!this.collegeId) {
-        this.$message.error("请先选择学院!");
-        return;
-      }
-
-      if (this.loading) return;
-      this.loading = true;
-
-      const res = await ecsExamSync(this.collegeId).catch(() => {});
-      this.loading = false;
-      if (res) this.optionList = res;
-    },
-    select() {
-      this.$emit("input", this.selected);
-      this.$emit(
-        "change",
-        this.optionList.find(item => item.examId === this.selected)
-      );
-    }
-  }
-};
-</script>
+<template>
+  <div class="ecs-exam-select">
+    <el-select
+      v-model="selected"
+      :placeholder="placeholder"
+      filterable
+      :clearable="clearable"
+      :disabled="disabled || loading"
+      @change="select"
+    >
+      <el-option
+        v-for="item in optionList"
+        :key="item.examId"
+        :value="item.examId"
+        :label="`${item.examId}-${item.examName}`"
+      >
+      </el-option>
+    </el-select>
+    <el-button
+      icon="el-icon-refresh"
+      type="primary"
+      title="同步考试"
+      :loading="loading"
+      @click="toSync"
+    ></el-button>
+  </div>
+</template>
+
+<script>
+import { ecsExamQuery, ecsExamSync } from "../../modules/base/api";
+
+export default {
+  name: "ecs-exam-select",
+  props: {
+    disabled: { type: Boolean, default: false },
+    placeholder: { type: String, default: "请选择考试" },
+    value: { type: [Number, String], default: "" },
+    clearable: { type: Boolean, default: true },
+    collegeId: { type: [Number, String], default: "" },
+  },
+  data() {
+    return {
+      optionList: [],
+      selected: "",
+      loading: false,
+    };
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.selected = val;
+      },
+    },
+    collegeId(val, oldval) {
+      if (val !== oldval) {
+        this.search();
+        this.$emit("input", "");
+        this.$emit("change", {});
+      }
+    },
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    async search() {
+      this.optionList = [];
+      if (!this.collegeId) return;
+
+      const res = await ecsExamQuery(this.collegeId);
+      this.optionList = res;
+    },
+    async toSync() {
+      if (!this.collegeId) {
+        this.$message.error("请先选择学院!");
+        return;
+      }
+
+      if (this.loading) return;
+      this.loading = true;
+
+      const res = await ecsExamSync(this.collegeId).catch(() => {});
+      this.loading = false;
+      if (res) this.optionList = res;
+    },
+    select() {
+      this.$emit("input", this.selected);
+      this.$emit(
+        "change",
+        this.optionList.find((item) => item.examId === this.selected)
+      );
+    },
+  },
+};
+</script>

+ 7 - 7
src/components/base/ExamTypeSelect.vue

@@ -27,12 +27,12 @@ export default {
     disabled: { type: Boolean, default: false },
     placeholder: { type: String, default: "请选择考试类型" },
     value: { type: [Number, String], default: "" },
-    clearable: { type: Boolean, default: true }
+    clearable: { type: Boolean, default: true },
   },
   data() {
     return {
       optionList: [],
-      selected: ""
+      selected: "",
     };
   },
   watch: {
@@ -40,8 +40,8 @@ export default {
       immediate: true,
       handler(val) {
         this.selected = val;
-      }
-    }
+      },
+    },
   },
   created() {
     this.search();
@@ -57,9 +57,9 @@ export default {
       this.$emit("input", this.selected);
       this.$emit(
         "change",
-        this.optionList.find(item => item.id === this.selected)
+        this.optionList.find((item) => item.id === this.selected)
       );
-    }
-  }
+    },
+  },
 };
 </script>

+ 77 - 77
src/components/base/SchoolSelect.vue

@@ -1,77 +1,77 @@
-<template>
-  <el-select
-    v-model="selected"
-    class="school-select"
-    :placeholder="placeholder"
-    filterable
-    :clearable="clearable"
-    :disabled="disabled"
-    @change="select"
-  >
-    <el-option
-      v-for="item in optionList"
-      :key="item.id"
-      :value="item.id"
-      :label="item.name"
-    >
-    </el-option>
-  </el-select>
-</template>
-
-<script>
-import { schoolList } from "../../modules/login/api";
-
-export default {
-  name: "school-select",
-  props: {
-    disabled: { type: Boolean, default: false },
-    placeholder: { type: String, default: "请选择学校" },
-    value: { type: [Number, String], default: "" },
-    clearable: { type: Boolean, default: true },
-    selectDefault: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      optionList: [],
-      selected: ""
-    };
-  },
-  watch: {
-    value: {
-      immediate: true,
-      handler(val) {
-        this.selected = val;
-      }
-    }
-  },
-  async created() {
-    this.search();
-  },
-  methods: {
-    async search() {
-      const res = await schoolList();
-      this.optionList = res;
-
-      if (this.selectDefault) {
-        this.emitDefault();
-      }
-    },
-    select() {
-      this.$emit("input", this.selected);
-      this.$emit(
-        "change",
-        this.optionList.find(item => item.id === this.selected)
-      );
-    },
-    emitDefault() {
-      if (!this.optionList.length) return;
-
-      this.selected = this.optionList[0].id;
-      this.select();
-    }
-  }
-};
-</script>
+<template>
+  <el-select
+    v-model="selected"
+    class="school-select"
+    :placeholder="placeholder"
+    filterable
+    :clearable="clearable"
+    :disabled="disabled"
+    @change="select"
+  >
+    <el-option
+      v-for="item in optionList"
+      :key="item.id"
+      :value="item.id"
+      :label="item.name"
+    >
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+import { schoolList } from "../../modules/login/api";
+
+export default {
+  name: "school-select",
+  props: {
+    disabled: { type: Boolean, default: false },
+    placeholder: { type: String, default: "请选择学校" },
+    value: { type: [Number, String], default: "" },
+    clearable: { type: Boolean, default: true },
+    selectDefault: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      optionList: [],
+      selected: "",
+    };
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.selected = val;
+      },
+    },
+  },
+  async created() {
+    this.search();
+  },
+  methods: {
+    async search() {
+      const res = await schoolList();
+      this.optionList = res;
+
+      if (this.selectDefault) {
+        this.emitDefault();
+      }
+    },
+    select() {
+      this.$emit("input", this.selected);
+      this.$emit(
+        "change",
+        this.optionList.find((item) => item.id === this.selected)
+      );
+    },
+    emitDefault() {
+      if (!this.optionList.length) return;
+
+      this.selected = this.optionList[0].id;
+      this.select();
+    },
+  },
+};
+</script>

+ 97 - 97
src/components/base/SemesterSelect.vue

@@ -1,97 +1,97 @@
-<template>
-  <el-select
-    v-model="selected"
-    class="semester-select"
-    :placeholder="placeholder"
-    filterable
-    :clearable="clearable"
-    :disabled="disabled"
-    @change="select"
-  >
-    <el-option
-      v-for="item in optionList"
-      :key="item.id"
-      :value="item.id"
-      :label="item.name"
-    >
-    </el-option>
-  </el-select>
-</template>
-
-<script>
-import { semesterQuery } from "../../modules/base/api";
-
-export default {
-  name: "semester-select",
-  props: {
-    disabled: { type: Boolean, default: false },
-    placeholder: { type: String, default: "请选择学期" },
-    value: { type: [Number, String], default: "" },
-    clearable: { type: Boolean, default: true },
-    manualFetch: {
-      type: Boolean,
-      default: false
-    },
-    selectDefault: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      optionList: [],
-      selected: ""
-    };
-  },
-  watch: {
-    value: {
-      immediate: true,
-      handler(val) {
-        this.selected = val;
-      }
-    }
-  },
-  created() {
-    if (!this.manualFetch) this.search();
-  },
-  methods: {
-    async search() {
-      this.optionList = [];
-      const res = await semesterQuery({});
-      this.optionList = res;
-
-      if (!this.selectDefault) return;
-
-      if (this.value) {
-        const option = this.optionList.find(item => item.id === this.value);
-        if (option) {
-          this.$emit("input", this.value);
-          this.$emit("change", option);
-        } else {
-          this.selectFirst();
-        }
-      } else {
-        this.selectFirst();
-      }
-    },
-    selectFirst() {
-      if (!this.optionList.length) {
-        this.selected = "";
-        this.$emit("input", this.selected);
-        this.$emit("change", {});
-        return;
-      }
-      this.selected = this.optionList[0].id;
-      this.$emit("input", this.selected);
-      this.$emit("change", this.optionList[0]);
-    },
-    select() {
-      this.$emit("input", this.selected);
-      this.$emit(
-        "change",
-        this.optionList.find(item => item.id === this.selected)
-      );
-    }
-  }
-};
-</script>
+<template>
+  <el-select
+    v-model="selected"
+    class="semester-select"
+    :placeholder="placeholder"
+    filterable
+    :clearable="clearable"
+    :disabled="disabled"
+    @change="select"
+  >
+    <el-option
+      v-for="item in optionList"
+      :key="item.id"
+      :value="item.id"
+      :label="item.name"
+    >
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+import { semesterQuery } from "../../modules/base/api";
+
+export default {
+  name: "semester-select",
+  props: {
+    disabled: { type: Boolean, default: false },
+    placeholder: { type: String, default: "请选择学期" },
+    value: { type: [Number, String], default: "" },
+    clearable: { type: Boolean, default: true },
+    manualFetch: {
+      type: Boolean,
+      default: false,
+    },
+    selectDefault: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      optionList: [],
+      selected: "",
+    };
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.selected = val;
+      },
+    },
+  },
+  created() {
+    if (!this.manualFetch) this.search();
+  },
+  methods: {
+    async search() {
+      this.optionList = [];
+      const res = await semesterQuery({});
+      this.optionList = res;
+
+      if (!this.selectDefault) return;
+
+      if (this.value) {
+        const option = this.optionList.find((item) => item.id === this.value);
+        if (option) {
+          this.$emit("input", this.value);
+          this.$emit("change", option);
+        } else {
+          this.selectFirst();
+        }
+      } else {
+        this.selectFirst();
+      }
+    },
+    selectFirst() {
+      if (!this.optionList.length) {
+        this.selected = "";
+        this.$emit("input", this.selected);
+        this.$emit("change", {});
+        return;
+      }
+      this.selected = this.optionList[0].id;
+      this.$emit("input", this.selected);
+      this.$emit("change", this.optionList[0]);
+    },
+    select() {
+      this.$emit("input", this.selected);
+      this.$emit(
+        "change",
+        this.optionList.find((item) => item.id === this.selected)
+      );
+    },
+  },
+};
+</script>

+ 47 - 47
src/components/common/CascaderSplit/CascaderSplit.vue

@@ -1,47 +1,47 @@
-<template>
-  <div class="cascader-split">
-    <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
-      <el-form-item label="levelOne">
-        <level-one
-          v-model="modalForm.levelOne"
-          set-default
-          @on-change="selectChange"
-        ></level-one>
-      </el-form-item>
-      <el-form-item label="levelTwo">
-        <level-two
-          v-model="modalForm.levelTwo"
-          :level-one-model="modalForm.levelOne"
-          @on-change="selectChange"
-          set-default
-        ></level-two>
-      </el-form-item>
-    </el-form>
-  </div>
-</template>
-
-<script>
-import LevelOne from "./LevelOne";
-import LevelTwo from "./LevelTwo";
-
-export default {
-  name: "cascader-split",
-  components: {
-    LevelOne,
-    LevelTwo
-  },
-  data() {
-    return {
-      modalForm: {
-        levelOne: "",
-        levelTwo: ""
-      }
-    };
-  },
-  methods: {
-    selectChange() {
-      console.log(this.modalForm);
-    }
-  }
-};
-</script>
+<template>
+  <div class="cascader-split">
+    <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
+      <el-form-item label="levelOne">
+        <level-one
+          v-model="modalForm.levelOne"
+          set-default
+          @on-change="selectChange"
+        ></level-one>
+      </el-form-item>
+      <el-form-item label="levelTwo">
+        <level-two
+          v-model="modalForm.levelTwo"
+          :level-one-model="modalForm.levelOne"
+          @on-change="selectChange"
+          set-default
+        ></level-two>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import LevelOne from "./LevelOne";
+import LevelTwo from "./LevelTwo";
+
+export default {
+  name: "cascader-split",
+  components: {
+    LevelOne,
+    LevelTwo,
+  },
+  data() {
+    return {
+      modalForm: {
+        levelOne: "",
+        levelTwo: "",
+      },
+    };
+  },
+  methods: {
+    selectChange() {
+      console.log(this.modalForm);
+    },
+  },
+};
+</script>

+ 90 - 90
src/components/common/CascaderSplit/LevelOne.vue

@@ -1,90 +1,90 @@
-<template>
-  <el-select
-    class="level-one"
-    v-model="levelModel"
-    style="width: 200px;"
-    @change="selected"
-    :placeholder="placeholder"
-    :clearable="clearable"
-    :disabled="disabled"
-  >
-    <el-option
-      v-for="item in dataList"
-      :key="item.id"
-      :value="item.id"
-      :label="item.name"
-    >
-    </el-option>
-  </el-select>
-</template>
-
-<script>
-import { getData } from "./com-func";
-
-export default {
-  name: "level-one",
-  props: {
-    value: {
-      type: [String, Number]
-    },
-    setDefault: {
-      type: Boolean,
-      default: false
-    },
-    placeholder: {
-      type: String,
-      default: "请选择选项"
-    },
-    clearable: {
-      type: Boolean,
-      default: false
-    },
-    disabled: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      dataList: []
-    };
-  },
-  computed: {
-    levelModel: {
-      get() {
-        return this.value;
-      },
-      set(selectId) {
-        this.$emit("input", selectId);
-      }
-    }
-  },
-  created() {
-    this.search();
-  },
-  methods: {
-    async search() {
-      const data = await getData("level-one");
-      this.dataList = data.map(item => {
-        return {
-          id: item.id,
-          name: item.name
-        };
-      });
-
-      if (this.setDefault) {
-        this.levelModel = this.dataList[0] && this.dataList[0].id;
-        const val = {
-          value: this.dataList[0].id || "",
-          label: this.dataList[0].name || ""
-        };
-        this.$emit("on-change", val);
-        this.$emit("on-set");
-      }
-    },
-    selected(val) {
-      this.$emit("on-change", val);
-    }
-  }
-};
-</script>
+<template>
+  <el-select
+    class="level-one"
+    v-model="levelModel"
+    style="width: 200px"
+    @change="selected"
+    :placeholder="placeholder"
+    :clearable="clearable"
+    :disabled="disabled"
+  >
+    <el-option
+      v-for="item in dataList"
+      :key="item.id"
+      :value="item.id"
+      :label="item.name"
+    >
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+import { getData } from "./com-func";
+
+export default {
+  name: "level-one",
+  props: {
+    value: {
+      type: [String, Number],
+    },
+    setDefault: {
+      type: Boolean,
+      default: false,
+    },
+    placeholder: {
+      type: String,
+      default: "请选择选项",
+    },
+    clearable: {
+      type: Boolean,
+      default: false,
+    },
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      dataList: [],
+    };
+  },
+  computed: {
+    levelModel: {
+      get() {
+        return this.value;
+      },
+      set(selectId) {
+        this.$emit("input", selectId);
+      },
+    },
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    async search() {
+      const data = await getData("level-one");
+      this.dataList = data.map((item) => {
+        return {
+          id: item.id,
+          name: item.name,
+        };
+      });
+
+      if (this.setDefault) {
+        this.levelModel = this.dataList[0] && this.dataList[0].id;
+        const val = {
+          value: this.dataList[0].id || "",
+          label: this.dataList[0].name || "",
+        };
+        this.$emit("on-change", val);
+        this.$emit("on-set");
+      }
+    },
+    selected(val) {
+      this.$emit("on-change", val);
+    },
+  },
+};
+</script>

+ 102 - 102
src/components/common/CascaderSplit/LevelTwo.vue

@@ -1,102 +1,102 @@
-<template>
-  <el-select
-    class="level-two"
-    v-model="levelModel"
-    style="width: 200px;"
-    @change="selected"
-    :placeholder="placeholder"
-    :clearable="clearable"
-    :disabled="disabled"
-  >
-    <el-option
-      v-for="item in dataList"
-      :key="item.id"
-      :value="item.id"
-      :label="item.name"
-    >
-    </el-option>
-  </el-select>
-</template>
-
-<script>
-import { getData } from "./com-func";
-
-export default {
-  name: "level-two",
-  props: {
-    value: {
-      type: [String, Number]
-    },
-    setDefault: {
-      type: Boolean,
-      default: false
-    },
-    levelOneModel: {
-      type: [String, Number],
-      required: true
-    },
-    placeholder: {
-      type: String,
-      default: "请选择考试"
-    },
-    clearable: {
-      type: Boolean,
-      default: false
-    },
-    disabled: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      dataList: []
-    };
-  },
-  computed: {
-    levelModel: {
-      get() {
-        return this.value;
-      },
-      set(selectId) {
-        this.$emit("input", selectId);
-      }
-    }
-  },
-  watch: {
-    levelOneModel() {
-      this.search();
-    }
-  },
-  methods: {
-    async search() {
-      if (!this.levelOneModel) {
-        this.dataList = [];
-        this.levelModel = "";
-        return;
-      }
-
-      const data = await getData("level-two");
-      this.dataList = data.map(item => {
-        return {
-          id: item.id,
-          name: item.name
-        };
-      });
-
-      if (this.setDefault) {
-        this.levelModel = this.dataList[0] && this.dataList[0].id;
-        const val = {
-          value: this.dataList[0].id || "",
-          label: this.dataList[0].name || ""
-        };
-        this.$emit("on-change", val);
-        this.$emit("on-set");
-      }
-    },
-    selected(val) {
-      this.$emit("on-change", val);
-    }
-  }
-};
-</script>
+<template>
+  <el-select
+    class="level-two"
+    v-model="levelModel"
+    style="width: 200px"
+    @change="selected"
+    :placeholder="placeholder"
+    :clearable="clearable"
+    :disabled="disabled"
+  >
+    <el-option
+      v-for="item in dataList"
+      :key="item.id"
+      :value="item.id"
+      :label="item.name"
+    >
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+import { getData } from "./com-func";
+
+export default {
+  name: "level-two",
+  props: {
+    value: {
+      type: [String, Number],
+    },
+    setDefault: {
+      type: Boolean,
+      default: false,
+    },
+    levelOneModel: {
+      type: [String, Number],
+      required: true,
+    },
+    placeholder: {
+      type: String,
+      default: "请选择考试",
+    },
+    clearable: {
+      type: Boolean,
+      default: false,
+    },
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      dataList: [],
+    };
+  },
+  computed: {
+    levelModel: {
+      get() {
+        return this.value;
+      },
+      set(selectId) {
+        this.$emit("input", selectId);
+      },
+    },
+  },
+  watch: {
+    levelOneModel() {
+      this.search();
+    },
+  },
+  methods: {
+    async search() {
+      if (!this.levelOneModel) {
+        this.dataList = [];
+        this.levelModel = "";
+        return;
+      }
+
+      const data = await getData("level-two");
+      this.dataList = data.map((item) => {
+        return {
+          id: item.id,
+          name: item.name,
+        };
+      });
+
+      if (this.setDefault) {
+        this.levelModel = this.dataList[0] && this.dataList[0].id;
+        const val = {
+          value: this.dataList[0].id || "",
+          label: this.dataList[0].name || "",
+        };
+        this.$emit("on-change", val);
+        this.$emit("on-set");
+      }
+    },
+    selected(val) {
+      this.$emit("on-change", val);
+    },
+  },
+};
+</script>

+ 18 - 18
src/components/common/CascaderSplit/com-func.js

@@ -1,18 +1,18 @@
-export const getData = (nameKey = "name") => {
-  return new Promise((resolve, reject) => {
-    setTimeout(() => {
-      const dataList = "#"
-        .repeat(8)
-        .split("")
-        .map((item, index) => {
-          return {
-            id: index + 1,
-            name: `${nameKey}-${Math.random()
-              .toString(32)
-              .slice(-5)}-${index + 1}`
-          };
-        });
-      resolve(dataList);
-    }, 300);
-  });
-};
+export const getData = (nameKey = "name") => {
+  return new Promise((resolve, reject) => {
+    setTimeout(() => {
+      const dataList = "#"
+        .repeat(8)
+        .split("")
+        .map((item, index) => {
+          return {
+            id: index + 1,
+            name: `${nameKey}-${Math.random().toString(32).slice(-5)}-${
+              index + 1
+            }`,
+          };
+        });
+      resolve(dataList);
+    }, 300);
+  });
+};

+ 99 - 101
src/components/common/DimensionTreeTable/DimensionTreeTable.vue

@@ -1,101 +1,99 @@
-<template>
-  <div class="dimension-tree-table">
-    <table class="table">
-      <tr
-        v-for="(tr, trind) in tableTreeList"
-        :key="trind"
-        :data-names="tr.names"
-        :data-ids="tr.ids"
-      >
-        <td v-for="(td, tdind) in tr.tdList" :key="tdind" :rowspan="td.rowspan">
-          <span>{{ td.name }}</span>
-        </td>
-        <td>
-          <slot :trItem="tr">
-            default slot name
-          </slot>
-        </td>
-      </tr>
-    </table>
-  </div>
-</template>
-
-<script>
-import { deepCopy } from "@/plugins/utils";
-
-export default {
-  name: "dimension-tree-table",
-  props: {
-    data: {
-      type: Array,
-      default() {
-        return [];
-      }
-    }
-  },
-  data() {
-    return {
-      dataList: [],
-      dataListNums: [],
-      tableTreeList: []
-    };
-  },
-  watch: {
-    data: {
-      immediate: true,
-      handler(val) {
-        this.dataList = deepCopy(val);
-        this.getDataListNums();
-        this.serilizeTableList();
-      }
-    }
-  },
-  methods: {
-    getDataListNums() {
-      this.dataListNums = this.dataList.map(item => item.length);
-    },
-    getRowSpan(curIndex) {
-      const listNums = this.dataListNums.slice(curIndex + 1);
-      return listNums.reduce((sum, item) => sum * item, 1);
-    },
-    getNextList(curIndex) {
-      if (curIndex + 1 >= this.dataList.length) return;
-      return this.dataList[curIndex + 1];
-    },
-    serilizeTableList() {
-      if (!this.dataList.length) {
-        this.tableTreeList = [];
-        this.dataListNums = [];
-        return;
-      }
-
-      let tableList = [];
-      const serilize = (parentList, allParentList, curList, curIndex) => {
-        const rowspan = this.getRowSpan(curIndex);
-        const nextList = this.getNextList(curIndex);
-        curList.map((item, index) => {
-          const newParentList = index ? [] : deepCopy(parentList);
-          const curItem = { ...item, rowspan };
-          const newAllParentList = [...deepCopy(allParentList), curItem];
-          const curRow = [...newParentList, curItem];
-          if (nextList) {
-            serilize(curRow, newAllParentList, nextList, curIndex + 1);
-          } else {
-            tableList.push({ tdList: curRow, allList: newAllParentList });
-          }
-        });
-      };
-      serilize([], [], this.getNextList(-1), 0);
-
-      this.tableTreeList = tableList.map(item => {
-        return {
-          ...item,
-          ids: item.allList.map(elem => elem.id).join("_"),
-          names: item.allList.map(elem => elem.name).join("_")
-        };
-      });
-      console.log(this.tableTreeList);
-    }
-  }
-};
-</script>
+<template>
+  <div class="dimension-tree-table">
+    <table class="table">
+      <tr
+        v-for="(tr, trind) in tableTreeList"
+        :key="trind"
+        :data-names="tr.names"
+        :data-ids="tr.ids"
+      >
+        <td v-for="(td, tdind) in tr.tdList" :key="tdind" :rowspan="td.rowspan">
+          <span>{{ td.name }}</span>
+        </td>
+        <td>
+          <slot :trItem="tr"> default slot name </slot>
+        </td>
+      </tr>
+    </table>
+  </div>
+</template>
+
+<script>
+import { deepCopy } from "@/plugins/utils";
+
+export default {
+  name: "dimension-tree-table",
+  props: {
+    data: {
+      type: Array,
+      default() {
+        return [];
+      },
+    },
+  },
+  data() {
+    return {
+      dataList: [],
+      dataListNums: [],
+      tableTreeList: [],
+    };
+  },
+  watch: {
+    data: {
+      immediate: true,
+      handler(val) {
+        this.dataList = deepCopy(val);
+        this.getDataListNums();
+        this.serilizeTableList();
+      },
+    },
+  },
+  methods: {
+    getDataListNums() {
+      this.dataListNums = this.dataList.map((item) => item.length);
+    },
+    getRowSpan(curIndex) {
+      const listNums = this.dataListNums.slice(curIndex + 1);
+      return listNums.reduce((sum, item) => sum * item, 1);
+    },
+    getNextList(curIndex) {
+      if (curIndex + 1 >= this.dataList.length) return;
+      return this.dataList[curIndex + 1];
+    },
+    serilizeTableList() {
+      if (!this.dataList.length) {
+        this.tableTreeList = [];
+        this.dataListNums = [];
+        return;
+      }
+
+      let tableList = [];
+      const serilize = (parentList, allParentList, curList, curIndex) => {
+        const rowspan = this.getRowSpan(curIndex);
+        const nextList = this.getNextList(curIndex);
+        curList.map((item, index) => {
+          const newParentList = index ? [] : deepCopy(parentList);
+          const curItem = { ...item, rowspan };
+          const newAllParentList = [...deepCopy(allParentList), curItem];
+          const curRow = [...newParentList, curItem];
+          if (nextList) {
+            serilize(curRow, newAllParentList, nextList, curIndex + 1);
+          } else {
+            tableList.push({ tdList: curRow, allList: newAllParentList });
+          }
+        });
+      };
+      serilize([], [], this.getNextList(-1), 0);
+
+      this.tableTreeList = tableList.map((item) => {
+        return {
+          ...item,
+          ids: item.allList.map((elem) => elem.id).join("_"),
+          names: item.allList.map((elem) => elem.name).join("_"),
+        };
+      });
+      console.log(this.tableTreeList);
+    },
+  },
+};
+</script>

+ 2 - 2
src/components/common/DimensionTreeTable/index.js

@@ -1,2 +1,2 @@
-import DimensionTreeTable from "./DimensionTreeTable.vue";
-export default DimensionTreeTable;
+import DimensionTreeTable from "./DimensionTreeTable.vue";
+export default DimensionTreeTable;

+ 92 - 92
src/components/common/DimensionTreeTable/intro.md

@@ -1,92 +1,92 @@
-# DimensionTreeTable api
-
-## 实例
-
-```html
-<template>
-  <div class="demo">
-    <dimension-tree-table :data="selectedData" #default="{trItem}">
-      <span>{{ trItem.names }}</span>
-    </dimension-tree-table>
-  </div>
-</template>
-
-<script>
-  import DimensionTreeTable from "@/components/common/DimensionTreeTable";
-
-  export default {
-    name: "demo",
-    components: {
-      DimensionTreeTable
-    },
-    data() {
-      return {
-        selectedData: [[{"id":1,"name":"颜色1"}],[{"id":11,"name":"尺码1"},{"id":12,"name":"尺码2"}]],
-      };
-    },
-    methods: {
-    }
-  };
-</script>
-```
-
-## props
-
-| 属性 | 说明               | 类型  | 默认值 |
-| ---- | ------------------ | ----- | ------ |
-| data | 生成表格的二维数组 | Aarry | []     |
-
-
-## Scoped Slot
-
-| name | 说明                                  |
-| ---- | ------------------------------------- |
-| -    | 自定义表格行的内容,参数为 { trItem } |
-
-**说明:** 实例中采用vue2.6以上slot新语法编写,查看[具体文档](https://cn.vuejs.org/v2/guide/components-slots.html)
-
-
-## trItem说明
-
-| 字段    | 说明               |
-| ------- | ------------------ |
-| tdList  | 表格单行渲染的数组 |
-| allList | 表格单行完整数组   |
-| ids     | 单行条目的id       |
-| names   | 单行条目的名称     |
-
-### example
-```json
-{
-    "tdList": [
-        {
-            "id": 1112,
-            "name": "来源2",
-            "selected": true,
-            "rowspan": 1
-        }
-    ],
-    "allList": [
-        {
-            "id": 11,
-            "name": "尺码1",
-            "selected": true,
-            "rowspan": 4
-        },
-        {
-            "id": 111,
-            "name": "材质1",
-            "selected": true,
-            "rowspan": 2
-        },
-        {
-            "id": 1112,
-            "name": "来源2",
-            "selected": true,
-            "rowspan": 1
-        }
-    ],
-    "ids": "11_111_1112",
-    "names": "尺码1_材质1_来源2"
-}
-```
+# DimensionTreeTable api
+
+## 实例
+
+```html
+<template>
+  <div class="demo">
+    <dimension-tree-table :data="selectedData" #default="{trItem}">
+      <span>{{ trItem.names }}</span>
+    </dimension-tree-table>
+  </div>
+</template>
+
+<script>
+  import DimensionTreeTable from "@/components/common/DimensionTreeTable";
+
+  export default {
+    name: "demo",
+    components: {
+      DimensionTreeTable
+    },
+    data() {
+      return {
+        selectedData: [[{"id":1,"name":"颜色1"}],[{"id":11,"name":"尺码1"},{"id":12,"name":"尺码2"}]],
+      };
+    },
+    methods: {
+    }
+  };
+</script>
+```
+
+## props
+
+| 属性 | 说明               | 类型  | 默认值 |
+| ---- | ------------------ | ----- | ------ |
+| data | 生成表格的二维数组 | Aarry | []     |
+
+
+## Scoped Slot
+
+| name | 说明                                  |
+| ---- | ------------------------------------- |
+| -    | 自定义表格行的内容,参数为 { trItem } |
+
+**说明:** 实例中采用vue2.6以上slot新语法编写,查看[具体文档](https://cn.vuejs.org/v2/guide/components-slots.html)
+
+
+## trItem说明
+
+| 字段    | 说明               |
+| ------- | ------------------ |
+| tdList  | 表格单行渲染的数组 |
+| allList | 表格单行完整数组   |
+| ids     | 单行条目的id       |
+| names   | 单行条目的名称     |
+
+### example
+```json
+{
+    "tdList": [
+        {
+            "id": 1112,
+            "name": "来源2",
+            "selected": true,
+            "rowspan": 1
+        }
+    ],
+    "allList": [
+        {
+            "id": 11,
+            "name": "尺码1",
+            "selected": true,
+            "rowspan": 4
+        },
+        {
+            "id": 111,
+            "name": "材质1",
+            "selected": true,
+            "rowspan": 2
+        },
+        {
+            "id": 1112,
+            "name": "来源2",
+            "selected": true,
+            "rowspan": 1
+        }
+    ],
+    "ids": "11_111_1112",
+    "names": "尺码1_材质1_来源2"
+}
+```

+ 415 - 418
src/components/common/ImageEditUpload/ImageEditUpload.vue

@@ -1,418 +1,415 @@
-<template>
-  <div class="image-edit-upload">
-    <div :class="[`${prefixCls}-main`]" v-show="!edit">
-      <div :class="elPrefixCls">
-        <div
-          :class="classes"
-          @click="handleClick"
-          @drop.prevent="onDrop"
-          @dragover.prevent="dragOver = true"
-          @dragleave.prevent="dragOver = false"
-        >
-          <input
-            ref="input"
-            type="file"
-            :class="[`${elPrefixCls}-input`]"
-            @change="handleChange"
-            :accept="accept"
-          />
-          <div :class="[`${prefixCls}-cover`]" v-if="imgUrl">
-            <img :src="imgUrl" alt="default" />
-          </div>
-          <div :class="[`${prefixCls}-dcover`]" v-else>
-            <i class="el-icon-user-solid"></i><br />
-            <p>点击或拖拽图片到此处</p>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div :class="[`${prefixCls}-edit`]" v-show="file.url && edit">
-      <div :class="[`${prefixCls}-edit-box`]">
-        <img ref="editImage" :src="file.url" />
-        <transition name="fade" v-if="file && file.showProgress">
-          <div class="img-progress">
-            <el-progress
-              :show-text="false"
-              :stroke-width="4"
-              :percentage="file.percentage"
-              :status="
-                file.status === 'finished' && file.showProgress
-                  ? 'success'
-                  : null
-              "
-            ></el-progress>
-          </div>
-        </transition>
-      </div>
-      <div :class="[`${prefixCls}-edit-btns`]">
-        <el-button type="error" @click="clearEdit">取消</el-button>
-        <el-button type="primary" @click="editSave">确认</el-button>
-      </div>
-    </div>
-    <p
-      :class="[
-        `${prefixCls}-tips`,
-        { 'cc-tips-success': res.success, 'cc-tips-error': !res.success }
-      ]"
-      v-if="res.msg"
-    >
-      {{ res.msg }}
-    </p>
-  </div>
-</template>
-
-<script>
-import ajax from "../utils/ajax";
-import Cropper from "cropperjs";
-import "cropperjs/dist/cropper.min.css";
-
-const elPrefixCls = "el-upload";
-const prefixCls = "cc-edit-upload";
-
-const ratios = {
-  double: 1 / 2,
-  square: 1,
-  rectangle: 3 / 4
-};
-
-export default {
-  name: "image-edit-upload",
-  props: {
-    action: {
-      type: String,
-      required: true
-    },
-    headers: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    defImage: {
-      type: String
-    },
-    data: {
-      type: Object
-    },
-    name: {
-      type: String,
-      default: "file"
-    },
-    withCredentials: {
-      type: Boolean,
-      default: false
-    },
-    format: {
-      type: Array,
-      default() {
-        return ["jpg", "png"];
-      }
-    },
-    accept: {
-      type: String
-    },
-    maxSize: {
-      type: Number,
-      default() {
-        return 2 * 1024;
-      }
-    },
-    ratioType: {
-      type: String,
-      default: "rectangle",
-      validator(val) {
-        return ["square", "rectangle", "double"].indexOf(val) > -1;
-      }
-    },
-    onProgress: {
-      type: Function,
-      default() {
-        return {};
-      }
-    },
-    onSuccess: {
-      type: Function,
-      default() {
-        return {};
-      }
-    },
-    onError: {
-      type: Function,
-      default() {
-        return {};
-      }
-    },
-    onRemove: {
-      type: Function,
-      default() {
-        return {};
-      }
-    },
-    onPreview: {
-      type: Function,
-      default() {
-        return {};
-      }
-    },
-    onExceededSize: {
-      type: Function,
-      default() {
-        return {};
-      }
-    },
-    onFormatError: {
-      type: Function,
-      default() {
-        return {};
-      }
-    }
-  },
-  data() {
-    return {
-      file: {},
-      type: "drag",
-      edit: false,
-      cropper: false,
-      imgUrl: this.defImage,
-      prefixCls,
-      elPrefixCls,
-      dragOver: false,
-      tempIndex: 1,
-      res: {
-        success: true,
-        msg: ""
-      }
-    };
-  },
-  computed: {
-    classes() {
-      return [
-        `${elPrefixCls}`,
-        {
-          [`${elPrefixCls}-dragger`]: this.type === "drag",
-          [`${elPrefixCls}-dragOver`]: this.type === "drag" && this.dragOver
-        }
-      ];
-    },
-    aspectRatio() {
-      return ratios[this.ratioType];
-    },
-    limitSize() {
-      const mn = this.maxSize / 1024;
-      return mn >= 1 ? mn + "M" : this.maxSize + "Kb";
-    }
-    // accept() {
-    //   let formats = this.format.map(item => {
-    //     return "image/" + item;
-    //   });
-    //   return formats.join();
-    // }
-  },
-  watch: {
-    edit(value) {
-      if (value) {
-        this.$nextTick(function() {
-          if (!this.$refs.editImage) {
-            return;
-          }
-          this.cropper = new Cropper(this.$refs.editImage, {
-            aspectRatio: this.aspectRatio,
-            minCropBoxWidth: 120,
-            minCropBoxHeight: 120 / this.aspectRatio,
-            viewMode: 1
-          });
-        });
-      } else {
-        if (this.cropper) {
-          this.cropper.destroy();
-          this.cropper = false;
-        }
-      }
-    },
-    defImage(val) {
-      this.imgUrl = val;
-    }
-  },
-  methods: {
-    isIe() {
-      let userAgent = navigator.userAgent;
-      let isIE =
-        userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1;
-      let isEdge = userAgent.indexOf("Edge") > -1 && !isIE;
-      let isIE11 =
-        userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1;
-
-      return isEdge || isIE11 || isIE;
-    },
-    handleClick() {
-      this.res = { success: true, msg: "" };
-      this.$refs.input.click();
-    },
-    handleChange(e) {
-      const files = e.target.files;
-
-      if (!files) return;
-
-      this.uploadFiles(files);
-      this.$refs.input.value = null;
-    },
-    onDrop(e) {
-      this.res = { success: true, msg: "" };
-      this.dragOver = false;
-      this.uploadFiles(e.dataTransfer.files);
-    },
-    uploadFiles(files) {
-      let postFiles = Array.prototype.slice.call(files);
-
-      if (postFiles.length === 0) return;
-
-      if (this.checkValid(postFiles[0])) {
-        this.openEdit(postFiles[0]);
-      }
-    },
-    checkValid(file) {
-      // check format
-      if (this.format.length) {
-        const _file_format = file.name
-          .split(".")
-          .pop()
-          .toLocaleLowerCase();
-        const checked = this.format.some(
-          item => item.toLocaleLowerCase() === _file_format
-        );
-        if (!checked) {
-          this.res = {
-            success: false,
-            msg: "只支持文件格式为" + this.format.join("/")
-          };
-          this.onFormatError(file);
-          return false;
-        }
-      }
-
-      // check maxSize
-      if (this.maxSize) {
-        if (file.size > this.maxSize * 1024) {
-          this.res = {
-            success: false,
-            msg: "文件大小不能超过" + this.limitSize
-          };
-          this.onExceededSize(file);
-          return false;
-        }
-      }
-
-      this.res = {
-        success: true,
-        msg: ""
-      };
-      return true;
-    },
-    openEdit(file) {
-      this.initFile(file);
-      this.$nextTick(function() {
-        this.edit = true;
-      });
-    },
-    initFile(file) {
-      this.file = {
-        status: "uploading",
-        name: file.name,
-        size: file.size,
-        type: file.type,
-        url: this.createUrl(file),
-        response: {},
-        percentage: 0,
-        showProgress: true
-      };
-    },
-    createUrl(file) {
-      let url = "";
-      let URL = window.URL || window.webkitURL;
-      if (URL && URL.createObjectURL) {
-        url = URL.createObjectURL(file);
-      }
-      return url;
-    },
-    clearEdit() {
-      this.edit = false;
-    },
-    editSave() {
-      const { name, type } = this.file;
-      const cropBoxSize = this.cropper.getCropBoxData();
-      // 配置width,height之后会压缩原始图片
-      const binStr = atob(
-        this.cropper
-          .getCroppedCanvas({
-            width: cropBoxSize.width,
-            height: cropBoxSize.height
-          })
-          .toDataURL(type)
-          .split(",")[1]
-      );
-
-      let arr = new Uint8Array(binStr.length);
-      for (let i = 0; i < binStr.length; i++) {
-        arr[i] = binStr.charCodeAt(i);
-      }
-
-      let file;
-      if (this.isIe()) {
-        file = new Blob([arr], { type });
-      } else {
-        file = new File([arr], name, { type });
-      }
-
-      this.post(file);
-    },
-    post(file) {
-      ajax({
-        headers: this.headers,
-        withCredentials: this.withCredentials,
-        file: file,
-        data: this.data,
-        filename: this.name,
-        action: this.action,
-        onProgress: e => {
-          this.handleProgress(e);
-        },
-        onSuccess: res => {
-          this.edit = false;
-          this.handleSuccess(res, file);
-        },
-        onError: (err, response) => {
-          this.edit = false;
-          this.handleError(err, response);
-        }
-      });
-    },
-    handleProgress(e) {
-      this.onProgress(e, this.file);
-      this.file.percentage = parseFloat(e.percent) || 0;
-    },
-    handleSuccess(res, file) {
-      this.file.status = "finished";
-      this.file.response = res;
-      this.res = {
-        success: true,
-        msg: "图片上传成功!"
-      };
-      this.file.url = this.createUrl(file);
-      this.imgUrl = this.file.url;
-      this.onSuccess(res, this.file);
-
-      setTimeout(() => {
-        this.file.showProgress = false;
-      }, 300);
-    },
-    handleError(err, response) {
-      this.file.status = "fail";
-      this.res = {
-        success: false,
-        msg: `图片上传失败:${response.msg || "请求错误"}`
-      };
-      this.onError(err, response, this.file);
-    }
-  }
-};
-</script>
+<template>
+  <div class="image-edit-upload">
+    <div :class="[`${prefixCls}-main`]" v-show="!edit">
+      <div :class="elPrefixCls">
+        <div
+          :class="classes"
+          @click="handleClick"
+          @drop.prevent="onDrop"
+          @dragover.prevent="dragOver = true"
+          @dragleave.prevent="dragOver = false"
+        >
+          <input
+            ref="input"
+            type="file"
+            :class="[`${elPrefixCls}-input`]"
+            @change="handleChange"
+            :accept="accept"
+          />
+          <div :class="[`${prefixCls}-cover`]" v-if="imgUrl">
+            <img :src="imgUrl" alt="default" />
+          </div>
+          <div :class="[`${prefixCls}-dcover`]" v-else>
+            <i class="el-icon-user-solid"></i><br />
+            <p>点击或拖拽图片到此处</p>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div :class="[`${prefixCls}-edit`]" v-show="file.url && edit">
+      <div :class="[`${prefixCls}-edit-box`]">
+        <img ref="editImage" :src="file.url" />
+        <transition name="fade" v-if="file && file.showProgress">
+          <div class="img-progress">
+            <el-progress
+              :show-text="false"
+              :stroke-width="4"
+              :percentage="file.percentage"
+              :status="
+                file.status === 'finished' && file.showProgress
+                  ? 'success'
+                  : null
+              "
+            ></el-progress>
+          </div>
+        </transition>
+      </div>
+      <div :class="[`${prefixCls}-edit-btns`]">
+        <el-button type="error" @click="clearEdit">取消</el-button>
+        <el-button type="primary" @click="editSave">确认</el-button>
+      </div>
+    </div>
+    <p
+      :class="[
+        `${prefixCls}-tips`,
+        { 'cc-tips-success': res.success, 'cc-tips-error': !res.success },
+      ]"
+      v-if="res.msg"
+    >
+      {{ res.msg }}
+    </p>
+  </div>
+</template>
+
+<script>
+import ajax from "../utils/ajax";
+import Cropper from "cropperjs";
+import "cropperjs/dist/cropper.min.css";
+
+const elPrefixCls = "el-upload";
+const prefixCls = "cc-edit-upload";
+
+const ratios = {
+  double: 1 / 2,
+  square: 1,
+  rectangle: 3 / 4,
+};
+
+export default {
+  name: "image-edit-upload",
+  props: {
+    action: {
+      type: String,
+      required: true,
+    },
+    headers: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    defImage: {
+      type: String,
+    },
+    data: {
+      type: Object,
+    },
+    name: {
+      type: String,
+      default: "file",
+    },
+    withCredentials: {
+      type: Boolean,
+      default: false,
+    },
+    format: {
+      type: Array,
+      default() {
+        return ["jpg", "png"];
+      },
+    },
+    accept: {
+      type: String,
+    },
+    maxSize: {
+      type: Number,
+      default() {
+        return 2 * 1024;
+      },
+    },
+    ratioType: {
+      type: String,
+      default: "rectangle",
+      validator(val) {
+        return ["square", "rectangle", "double"].indexOf(val) > -1;
+      },
+    },
+    onProgress: {
+      type: Function,
+      default() {
+        return {};
+      },
+    },
+    onSuccess: {
+      type: Function,
+      default() {
+        return {};
+      },
+    },
+    onError: {
+      type: Function,
+      default() {
+        return {};
+      },
+    },
+    onRemove: {
+      type: Function,
+      default() {
+        return {};
+      },
+    },
+    onPreview: {
+      type: Function,
+      default() {
+        return {};
+      },
+    },
+    onExceededSize: {
+      type: Function,
+      default() {
+        return {};
+      },
+    },
+    onFormatError: {
+      type: Function,
+      default() {
+        return {};
+      },
+    },
+  },
+  data() {
+    return {
+      file: {},
+      type: "drag",
+      edit: false,
+      cropper: false,
+      imgUrl: this.defImage,
+      prefixCls,
+      elPrefixCls,
+      dragOver: false,
+      tempIndex: 1,
+      res: {
+        success: true,
+        msg: "",
+      },
+    };
+  },
+  computed: {
+    classes() {
+      return [
+        `${elPrefixCls}`,
+        {
+          [`${elPrefixCls}-dragger`]: this.type === "drag",
+          [`${elPrefixCls}-dragOver`]: this.type === "drag" && this.dragOver,
+        },
+      ];
+    },
+    aspectRatio() {
+      return ratios[this.ratioType];
+    },
+    limitSize() {
+      const mn = this.maxSize / 1024;
+      return mn >= 1 ? mn + "M" : this.maxSize + "Kb";
+    },
+    // accept() {
+    //   let formats = this.format.map(item => {
+    //     return "image/" + item;
+    //   });
+    //   return formats.join();
+    // }
+  },
+  watch: {
+    edit(value) {
+      if (value) {
+        this.$nextTick(function () {
+          if (!this.$refs.editImage) {
+            return;
+          }
+          this.cropper = new Cropper(this.$refs.editImage, {
+            aspectRatio: this.aspectRatio,
+            minCropBoxWidth: 120,
+            minCropBoxHeight: 120 / this.aspectRatio,
+            viewMode: 1,
+          });
+        });
+      } else {
+        if (this.cropper) {
+          this.cropper.destroy();
+          this.cropper = false;
+        }
+      }
+    },
+    defImage(val) {
+      this.imgUrl = val;
+    },
+  },
+  methods: {
+    isIe() {
+      let userAgent = navigator.userAgent;
+      let isIE =
+        userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1;
+      let isEdge = userAgent.indexOf("Edge") > -1 && !isIE;
+      let isIE11 =
+        userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1;
+
+      return isEdge || isIE11 || isIE;
+    },
+    handleClick() {
+      this.res = { success: true, msg: "" };
+      this.$refs.input.click();
+    },
+    handleChange(e) {
+      const files = e.target.files;
+
+      if (!files) return;
+
+      this.uploadFiles(files);
+      this.$refs.input.value = null;
+    },
+    onDrop(e) {
+      this.res = { success: true, msg: "" };
+      this.dragOver = false;
+      this.uploadFiles(e.dataTransfer.files);
+    },
+    uploadFiles(files) {
+      let postFiles = Array.prototype.slice.call(files);
+
+      if (postFiles.length === 0) return;
+
+      if (this.checkValid(postFiles[0])) {
+        this.openEdit(postFiles[0]);
+      }
+    },
+    checkValid(file) {
+      // check format
+      if (this.format.length) {
+        const _file_format = file.name.split(".").pop().toLocaleLowerCase();
+        const checked = this.format.some(
+          (item) => item.toLocaleLowerCase() === _file_format
+        );
+        if (!checked) {
+          this.res = {
+            success: false,
+            msg: "只支持文件格式为" + this.format.join("/"),
+          };
+          this.onFormatError(file);
+          return false;
+        }
+      }
+
+      // check maxSize
+      if (this.maxSize) {
+        if (file.size > this.maxSize * 1024) {
+          this.res = {
+            success: false,
+            msg: "文件大小不能超过" + this.limitSize,
+          };
+          this.onExceededSize(file);
+          return false;
+        }
+      }
+
+      this.res = {
+        success: true,
+        msg: "",
+      };
+      return true;
+    },
+    openEdit(file) {
+      this.initFile(file);
+      this.$nextTick(function () {
+        this.edit = true;
+      });
+    },
+    initFile(file) {
+      this.file = {
+        status: "uploading",
+        name: file.name,
+        size: file.size,
+        type: file.type,
+        url: this.createUrl(file),
+        response: {},
+        percentage: 0,
+        showProgress: true,
+      };
+    },
+    createUrl(file) {
+      let url = "";
+      let URL = window.URL || window.webkitURL;
+      if (URL && URL.createObjectURL) {
+        url = URL.createObjectURL(file);
+      }
+      return url;
+    },
+    clearEdit() {
+      this.edit = false;
+    },
+    editSave() {
+      const { name, type } = this.file;
+      const cropBoxSize = this.cropper.getCropBoxData();
+      // 配置width,height之后会压缩原始图片
+      const binStr = atob(
+        this.cropper
+          .getCroppedCanvas({
+            width: cropBoxSize.width,
+            height: cropBoxSize.height,
+          })
+          .toDataURL(type)
+          .split(",")[1]
+      );
+
+      let arr = new Uint8Array(binStr.length);
+      for (let i = 0; i < binStr.length; i++) {
+        arr[i] = binStr.charCodeAt(i);
+      }
+
+      let file;
+      if (this.isIe()) {
+        file = new Blob([arr], { type });
+      } else {
+        file = new File([arr], name, { type });
+      }
+
+      this.post(file);
+    },
+    post(file) {
+      ajax({
+        headers: this.headers,
+        withCredentials: this.withCredentials,
+        file: file,
+        data: this.data,
+        filename: this.name,
+        action: this.action,
+        onProgress: (e) => {
+          this.handleProgress(e);
+        },
+        onSuccess: (res) => {
+          this.edit = false;
+          this.handleSuccess(res, file);
+        },
+        onError: (err, response) => {
+          this.edit = false;
+          this.handleError(err, response);
+        },
+      });
+    },
+    handleProgress(e) {
+      this.onProgress(e, this.file);
+      this.file.percentage = parseFloat(e.percent) || 0;
+    },
+    handleSuccess(res, file) {
+      this.file.status = "finished";
+      this.file.response = res;
+      this.res = {
+        success: true,
+        msg: "图片上传成功!",
+      };
+      this.file.url = this.createUrl(file);
+      this.imgUrl = this.file.url;
+      this.onSuccess(res, this.file);
+
+      setTimeout(() => {
+        this.file.showProgress = false;
+      }, 300);
+    },
+    handleError(err, response) {
+      this.file.status = "fail";
+      this.res = {
+        success: false,
+        msg: `图片上传失败:${response.msg || "请求错误"}`,
+      };
+      this.onError(err, response, this.file);
+    },
+  },
+};
+</script>

+ 2 - 2
src/components/common/ImageEditUpload/index.js

@@ -1,2 +1,2 @@
-import ImageEditUpload from "./ImageEditUpload.vue";
-export default ImageEditUpload;
+import ImageEditUpload from "./ImageEditUpload.vue";
+export default ImageEditUpload;

+ 55 - 55
src/components/common/ImageEditUpload/intro.md

@@ -1,55 +1,55 @@
-# ImageEditUpload api
-
-## 实例
-
-```html
-<template>
-  <div class="demo">
-    <image-edit-upload
-      :action="action"
-      :headers="headers"
-      ></image-edit-upload>
-  </div>
-</template>
-
-<script>
-import ImageEditUpload from "@/components/common/ImageEditUpload";
-
-export default {
-  name: "demo",
-  components: {
-    ImageEditUpload
-  },
-  data() {
-    return {
-      action: "/enrolling/enrolling/common/upload/planId/schoolId",
-      headers: {
-        Authorization: '123'
-      }
-    };
-  }
-};
-</script>
-```
-
-## ImageEditUpload props
-
-| 属性             | 说明                                                                                                                                        | 类型     | 默认值         |
-| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------------- |
-| def-image        | 默认的显示的图片地址                                                                                                                        | String   | -              |
-| action           | 上传的地址,必填                                                                                                                            | String   | -              |
-| headers          | 设置上传的请求头部                                                                                                                          | Object   | {}             |
-| data             | 上传时附带的额外参数                                                                                                                        | Object   | -              |
-| name             | 上传的文件字段名                                                                                                                            | String   | file           |
-| with-credentials | 支持发送 cookie 凭证信息                                                                                                                    | Boolean  | false          |
-| show-upload-list | 是否显示已上传文件列表                                                                                                                      | Boolean  | true           |
-| accept           | 接受上传的[文件类型](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept)                                           | String   | -              |
-| format           | 支持的文件类型,与 accept 不同的是,format 是识别文件的后缀名,accept 为 input 标签原生的 accept 属性,会在选择文件时过滤,可以两者结合使用 | Array    | ["jpg", "png"] |
-| max-size         | 文件大小限制,单位 kb                                                                                                                       | Number   | 2 * 1024       |
-| ratio-type       | 图片裁剪的宽高比例,rectangle:3/4,square:1/1,double:1/2                                                                                    | String   | rectangle      |
-| on-progress      | 文件上传时的钩子,返回字段为 event, file                                                                                                    | Function | -              |
-| on-success       | 文件上传成功时的钩子,返回字段为 response, file                                                                                             | Function | -              |
-| on-error         | 文件上传失败时的钩子,返回字段为 error, file                                                                                                | Function | -              |
-| on-format-error  | 文件格式验证失败时的钩子,返回字段为 file                                                                                                   | Function | -              |
-| on-exceeded-size | 文件超出指定大小限制时的钩子,返回字段为 file                                                                                               | Function | -              |
-
+# ImageEditUpload api
+
+## 实例
+
+```html
+<template>
+  <div class="demo">
+    <image-edit-upload
+      :action="action"
+      :headers="headers"
+      ></image-edit-upload>
+  </div>
+</template>
+
+<script>
+import ImageEditUpload from "@/components/common/ImageEditUpload";
+
+export default {
+  name: "demo",
+  components: {
+    ImageEditUpload
+  },
+  data() {
+    return {
+      action: "/enrolling/enrolling/common/upload/planId/schoolId",
+      headers: {
+        Authorization: '123'
+      }
+    };
+  }
+};
+</script>
+```
+
+## ImageEditUpload props
+
+| 属性             | 说明                                                                                                                                        | 类型     | 默认值         |
+| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------------- |
+| def-image        | 默认的显示的图片地址                                                                                                                        | String   | -              |
+| action           | 上传的地址,必填                                                                                                                            | String   | -              |
+| headers          | 设置上传的请求头部                                                                                                                          | Object   | {}             |
+| data             | 上传时附带的额外参数                                                                                                                        | Object   | -              |
+| name             | 上传的文件字段名                                                                                                                            | String   | file           |
+| with-credentials | 支持发送 cookie 凭证信息                                                                                                                    | Boolean  | false          |
+| show-upload-list | 是否显示已上传文件列表                                                                                                                      | Boolean  | true           |
+| accept           | 接受上传的[文件类型](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept)                                           | String   | -              |
+| format           | 支持的文件类型,与 accept 不同的是,format 是识别文件的后缀名,accept 为 input 标签原生的 accept 属性,会在选择文件时过滤,可以两者结合使用 | Array    | ["jpg", "png"] |
+| max-size         | 文件大小限制,单位 kb                                                                                                                       | Number   | 2 * 1024       |
+| ratio-type       | 图片裁剪的宽高比例,rectangle:3/4,square:1/1,double:1/2                                                                                    | String   | rectangle      |
+| on-progress      | 文件上传时的钩子,返回字段为 event, file                                                                                                    | Function | -              |
+| on-success       | 文件上传成功时的钩子,返回字段为 response, file                                                                                             | Function | -              |
+| on-error         | 文件上传失败时的钩子,返回字段为 error, file                                                                                                | Function | -              |
+| on-format-error  | 文件格式验证失败时的钩子,返回字段为 file                                                                                                   | Function | -              |
+| on-exceeded-size | 文件超出指定大小限制时的钩子,返回字段为 file                                                                                               | Function | -              |
+

+ 322 - 322
src/components/common/ImageListUpload/ImageListUpload.vue

@@ -1,322 +1,322 @@
-<template>
-  <div :class="['image-list-upload', prefixCls]">
-    <!-- message alert -->
-    <el-alert
-      :title="res.msg"
-      :type="res.success ? 'success' : 'error'"
-      v-if="res.msg"
-    >
-    </el-alert>
-    <!-- image-list -->
-    <div :class="[`${prefixCls}-list`]">
-      <div
-        v-for="(item, index) in fileList"
-        :class="[
-          `${prefixCls}-item`,
-          `${prefixCls}-item-${item.status}`,
-          { [`${prefixCls}-item-unvalid`]: !item.valid }
-        ]"
-        :key="index"
-      >
-        <div :class="[`${prefixCls}-box`, `${prefixCls}-info`]">
-          <img :src="item.url" :alt="item.name" />
-        </div>
-        <div :class="[`${prefixCls}-box`, `${prefixCls}-progress`]">
-          <el-progress
-            :percentage="item.percentage"
-            :stroke-width="8"
-            :show-text="false"
-          ></el-progress>
-        </div>
-        <div :class="[`${prefixCls}-box `, `${prefixCls}-action`]">
-          <i
-            :class="['el-icon-delete-solid', `${prefixCls}-del`]"
-            title="删除"
-            @click="handleRemove(index)"
-          ></i>
-        </div>
-        <div
-          :class="[
-            `${prefixCls}-tips`,
-            {
-              [`${prefixCls}-tips-success`]:
-                item.valid && item.status === 'success',
-              [`${prefixCls}-tips-error`]:
-                !item.valid || item.status === 'error'
-            }
-          ]"
-        >
-          <span>{{ item.statusTips }}</span>
-        </div>
-      </div>
-
-      <!-- upload add btn -->
-      <div
-        :class="[`${prefixCls}-item`]"
-        @click="handleClick"
-        title="点击添加图片"
-      >
-        <div :class="[`${prefixCls}-box`, `${prefixCls}-add`]">
-          <i class="el-icon-upload"></i>
-        </div>
-        <input
-          ref="fileInput"
-          type="file"
-          :class="[`${prefixCls}-input`]"
-          @change="handleChange"
-          :multiple="multiple"
-        />
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import ajax from "../utils/ajax";
-
-/**
- * 图片上传状态:
- * init 初始状态
- * ready 准备上传
- * uploading 正在上传
- * sucess 上传成功
- * error 上传失败
- *
- * 图片上传流程:
- * 1 选中图片
- * 2 校验合法性:大小,类型
- * 3 自动上传合法图片
- *
- * 说明:
- * 1 继发上传
- * 2 上传中不可删除图片,上传结束之后可以删除图片
- * 3 每一个图片上传都会触发开始上传、上传成功以及上传失败事件
- * 4 所有合法图片上传完成之后,以及删除图片时,都会触发完成事件。
- */
-
-const prefixCls = "cc-list-upload";
-
-export default {
-  name: "image-list-upload",
-  props: {
-    action: {
-      type: String,
-      default: "/backend/uploadImage"
-    },
-    multiple: {
-      type: Boolean,
-      default: true
-    },
-    headers: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    withCredentials: {
-      type: Boolean,
-      default: false
-    },
-    data: {
-      type: Object
-    },
-    name: {
-      type: String,
-      default: "file"
-    },
-    maxSize: {
-      type: Number,
-      default: 10 * 1024
-    },
-    rendFileUrl: {
-      type: Function,
-      default(fileInfo) {
-        return fileInfo.url;
-      }
-    }
-  },
-  data() {
-    return {
-      prefixCls,
-      fileList: [],
-      format: ["jpg", "jpeg", "png"],
-      limitNum: 10,
-      res: {
-        success: true,
-        msg: ""
-      },
-      isUploading: false
-    };
-  },
-  computed: {
-    limitSize() {
-      let mn = this.maxSize / 1024;
-      return mn >= 1 ? mn + "M" : this.maxSize + "Kb";
-    }
-  },
-  methods: {
-    initData() {
-      this.fileList = [];
-      this.uploadErrorFiles = [];
-      this.res = { success: true, msg: "" };
-      this.isUploading = false;
-    },
-    handleClick() {
-      if (this.isUploading) return;
-      this.$refs.fileInput.click();
-    },
-    handleChange(e) {
-      this.initFileList(e.target.files);
-    },
-    initFileList(files) {
-      if (!files) return;
-      if (files.length + this.fileList.length > this.limitNum) {
-        this.res = {
-          success: false,
-          msg: "文件数量不能超过" + this.limitNum
-        };
-        return;
-      }
-
-      const postFiles = Array.prototype.slice.call(files);
-
-      let fileList = [];
-      postFiles.forEach((el, i) => {
-        el.uid = Date.now() + i;
-        let { statusTips, valid } = this.checkFileValid(el);
-        fileList[i] = {
-          size: el.size,
-          name: el.name,
-          type: el.type,
-          percentage: 0,
-          uid: el.uid,
-          url: this.getFileUrl(el),
-          fileData: {},
-          files: el,
-          status: "init",
-          statusTips,
-          valid
-        };
-      });
-      this.fileList = [...this.fileList, ...fileList];
-      this.toUpload();
-    },
-    getFileUrl(file) {
-      const URL = window.URL || window.webkitURL;
-      if (URL && URL.createObjectURL) return URL.createObjectURL(file);
-      return "";
-    },
-    getFileItem(uid) {
-      return this.fileList.find(el => el.uid === uid);
-    },
-    clearData() {
-      this.$refs.fileInput.value = null;
-      this.fileList = [];
-    },
-    checkFileValid(fileItem) {
-      let result = {};
-      result = this.checkFileSize(fileItem);
-      if (!result.valid) return result;
-
-      result = this.checkFileFormat(fileItem);
-      if (!result.valid) return result;
-
-      return { valid: true, statusTips: "" };
-    },
-    checkFileSize(fileItem) {
-      const valid = fileItem.size / 1024 <= this.maxSize;
-      return {
-        statusTips: valid ? "" : "文件过大",
-        valid
-      };
-    },
-    checkFileFormat(fileItem) {
-      const formats = this.format.join("|");
-      const reg = `\\.(${formats})$`;
-      const pattern = new RegExp(reg, "i");
-
-      const valid = pattern.test(fileItem.name);
-      return {
-        statusTips: valid ? "" : "格式不对",
-        valid
-      };
-    },
-    handleRemove(index) {
-      this.fileList.splice(index, 1);
-      this.emitUploaded();
-      if (!this.fileList.length) this.clearData();
-    },
-    // action
-    async toUpload() {
-      if (this.isUploading) return;
-      this.isUploading = true;
-
-      this.fileList.map(item => {
-        if (item.status === "init" && item.valid) item.status = "ready";
-      });
-      // 上传队列,继发上传,返回失败文件
-      const queenFunc = async () => {
-        for (let fileItem of this.fileList) {
-          await this.upload(fileItem).catch(() => {});
-        }
-      };
-      // 开启上传
-      await queenFunc().catch(() => {});
-
-      this.isUploading = false;
-      this.emitUploaded();
-    },
-    async upload(fileItem) {
-      if (fileItem.status !== "ready") return;
-      this.$emit("upload-start", fileItem);
-
-      fileItem.status = "uploading";
-      let errorData = "";
-      const resData = await this.post(fileItem).catch(error => {
-        errorData = error;
-      });
-
-      if (resData) {
-        fileItem.status = "success";
-        fileItem.statusTips = "上传成功";
-        this.$emit("upload-success", resData, fileItem);
-      } else {
-        fileItem.status = "error";
-        fileItem.statusTips = "上传失败";
-        this.$emit("upload-error", errorData, fileItem);
-      }
-    },
-    post(fileItem) {
-      return new Promise((resolve, reject) => {
-        ajax({
-          headers: this.headers,
-          withCredentials: this.withCredentials,
-          file: fileItem.files,
-          data: this.data,
-          filename: this.name,
-          action: this.GLOBAL.domain + this.action,
-          onProgress: e => {
-            fileItem.percentage = e.percent || 0;
-          },
-          onSuccess: res => {
-            if (res.code === 0) {
-              resolve(res.data);
-            } else {
-              reject({ res, msg: res.message || "上传失败" });
-            }
-          },
-          onError: (err, res) => {
-            reject({ res, msg: "网络错误" });
-          }
-        });
-      });
-    },
-    emitUploaded() {
-      this.$emit(
-        "uploaded",
-        this.fileList.filter(el => el.status === "success" && el.valid)
-      );
-    }
-  }
-};
-</script>
+<template>
+  <div :class="['image-list-upload', prefixCls]">
+    <!-- message alert -->
+    <el-alert
+      :title="res.msg"
+      :type="res.success ? 'success' : 'error'"
+      v-if="res.msg"
+    >
+    </el-alert>
+    <!-- image-list -->
+    <div :class="[`${prefixCls}-list`]">
+      <div
+        v-for="(item, index) in fileList"
+        :class="[
+          `${prefixCls}-item`,
+          `${prefixCls}-item-${item.status}`,
+          { [`${prefixCls}-item-unvalid`]: !item.valid },
+        ]"
+        :key="index"
+      >
+        <div :class="[`${prefixCls}-box`, `${prefixCls}-info`]">
+          <img :src="item.url" :alt="item.name" />
+        </div>
+        <div :class="[`${prefixCls}-box`, `${prefixCls}-progress`]">
+          <el-progress
+            :percentage="item.percentage"
+            :stroke-width="8"
+            :show-text="false"
+          ></el-progress>
+        </div>
+        <div :class="[`${prefixCls}-box `, `${prefixCls}-action`]">
+          <i
+            :class="['el-icon-delete-solid', `${prefixCls}-del`]"
+            title="删除"
+            @click="handleRemove(index)"
+          ></i>
+        </div>
+        <div
+          :class="[
+            `${prefixCls}-tips`,
+            {
+              [`${prefixCls}-tips-success`]:
+                item.valid && item.status === 'success',
+              [`${prefixCls}-tips-error`]:
+                !item.valid || item.status === 'error',
+            },
+          ]"
+        >
+          <span>{{ item.statusTips }}</span>
+        </div>
+      </div>
+
+      <!-- upload add btn -->
+      <div
+        :class="[`${prefixCls}-item`]"
+        @click="handleClick"
+        title="点击添加图片"
+      >
+        <div :class="[`${prefixCls}-box`, `${prefixCls}-add`]">
+          <i class="el-icon-upload"></i>
+        </div>
+        <input
+          ref="fileInput"
+          type="file"
+          :class="[`${prefixCls}-input`]"
+          @change="handleChange"
+          :multiple="multiple"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import ajax from "../utils/ajax";
+
+/**
+ * 图片上传状态:
+ * init 初始状态
+ * ready 准备上传
+ * uploading 正在上传
+ * sucess 上传成功
+ * error 上传失败
+ *
+ * 图片上传流程:
+ * 1 选中图片
+ * 2 校验合法性:大小,类型
+ * 3 自动上传合法图片
+ *
+ * 说明:
+ * 1 继发上传
+ * 2 上传中不可删除图片,上传结束之后可以删除图片
+ * 3 每一个图片上传都会触发开始上传、上传成功以及上传失败事件
+ * 4 所有合法图片上传完成之后,以及删除图片时,都会触发完成事件。
+ */
+
+const prefixCls = "cc-list-upload";
+
+export default {
+  name: "image-list-upload",
+  props: {
+    action: {
+      type: String,
+      default: "/backend/uploadImage",
+    },
+    multiple: {
+      type: Boolean,
+      default: true,
+    },
+    headers: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    withCredentials: {
+      type: Boolean,
+      default: false,
+    },
+    data: {
+      type: Object,
+    },
+    name: {
+      type: String,
+      default: "file",
+    },
+    maxSize: {
+      type: Number,
+      default: 10 * 1024,
+    },
+    rendFileUrl: {
+      type: Function,
+      default(fileInfo) {
+        return fileInfo.url;
+      },
+    },
+  },
+  data() {
+    return {
+      prefixCls,
+      fileList: [],
+      format: ["jpg", "jpeg", "png"],
+      limitNum: 10,
+      res: {
+        success: true,
+        msg: "",
+      },
+      isUploading: false,
+    };
+  },
+  computed: {
+    limitSize() {
+      let mn = this.maxSize / 1024;
+      return mn >= 1 ? mn + "M" : this.maxSize + "Kb";
+    },
+  },
+  methods: {
+    initData() {
+      this.fileList = [];
+      this.uploadErrorFiles = [];
+      this.res = { success: true, msg: "" };
+      this.isUploading = false;
+    },
+    handleClick() {
+      if (this.isUploading) return;
+      this.$refs.fileInput.click();
+    },
+    handleChange(e) {
+      this.initFileList(e.target.files);
+    },
+    initFileList(files) {
+      if (!files) return;
+      if (files.length + this.fileList.length > this.limitNum) {
+        this.res = {
+          success: false,
+          msg: "文件数量不能超过" + this.limitNum,
+        };
+        return;
+      }
+
+      const postFiles = Array.prototype.slice.call(files);
+
+      let fileList = [];
+      postFiles.forEach((el, i) => {
+        el.uid = Date.now() + i;
+        let { statusTips, valid } = this.checkFileValid(el);
+        fileList[i] = {
+          size: el.size,
+          name: el.name,
+          type: el.type,
+          percentage: 0,
+          uid: el.uid,
+          url: this.getFileUrl(el),
+          fileData: {},
+          files: el,
+          status: "init",
+          statusTips,
+          valid,
+        };
+      });
+      this.fileList = [...this.fileList, ...fileList];
+      this.toUpload();
+    },
+    getFileUrl(file) {
+      const URL = window.URL || window.webkitURL;
+      if (URL && URL.createObjectURL) return URL.createObjectURL(file);
+      return "";
+    },
+    getFileItem(uid) {
+      return this.fileList.find((el) => el.uid === uid);
+    },
+    clearData() {
+      this.$refs.fileInput.value = null;
+      this.fileList = [];
+    },
+    checkFileValid(fileItem) {
+      let result = {};
+      result = this.checkFileSize(fileItem);
+      if (!result.valid) return result;
+
+      result = this.checkFileFormat(fileItem);
+      if (!result.valid) return result;
+
+      return { valid: true, statusTips: "" };
+    },
+    checkFileSize(fileItem) {
+      const valid = fileItem.size / 1024 <= this.maxSize;
+      return {
+        statusTips: valid ? "" : "文件过大",
+        valid,
+      };
+    },
+    checkFileFormat(fileItem) {
+      const formats = this.format.join("|");
+      const reg = `\\.(${formats})$`;
+      const pattern = new RegExp(reg, "i");
+
+      const valid = pattern.test(fileItem.name);
+      return {
+        statusTips: valid ? "" : "格式不对",
+        valid,
+      };
+    },
+    handleRemove(index) {
+      this.fileList.splice(index, 1);
+      this.emitUploaded();
+      if (!this.fileList.length) this.clearData();
+    },
+    // action
+    async toUpload() {
+      if (this.isUploading) return;
+      this.isUploading = true;
+
+      this.fileList.map((item) => {
+        if (item.status === "init" && item.valid) item.status = "ready";
+      });
+      // 上传队列,继发上传,返回失败文件
+      const queenFunc = async () => {
+        for (let fileItem of this.fileList) {
+          await this.upload(fileItem).catch(() => {});
+        }
+      };
+      // 开启上传
+      await queenFunc().catch(() => {});
+
+      this.isUploading = false;
+      this.emitUploaded();
+    },
+    async upload(fileItem) {
+      if (fileItem.status !== "ready") return;
+      this.$emit("upload-start", fileItem);
+
+      fileItem.status = "uploading";
+      let errorData = "";
+      const resData = await this.post(fileItem).catch((error) => {
+        errorData = error;
+      });
+
+      if (resData) {
+        fileItem.status = "success";
+        fileItem.statusTips = "上传成功";
+        this.$emit("upload-success", resData, fileItem);
+      } else {
+        fileItem.status = "error";
+        fileItem.statusTips = "上传失败";
+        this.$emit("upload-error", errorData, fileItem);
+      }
+    },
+    post(fileItem) {
+      return new Promise((resolve, reject) => {
+        ajax({
+          headers: this.headers,
+          withCredentials: this.withCredentials,
+          file: fileItem.files,
+          data: this.data,
+          filename: this.name,
+          action: this.GLOBAL.domain + this.action,
+          onProgress: (e) => {
+            fileItem.percentage = e.percent || 0;
+          },
+          onSuccess: (res) => {
+            if (res.code === 0) {
+              resolve(res.data);
+            } else {
+              reject({ res, msg: res.message || "上传失败" });
+            }
+          },
+          onError: (err, res) => {
+            reject({ res, msg: "网络错误" });
+          },
+        });
+      });
+    },
+    emitUploaded() {
+      this.$emit(
+        "uploaded",
+        this.fileList.filter((el) => el.status === "success" && el.valid)
+      );
+    },
+  },
+};
+</script>

+ 2 - 2
src/components/common/ImageListUpload/index.js

@@ -1,2 +1,2 @@
-import ImageListUpload from "./ImageListUpload.vue";
-export default ImageListUpload;
+import ImageListUpload from "./ImageListUpload.vue";
+export default ImageListUpload;

+ 47 - 47
src/components/common/ImageListUpload/intro.md

@@ -1,47 +1,47 @@
-# ImageListUpload api
-
-## 实例
-
-```html
-<template>
-  <div class="image-list-upload-instance part-box">
-    <image-list-upload></image-list-upload>
-  </div>
-</template>
-
-<script>
-import ImageListUpload from "@/components/common/ImageListUpload";
-
-export default {
-  name: "image-list-upload-instance",
-  components: { ImageListUpload },
-  data() {
-    return {};
-  },
-  methods: {}
-};
-</script>
-```
-
-## props
-
-| 属性             | 说明                     | 类型     | 默认值              |
-| ---------------- | ------------------------ | -------- | ------------------- |
-| action           | 上传的地址,必填         | String   | -                   |
-| multiple         | 支持多文件上传           | Boolean  | true                |
-| headers          | 设置上传的请求头部       | Object   | {}                  |
-| with-credentials | 支持发送 cookie 凭证信息 | Boolean  | false               |
-| data             | 上传时附带的额外参数     | Object   | -                   |
-| name             | 上传的文件字段名         | String   | file                |
-| max-size         | 文件大小限制,单位 kb    | Number   | 10 * 1024           |
-| rendFileUrl      | 上传完后图片解析路径     | Function | return fileInfo.url |
-
-
-## events
-
-| 事件名         | 说明                           | 返回值                       |
-| -------------- | ------------------------------ | ---------------------------- |
-| upload-start   | 文件开始开始上传时的回调       | fileItem:当前上传文件的对象 |
-| upload-success | 文件开始上传成功时的回调       | res, fileItem                |
-| upload-error   | 文件开始上传失败时的回调       | error, fileItem              |
-| uploaded       | 所有合法文件上传成功之后的回调 | fileList                     |
+# ImageListUpload api
+
+## 实例
+
+```html
+<template>
+  <div class="image-list-upload-instance part-box">
+    <image-list-upload></image-list-upload>
+  </div>
+</template>
+
+<script>
+import ImageListUpload from "@/components/common/ImageListUpload";
+
+export default {
+  name: "image-list-upload-instance",
+  components: { ImageListUpload },
+  data() {
+    return {};
+  },
+  methods: {}
+};
+</script>
+```
+
+## props
+
+| 属性             | 说明                     | 类型     | 默认值              |
+| ---------------- | ------------------------ | -------- | ------------------- |
+| action           | 上传的地址,必填         | String   | -                   |
+| multiple         | 支持多文件上传           | Boolean  | true                |
+| headers          | 设置上传的请求头部       | Object   | {}                  |
+| with-credentials | 支持发送 cookie 凭证信息 | Boolean  | false               |
+| data             | 上传时附带的额外参数     | Object   | -                   |
+| name             | 上传的文件字段名         | String   | file                |
+| max-size         | 文件大小限制,单位 kb    | Number   | 10 * 1024           |
+| rendFileUrl      | 上传完后图片解析路径     | Function | return fileInfo.url |
+
+
+## events
+
+| 事件名         | 说明                           | 返回值                       |
+| -------------- | ------------------------------ | ---------------------------- |
+| upload-start   | 文件开始开始上传时的回调       | fileItem:当前上传文件的对象 |
+| upload-success | 文件开始上传成功时的回调       | res, fileItem                |
+| upload-error   | 文件开始上传失败时的回调       | error, fileItem              |
+| uploaded       | 所有合法文件上传成功之后的回调 | fileList                     |

+ 312 - 312
src/components/common/ImagePreview/ImagePreview.vue

@@ -1,312 +1,312 @@
-<template>
-  <el-dialog
-    :class="prefixCls"
-    :visible.sync="modalIsShow"
-    title="图片预览"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    :show-close="false"
-    fullscreen
-    append-to-body
-    @open="visibleChange"
-  >
-    <div slot="footer"></div>
-    <div slot="title"></div>
-
-    <div :class="[`${prefixCls}-close`]" @click="modalIsShow = false">
-      <i class="el-icon-circle-close"></i>
-    </div>
-    <div :class="[`${prefixCls}-header`]" v-if="!headerHide">
-      <h3>{{ curFile.name }}</h3>
-      <div :class="[`${prefixCls}-index`]">
-        {{ this.curIndex }} / {{ this.lastIndex }}
-      </div>
-    </div>
-    <div :class="[`${prefixCls}-body`]" ref="ReviewBody">
-      <div
-        :class="[`${prefixCls}-guide`, `${prefixCls}-guide-prev`]"
-        @click="showPrev"
-      >
-        <i class="el-icon-arrow-left"></i>
-      </div>
-      <div
-        :class="[`${prefixCls}-guide`, `${prefixCls}-guide-next`]"
-        @click="showNext"
-      >
-        <i class="el-icon-arrow-right"></i>
-      </div>
-      <div
-        :class="[
-          `${prefixCls}-imgs`,
-          { [`${prefixCls}-imgs-nosition`]: nosition }
-        ]"
-        :style="styles"
-        v-move-ele.prevent="{ mouseMove }"
-      >
-        <img
-          :src="curFile.url"
-          :alt="curFile.name"
-          v-if="curFile.url"
-          ref="PreviewImgDetail"
-        />
-      </div>
-    </div>
-    <div :class="[`${prefixCls}-footer`]">
-      <ul>
-        <li title="合适大小" @click="toOrigin">
-          <i class="el-icon-full-screen"></i>
-        </li>
-        <li
-          title="放大"
-          @click="toMagnify"
-          :class="{
-            'li-disabled': transform.scale === maxScale
-          }"
-        >
-          <i class="el-icon-zoom-in"></i>
-        </li>
-        <li
-          title="缩小"
-          @click="toShrink"
-          :class="{
-            'li-disabled': transform.scale === minScale
-          }"
-        >
-          <i class="el-icon-zoom-out"></i>
-        </li>
-        <li title="旋转" @click="toRotate">
-          <i class="el-icon-refresh-right"></i>
-        </li>
-      </ul>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import MoveEle from "./move-ele";
-
-const prefixCls = "cc-image-preview";
-
-export default {
-  name: "image-preview",
-  props: {
-    imageList: {
-      type: Array,
-      default() {
-        return [];
-      }
-    },
-    initIndex: {
-      type: Number,
-      default: 0
-    },
-    headerHide: {
-      type: Boolean,
-      default: false
-    }
-  },
-  directives: {
-    MoveEle
-  },
-  data() {
-    return {
-      prefixCls,
-      modalIsShow: false,
-      curFile: { name: "", url: null },
-      curIndex: 1,
-      minScale: 0.2,
-      maxScale: 3,
-      styles: { width: "", height: "", top: "100px", left: "", transform: "" },
-      initWidth: 500,
-      transform: {
-        scale: 1,
-        rotate: 0
-      },
-      nosition: false
-    };
-  },
-  computed: {
-    isFirst() {
-      return this.curIndex === 1;
-    },
-    isLast() {
-      return this.lastIndex === this.curIndex;
-    },
-    lastIndex() {
-      return this.imageList.length;
-    }
-  },
-  watch: {
-    curIndex: {
-      immediate: true,
-      handler(val, oldVal) {
-        this.curFileChange(val);
-      }
-    }
-  },
-  methods: {
-    visibleChange() {
-      if (!this.imageList.length) return;
-      this.curIndex = this.initIndex + 1;
-    },
-    curFileChange(val) {
-      this.nosition = true;
-      this.curFile = this.imageList[val - 1];
-      this.$nextTick(() => {
-        this.fileLoad();
-      });
-    },
-    setCurIndex(index) {
-      this.curIndex = index;
-    },
-    fileLoad() {
-      const imgDom = this.$refs.PreviewImgDetail;
-      if (!imgDom) return;
-
-      imgDom.onload = () => {
-        const { naturalWidth, naturalHeight } = imgDom;
-        const imageSize = this.getImageSizePos({
-          win: {
-            width: this.$refs.ReviewBody.clientWidth,
-            height: this.$refs.ReviewBody.clientHeight
-          },
-          img: {
-            width: naturalWidth,
-            height: naturalHeight
-          },
-          rotate: 0
-        });
-
-        this.styles = Object.assign(this.styles, {
-          width: imageSize.width + "px",
-          height: imageSize.height + "px",
-          top: imageSize.top + "px",
-          left: imageSize.left + "px",
-          transform: ""
-        });
-        this.transform = {
-          scale: 1,
-          rotate: 0
-        };
-        setTimeout(() => {
-          this.nosition = false;
-        }, 100);
-      };
-    },
-    getImageSizePos({ win, img, rotate }) {
-      const imageSize = {
-        width: 0,
-        height: 0,
-        top: 0,
-        left: 0
-      };
-      const isHorizontal = !!(rotate % 180);
-
-      const rateWin = isHorizontal
-        ? win.height / win.width
-        : win.width / win.height;
-      const hwin = isHorizontal
-        ? {
-            width: win.height,
-            height: win.width
-          }
-        : win;
-
-      const rateImg = img.width / img.height;
-
-      if (rateImg <= rateWin) {
-        imageSize.height = Math.min(hwin.height, img.height);
-        imageSize.width = Math.floor(
-          (imageSize.height * img.width) / img.height
-        );
-      } else {
-        imageSize.width = Math.min(hwin.width, img.width);
-        imageSize.height = Math.floor(
-          (imageSize.width * img.height) / img.width
-        );
-      }
-      imageSize.left = (win.width - imageSize.width) / 2;
-      imageSize.top = (win.height - imageSize.height) / 2;
-      return imageSize;
-    },
-    cancel() {
-      this.modalIsShow = false;
-    },
-    open() {
-      this.modalIsShow = true;
-    },
-    showPrev() {
-      if (this.isFirst) {
-        this.curIndex = this.lastIndex;
-      } else {
-        this.curIndex -= 1;
-      }
-    },
-    showNext() {
-      if (this.isLast) {
-        this.curIndex = 1;
-      } else {
-        this.curIndex += 1;
-      }
-    },
-    // dome-move
-    mouseMove({ left, top }) {
-      this.styles.left = left + "px";
-      this.styles.top = top + "px";
-    },
-    setStyleTransform() {
-      const { scale, rotate } = this.transform;
-      this.styles.transform = `scale(${scale}, ${scale}) rotate(${rotate}deg)`;
-    },
-    toOrigin() {
-      this.transform.scale = 1;
-      this.setStyleTransform();
-    },
-    toMagnify() {
-      const scale = (this.transform.scale * 1.2).toFixed(2);
-      this.transform.scale = scale >= this.maxScale ? this.maxScale : scale;
-      this.setStyleTransform();
-    },
-    toShrink() {
-      const scale = (this.transform.scale * 0.75).toFixed(2);
-      this.transform.scale = scale <= this.minScale ? this.minScale : scale;
-      this.setStyleTransform();
-    },
-    toRotate() {
-      this.transform.rotate = this.transform.rotate + 90;
-      this.setStyleTransform();
-      // 调整图片尺寸
-      const { naturalWidth, naturalHeight } = this.$refs.PreviewImgDetail;
-      const imageSize = this.getImageSizePos({
-        win: {
-          width: this.$refs.ReviewBody.clientWidth,
-          height: this.$refs.ReviewBody.clientHeight
-        },
-        img: {
-          width: naturalWidth,
-          height: naturalHeight
-        },
-        rotate: this.transform.rotate
-      });
-
-      this.styles = Object.assign(this.styles, {
-        width: imageSize.width + "px",
-        height: imageSize.height + "px",
-        top: imageSize.top + "px",
-        left: imageSize.left + "px"
-      });
-      // 360度无缝切换到0度
-      setTimeout(() => {
-        if (this.transform.rotate >= 360) {
-          this.nosition = true;
-          this.transform.rotate = 0;
-          this.setStyleTransform();
-          setTimeout(() => {
-            this.nosition = false;
-          }, 100);
-        }
-      }, 200);
-    }
-  }
-};
-</script>
+<template>
+  <el-dialog
+    :class="prefixCls"
+    :visible.sync="modalIsShow"
+    title="图片预览"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    :show-close="false"
+    fullscreen
+    append-to-body
+    @open="visibleChange"
+  >
+    <div slot="footer"></div>
+    <div slot="title"></div>
+
+    <div :class="[`${prefixCls}-close`]" @click="modalIsShow = false">
+      <i class="el-icon-circle-close"></i>
+    </div>
+    <div :class="[`${prefixCls}-header`]" v-if="!headerHide">
+      <h3>{{ curFile.name }}</h3>
+      <div :class="[`${prefixCls}-index`]">
+        {{ this.curIndex }} / {{ this.lastIndex }}
+      </div>
+    </div>
+    <div :class="[`${prefixCls}-body`]" ref="ReviewBody">
+      <div
+        :class="[`${prefixCls}-guide`, `${prefixCls}-guide-prev`]"
+        @click="showPrev"
+      >
+        <i class="el-icon-arrow-left"></i>
+      </div>
+      <div
+        :class="[`${prefixCls}-guide`, `${prefixCls}-guide-next`]"
+        @click="showNext"
+      >
+        <i class="el-icon-arrow-right"></i>
+      </div>
+      <div
+        :class="[
+          `${prefixCls}-imgs`,
+          { [`${prefixCls}-imgs-nosition`]: nosition },
+        ]"
+        :style="styles"
+        v-move-ele.prevent="{ mouseMove }"
+      >
+        <img
+          :src="curFile.url"
+          :alt="curFile.name"
+          v-if="curFile.url"
+          ref="PreviewImgDetail"
+        />
+      </div>
+    </div>
+    <div :class="[`${prefixCls}-footer`]">
+      <ul>
+        <li title="合适大小" @click="toOrigin">
+          <i class="el-icon-full-screen"></i>
+        </li>
+        <li
+          title="放大"
+          @click="toMagnify"
+          :class="{
+            'li-disabled': transform.scale === maxScale,
+          }"
+        >
+          <i class="el-icon-zoom-in"></i>
+        </li>
+        <li
+          title="缩小"
+          @click="toShrink"
+          :class="{
+            'li-disabled': transform.scale === minScale,
+          }"
+        >
+          <i class="el-icon-zoom-out"></i>
+        </li>
+        <li title="旋转" @click="toRotate">
+          <i class="el-icon-refresh-right"></i>
+        </li>
+      </ul>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import MoveEle from "./move-ele";
+
+const prefixCls = "cc-image-preview";
+
+export default {
+  name: "image-preview",
+  props: {
+    imageList: {
+      type: Array,
+      default() {
+        return [];
+      },
+    },
+    initIndex: {
+      type: Number,
+      default: 0,
+    },
+    headerHide: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  directives: {
+    MoveEle,
+  },
+  data() {
+    return {
+      prefixCls,
+      modalIsShow: false,
+      curFile: { name: "", url: null },
+      curIndex: 1,
+      minScale: 0.2,
+      maxScale: 3,
+      styles: { width: "", height: "", top: "100px", left: "", transform: "" },
+      initWidth: 500,
+      transform: {
+        scale: 1,
+        rotate: 0,
+      },
+      nosition: false,
+    };
+  },
+  computed: {
+    isFirst() {
+      return this.curIndex === 1;
+    },
+    isLast() {
+      return this.lastIndex === this.curIndex;
+    },
+    lastIndex() {
+      return this.imageList.length;
+    },
+  },
+  watch: {
+    curIndex: {
+      immediate: true,
+      handler(val, oldVal) {
+        this.curFileChange(val);
+      },
+    },
+  },
+  methods: {
+    visibleChange() {
+      if (!this.imageList.length) return;
+      this.curIndex = this.initIndex + 1;
+    },
+    curFileChange(val) {
+      this.nosition = true;
+      this.curFile = this.imageList[val - 1];
+      this.$nextTick(() => {
+        this.fileLoad();
+      });
+    },
+    setCurIndex(index) {
+      this.curIndex = index;
+    },
+    fileLoad() {
+      const imgDom = this.$refs.PreviewImgDetail;
+      if (!imgDom) return;
+
+      imgDom.onload = () => {
+        const { naturalWidth, naturalHeight } = imgDom;
+        const imageSize = this.getImageSizePos({
+          win: {
+            width: this.$refs.ReviewBody.clientWidth,
+            height: this.$refs.ReviewBody.clientHeight,
+          },
+          img: {
+            width: naturalWidth,
+            height: naturalHeight,
+          },
+          rotate: 0,
+        });
+
+        this.styles = Object.assign(this.styles, {
+          width: imageSize.width + "px",
+          height: imageSize.height + "px",
+          top: imageSize.top + "px",
+          left: imageSize.left + "px",
+          transform: "",
+        });
+        this.transform = {
+          scale: 1,
+          rotate: 0,
+        };
+        setTimeout(() => {
+          this.nosition = false;
+        }, 100);
+      };
+    },
+    getImageSizePos({ win, img, rotate }) {
+      const imageSize = {
+        width: 0,
+        height: 0,
+        top: 0,
+        left: 0,
+      };
+      const isHorizontal = !!(rotate % 180);
+
+      const rateWin = isHorizontal
+        ? win.height / win.width
+        : win.width / win.height;
+      const hwin = isHorizontal
+        ? {
+            width: win.height,
+            height: win.width,
+          }
+        : win;
+
+      const rateImg = img.width / img.height;
+
+      if (rateImg <= rateWin) {
+        imageSize.height = Math.min(hwin.height, img.height);
+        imageSize.width = Math.floor(
+          (imageSize.height * img.width) / img.height
+        );
+      } else {
+        imageSize.width = Math.min(hwin.width, img.width);
+        imageSize.height = Math.floor(
+          (imageSize.width * img.height) / img.width
+        );
+      }
+      imageSize.left = (win.width - imageSize.width) / 2;
+      imageSize.top = (win.height - imageSize.height) / 2;
+      return imageSize;
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    showPrev() {
+      if (this.isFirst) {
+        this.curIndex = this.lastIndex;
+      } else {
+        this.curIndex -= 1;
+      }
+    },
+    showNext() {
+      if (this.isLast) {
+        this.curIndex = 1;
+      } else {
+        this.curIndex += 1;
+      }
+    },
+    // dome-move
+    mouseMove({ left, top }) {
+      this.styles.left = left + "px";
+      this.styles.top = top + "px";
+    },
+    setStyleTransform() {
+      const { scale, rotate } = this.transform;
+      this.styles.transform = `scale(${scale}, ${scale}) rotate(${rotate}deg)`;
+    },
+    toOrigin() {
+      this.transform.scale = 1;
+      this.setStyleTransform();
+    },
+    toMagnify() {
+      const scale = (this.transform.scale * 1.2).toFixed(2);
+      this.transform.scale = scale >= this.maxScale ? this.maxScale : scale;
+      this.setStyleTransform();
+    },
+    toShrink() {
+      const scale = (this.transform.scale * 0.75).toFixed(2);
+      this.transform.scale = scale <= this.minScale ? this.minScale : scale;
+      this.setStyleTransform();
+    },
+    toRotate() {
+      this.transform.rotate = this.transform.rotate + 90;
+      this.setStyleTransform();
+      // 调整图片尺寸
+      const { naturalWidth, naturalHeight } = this.$refs.PreviewImgDetail;
+      const imageSize = this.getImageSizePos({
+        win: {
+          width: this.$refs.ReviewBody.clientWidth,
+          height: this.$refs.ReviewBody.clientHeight,
+        },
+        img: {
+          width: naturalWidth,
+          height: naturalHeight,
+        },
+        rotate: this.transform.rotate,
+      });
+
+      this.styles = Object.assign(this.styles, {
+        width: imageSize.width + "px",
+        height: imageSize.height + "px",
+        top: imageSize.top + "px",
+        left: imageSize.left + "px",
+      });
+      // 360度无缝切换到0度
+      setTimeout(() => {
+        if (this.transform.rotate >= 360) {
+          this.nosition = true;
+          this.transform.rotate = 0;
+          this.setStyleTransform();
+          setTimeout(() => {
+            this.nosition = false;
+          }, 100);
+        }
+      }, 200);
+    },
+  },
+};
+</script>

+ 2 - 2
src/components/common/ImagePreview/index.js

@@ -1,2 +1,2 @@
-import ImagePreview from "./ImagePreview.vue";
-export default ImagePreview;
+import ImagePreview from "./ImagePreview.vue";
+export default ImagePreview;

+ 51 - 51
src/components/common/ImagePreview/move-ele.js

@@ -1,51 +1,51 @@
-export default {
-  inserted(el, { value, modifiers }, vnode) {
-    let [_x, _y] = [0, 0];
-    // 当前拖动事务开始前元素的left,top
-    let [oleft, otop] = [0, 0];
-    // 元素移动后的left,top
-    let [left, top] = [0, 0];
-
-    let moveHandle = function(e) {
-      if (modifiers.prevent) {
-        e.preventDefault();
-      }
-      left = oleft + e.pageX - _x;
-      top = otop + e.pageY - _y;
-
-      if (value && value.mouseMove) {
-        value.mouseMove({ left, top });
-      } else {
-        el.style.left = left + "px";
-        el.style.top = top + "px";
-      }
-    };
-
-    let upHandle = function(e) {
-      if (modifiers.prevent) {
-        e.preventDefault();
-      }
-      oleft = left;
-      otop = top;
-
-      if (value && value.mouseUp) value.mouseUp({ oleft, otop });
-
-      document.removeEventListener("mousemove", moveHandle);
-      document.removeEventListener("mouseup", upHandle);
-    };
-
-    el.addEventListener("mousedown", function(e) {
-      if (modifiers.prevent) {
-        e.preventDefault();
-      }
-      _x = e.pageX;
-      _y = e.pageY;
-      oleft = el.offsetLeft;
-      otop = el.offsetTop;
-      if (value && value.mouseDown) value.mouseDown({ oleft, otop });
-
-      document.addEventListener("mousemove", moveHandle);
-      document.addEventListener("mouseup", upHandle);
-    });
-  }
-};
+export default {
+  inserted(el, { value, modifiers }, vnode) {
+    let [_x, _y] = [0, 0];
+    // 当前拖动事务开始前元素的left,top
+    let [oleft, otop] = [0, 0];
+    // 元素移动后的left,top
+    let [left, top] = [0, 0];
+
+    let moveHandle = function (e) {
+      if (modifiers.prevent) {
+        e.preventDefault();
+      }
+      left = oleft + e.pageX - _x;
+      top = otop + e.pageY - _y;
+
+      if (value && value.mouseMove) {
+        value.mouseMove({ left, top });
+      } else {
+        el.style.left = left + "px";
+        el.style.top = top + "px";
+      }
+    };
+
+    let upHandle = function (e) {
+      if (modifiers.prevent) {
+        e.preventDefault();
+      }
+      oleft = left;
+      otop = top;
+
+      if (value && value.mouseUp) value.mouseUp({ oleft, otop });
+
+      document.removeEventListener("mousemove", moveHandle);
+      document.removeEventListener("mouseup", upHandle);
+    };
+
+    el.addEventListener("mousedown", function (e) {
+      if (modifiers.prevent) {
+        e.preventDefault();
+      }
+      _x = e.pageX;
+      _y = e.pageY;
+      oleft = el.offsetLeft;
+      otop = el.offsetTop;
+      if (value && value.mouseDown) value.mouseDown({ oleft, otop });
+
+      document.addEventListener("mousemove", moveHandle);
+      document.addEventListener("mouseup", upHandle);
+    });
+  },
+};

+ 187 - 190
src/components/common/ImportFile/ImportFile.vue

@@ -1,190 +1,187 @@
-<template>
-  <div :class="prefixCls">
-    <el-dialog
-      class="modify-data"
-      :visible.sync="modalIsShow"
-      :title="title"
-      top="10vh"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-      append-to-body
-      @open="visibleChange"
-    >
-      <div style="footer"></div>
-      <div :class="[`${prefixCls}-body`]">
-        <el-upload
-          drag
-          :action="uploadUrl"
-          :headers="headers"
-          :max-size="maxSize"
-          :format="format"
-          :accept="accept"
-          :data="uploadData"
-          :before-upload="handleBeforeUpload"
-          :on-error="handleError"
-          :on-success="handleSuccess"
-          :on-remove="handleRemove"
-          ref="UploadComp"
-        >
-          <i class="el-icon-upload"></i><br />
-          <em class="el-upload__text">将文件拖到此处,或<em>点击上传</em></em>
-          <p
-            slot="tip"
-            :class="[
-              `${prefixCls}-tips`,
-              {
-                'cc-tips-success': res.success,
-                'cc-tips-error': !res.success
-              }
-            ]"
-            v-if="res.msg"
-          >
-            {{ res.msg }}
-          </p>
-        </el-upload>
-      </div>
-      <div :class="[`${prefixCls}-footer`]" v-if="downloadUrl">
-        文件下载:
-        <a :href="downloadUrl" :download="dfilename">{{ dfilename }}</a>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-const prefixCls = "cc-import-file";
-
-export default {
-  name: "import-file",
-  props: {
-    title: {
-      type: String,
-      default: "文件上传"
-    },
-    downloadUrl: {
-      type: String,
-      default: ""
-    },
-    downloadFilename: String,
-    format: {
-      type: Array,
-      default() {
-        return ["jpg", "jpeg", "png"];
-      }
-    },
-    uploadUrl: {
-      type: String,
-      required: true
-    },
-    uploadData: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    headers: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    maxSize: {
-      type: Number,
-      default: 20 * 1024 * 1024
-    },
-    addFilenameParam: {
-      type: String,
-      default: "fileName"
-    }
-  },
-  data() {
-    return {
-      prefixCls,
-      modalIsShow: false,
-      res: {
-        success: true,
-        msg: ""
-      }
-    };
-  },
-  computed: {
-    dfilename() {
-      return this.downloadFilename || this.downloadUrl.split("/").pop();
-    },
-    accept() {
-      return this.format.map(el => `.${el}`).join();
-    }
-  },
-  methods: {
-    visibleChange() {
-      this.res = {
-        success: true,
-        msg: ""
-      };
-    },
-    checkFileFormat(fileType) {
-      const _file_format = fileType
-        .split("/")
-        .pop()
-        .toLocaleLowerCase();
-      return this.format.some(
-        item => item.toLocaleLowerCase() === _file_format
-      );
-    },
-    handleBeforeUpload(file) {
-      if (this.addFilenameParam)
-        this.uploadData[this.addFilenameParam] = file.name;
-
-      if (file.size > this.maxSize) {
-        this.handleExceededSize();
-        return Promise.reject();
-      }
-
-      if (!this.checkFileFormat(file.type)) {
-        this.handleFormatError();
-        return Promise.reject();
-      }
-
-      return true;
-    },
-    handleError(error) {
-      this.res = {
-        success: false,
-        msg: error.message
-      };
-      this.$emit("upload-error", error);
-    },
-    handleSuccess(response) {
-      this.res = {
-        success: true,
-        msg: "导入成功!"
-      };
-      this.$emit("upload-success", response);
-    },
-    handleFormatError() {
-      this.res = {
-        success: false,
-        msg: "只支持文件格式为" + this.format.join("/")
-      };
-      this.$refs.UploadComp.clearFiles();
-    },
-    handleExceededSize() {
-      this.res = {
-        success: false,
-        msg: "文件大小不能超过" + Math.floor(this.maxSize / 1024) + "M"
-      };
-      this.$refs.UploadComp.clearFiles();
-    },
-    handleRemove() {
-      this.$refs.UploadComp.abort();
-      this.$refs.UploadComp.clearFiles();
-    },
-    cancel() {
-      this.modalIsShow = false;
-    },
-    open() {
-      this.modalIsShow = true;
-    }
-  }
-};
-</script>
+<template>
+  <div :class="prefixCls">
+    <el-dialog
+      class="modify-data"
+      :visible.sync="modalIsShow"
+      :title="title"
+      top="10vh"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      append-to-body
+      @open="visibleChange"
+    >
+      <div style="footer"></div>
+      <div :class="[`${prefixCls}-body`]">
+        <el-upload
+          drag
+          :action="uploadUrl"
+          :headers="headers"
+          :max-size="maxSize"
+          :format="format"
+          :accept="accept"
+          :data="uploadData"
+          :before-upload="handleBeforeUpload"
+          :on-error="handleError"
+          :on-success="handleSuccess"
+          :on-remove="handleRemove"
+          ref="UploadComp"
+        >
+          <i class="el-icon-upload"></i><br />
+          <em class="el-upload__text">将文件拖到此处,或<em>点击上传</em></em>
+          <p
+            slot="tip"
+            :class="[
+              `${prefixCls}-tips`,
+              {
+                'cc-tips-success': res.success,
+                'cc-tips-error': !res.success,
+              },
+            ]"
+            v-if="res.msg"
+          >
+            {{ res.msg }}
+          </p>
+        </el-upload>
+      </div>
+      <div :class="[`${prefixCls}-footer`]" v-if="downloadUrl">
+        文件下载:
+        <a :href="downloadUrl" :download="dfilename">{{ dfilename }}</a>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+const prefixCls = "cc-import-file";
+
+export default {
+  name: "import-file",
+  props: {
+    title: {
+      type: String,
+      default: "文件上传",
+    },
+    downloadUrl: {
+      type: String,
+      default: "",
+    },
+    downloadFilename: String,
+    format: {
+      type: Array,
+      default() {
+        return ["jpg", "jpeg", "png"];
+      },
+    },
+    uploadUrl: {
+      type: String,
+      required: true,
+    },
+    uploadData: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    headers: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    maxSize: {
+      type: Number,
+      default: 20 * 1024 * 1024,
+    },
+    addFilenameParam: {
+      type: String,
+      default: "fileName",
+    },
+  },
+  data() {
+    return {
+      prefixCls,
+      modalIsShow: false,
+      res: {
+        success: true,
+        msg: "",
+      },
+    };
+  },
+  computed: {
+    dfilename() {
+      return this.downloadFilename || this.downloadUrl.split("/").pop();
+    },
+    accept() {
+      return this.format.map((el) => `.${el}`).join();
+    },
+  },
+  methods: {
+    visibleChange() {
+      this.res = {
+        success: true,
+        msg: "",
+      };
+    },
+    checkFileFormat(fileType) {
+      const _file_format = fileType.split("/").pop().toLocaleLowerCase();
+      return this.format.some(
+        (item) => item.toLocaleLowerCase() === _file_format
+      );
+    },
+    handleBeforeUpload(file) {
+      if (this.addFilenameParam)
+        this.uploadData[this.addFilenameParam] = file.name;
+
+      if (file.size > this.maxSize) {
+        this.handleExceededSize();
+        return Promise.reject();
+      }
+
+      if (!this.checkFileFormat(file.type)) {
+        this.handleFormatError();
+        return Promise.reject();
+      }
+
+      return true;
+    },
+    handleError(error) {
+      this.res = {
+        success: false,
+        msg: error.message,
+      };
+      this.$emit("upload-error", error);
+    },
+    handleSuccess(response) {
+      this.res = {
+        success: true,
+        msg: "导入成功!",
+      };
+      this.$emit("upload-success", response);
+    },
+    handleFormatError() {
+      this.res = {
+        success: false,
+        msg: "只支持文件格式为" + this.format.join("/"),
+      };
+      this.$refs.UploadComp.clearFiles();
+    },
+    handleExceededSize() {
+      this.res = {
+        success: false,
+        msg: "文件大小不能超过" + Math.floor(this.maxSize / 1024) + "M",
+      };
+      this.$refs.UploadComp.clearFiles();
+    },
+    handleRemove() {
+      this.$refs.UploadComp.abort();
+      this.$refs.UploadComp.clearFiles();
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+  },
+};
+</script>

+ 2 - 2
src/components/common/ImportFile/index.js

@@ -1,2 +1,2 @@
-import ImportFile from "./ImportFile.vue";
-export default ImportFile;
+import ImportFile from "./ImportFile.vue";
+export default ImportFile;

+ 74 - 74
src/components/common/ImportFile/intro.md

@@ -1,74 +1,74 @@
-# ImportFile api
-
-## 实例
-
-```html
-<template>
-  <div class="demo">
-    <button type="primary" @click="open">to upload</button>
-
-    <import-file
-      :title="title"
-      :upload-url="uploadUrl"
-      :download-url="downloadUrl"
-      :download-filename="downloadFilename"
-      :headers="headers"
-      :format="['xls', 'xlsx']"
-      @confirm="fileUploaded"
-      ref="ImportFile"
-    >
-    </import-file>
-  </div>
-</template>
-
-<script>
-  import ImportFile from "@/components/common/ImportFile";
-
-  export default {
-    name: "demo",
-    components: {
-      ImportFile
-    },
-    data() {
-      return {
-        title: "导入文件",
-        uploadUrl: this.GLOBAL.domain + "yourUploadPath",
-        uploadData: {},
-        downloadFilename: "要下载的文件.xls",
-        downloadUrl: "/path/要下载的文件.xls",
-        headers: {
-          Authorization: "token"
-        }
-      };
-    },
-    methods: {
-      open() {
-        this.$refs.ImportFile.modalIsShow = true;
-      },
-      fileUploaded(file) {
-        // file:上传文件的url地址
-        console.log(file);
-      }
-    }
-  };
-</script>
-```
-
-## ImportFile props
-
-| 属性             | 说明                                               | 类型   | 默认值         |
-| ---------------- | -------------------------------------------------- | ------ | -------------- |
-| title            | 标题文字                                           | String | 文件上传       |
-| downloadUrl      | 要下载的文件地址                                   | String | -              |
-| downloadFilename | 要下载的文件名称,默认是 downloadUrl 所指向的文件名 | String | -              |
-| format           | 支持上传的文件格式                                 | Array  | ["jpg", "png"] |
-| uploadUrl        | 上传地址,必须                                     | String | -              |
-| uploadData       | 上传时额外的数据                                   | Object | {}             |
-| headers          | 上传时添加的 headers 信息                          | Object | {}             |
-| maxSize          | 限制的文件大小,单位 kb                            | Number | 10 \* 1024     |
-
-## ImportFile events
-
-| 事件名  | 说明                   | 返回值                       |
-| ------- | ---------------------- | ---------------------------- |
-| confirm | 确认文件上传时触发事件 | fileUrl:上传文件的 url 地址 |
+# ImportFile api
+
+## 实例
+
+```html
+<template>
+  <div class="demo">
+    <button type="primary" @click="open">to upload</button>
+
+    <import-file
+      :title="title"
+      :upload-url="uploadUrl"
+      :download-url="downloadUrl"
+      :download-filename="downloadFilename"
+      :headers="headers"
+      :format="['xls', 'xlsx']"
+      @confirm="fileUploaded"
+      ref="ImportFile"
+    >
+    </import-file>
+  </div>
+</template>
+
+<script>
+  import ImportFile from "@/components/common/ImportFile";
+
+  export default {
+    name: "demo",
+    components: {
+      ImportFile
+    },
+    data() {
+      return {
+        title: "导入文件",
+        uploadUrl: this.GLOBAL.domain + "yourUploadPath",
+        uploadData: {},
+        downloadFilename: "要下载的文件.xls",
+        downloadUrl: "/path/要下载的文件.xls",
+        headers: {
+          Authorization: "token"
+        }
+      };
+    },
+    methods: {
+      open() {
+        this.$refs.ImportFile.modalIsShow = true;
+      },
+      fileUploaded(file) {
+        // file:上传文件的url地址
+        console.log(file);
+      }
+    }
+  };
+</script>
+```
+
+## ImportFile props
+
+| 属性             | 说明                                               | 类型   | 默认值         |
+| ---------------- | -------------------------------------------------- | ------ | -------------- |
+| title            | 标题文字                                           | String | 文件上传       |
+| downloadUrl      | 要下载的文件地址                                   | String | -              |
+| downloadFilename | 要下载的文件名称,默认是 downloadUrl 所指向的文件名 | String | -              |
+| format           | 支持上传的文件格式                                 | Array  | ["jpg", "png"] |
+| uploadUrl        | 上传地址,必须                                     | String | -              |
+| uploadData       | 上传时额外的数据                                   | Object | {}             |
+| headers          | 上传时添加的 headers 信息                          | Object | {}             |
+| maxSize          | 限制的文件大小,单位 kb                            | Number | 10 \* 1024     |
+
+## ImportFile events
+
+| 事件名  | 说明                   | 返回值                       |
+| ------- | ---------------------- | ---------------------------- |
+| confirm | 确认文件上传时触发事件 | fileUrl:上传文件的 url 地址 |

+ 72 - 72
src/components/common/LabelFilter/LabelFilter.vue

@@ -1,72 +1,72 @@
-<template>
-  <div class="label-filter">
-    <label-select
-      v-model="filter.color"
-      label="颜色"
-      :options="colorList"
-      :label-width="60"
-      @on-change="colorChange"
-    ></label-select>
-    <label-select
-      v-model="filter.size"
-      label="尺码"
-      :options="sizeList"
-      :label-width="60"
-      @on-change="colorChange"
-      multiple
-    ></label-select>
-
-    <div class="label-list">
-      {{ strFilter }}
-    </div>
-  </div>
-</template>
-
-<script>
-import LabelSelect from "./LabelSelect";
-
-const colorList = "#"
-  .repeat(6)
-  .split("")
-  .map((item, index) => {
-    return {
-      id: index + 1,
-      name: "红色" + (index + 1)
-    };
-  });
-
-const sizeList = "#"
-  .repeat(6)
-  .split("")
-  .map((item, index) => {
-    return {
-      id: index + 1,
-      name: "大号" + (index + 1)
-    };
-  });
-
-export default {
-  name: "label-filter",
-  components: { LabelSelect },
-  data() {
-    return {
-      filter: {
-        color: "",
-        size: ""
-      },
-      colorList: colorList,
-      sizeList: sizeList
-    };
-  },
-  computed: {
-    strFilter() {
-      return JSON.stringify(this.filter);
-    }
-  },
-  methods: {
-    colorChange(val) {
-      console.log(val);
-    }
-  }
-};
-</script>
+<template>
+  <div class="label-filter">
+    <label-select
+      v-model="filter.color"
+      label="颜色"
+      :options="colorList"
+      :label-width="60"
+      @on-change="colorChange"
+    ></label-select>
+    <label-select
+      v-model="filter.size"
+      label="尺码"
+      :options="sizeList"
+      :label-width="60"
+      @on-change="colorChange"
+      multiple
+    ></label-select>
+
+    <div class="label-list">
+      {{ strFilter }}
+    </div>
+  </div>
+</template>
+
+<script>
+import LabelSelect from "./LabelSelect";
+
+const colorList = "#"
+  .repeat(6)
+  .split("")
+  .map((item, index) => {
+    return {
+      id: index + 1,
+      name: "红色" + (index + 1),
+    };
+  });
+
+const sizeList = "#"
+  .repeat(6)
+  .split("")
+  .map((item, index) => {
+    return {
+      id: index + 1,
+      name: "大号" + (index + 1),
+    };
+  });
+
+export default {
+  name: "label-filter",
+  components: { LabelSelect },
+  data() {
+    return {
+      filter: {
+        color: "",
+        size: "",
+      },
+      colorList: colorList,
+      sizeList: sizeList,
+    };
+  },
+  computed: {
+    strFilter() {
+      return JSON.stringify(this.filter);
+    },
+  },
+  methods: {
+    colorChange(val) {
+      console.log(val);
+    },
+  },
+};
+</script>

+ 205 - 205
src/components/common/LabelFilter/LabelSelect.vue

@@ -1,205 +1,205 @@
-<template>
-  <div :class="['label-select', prefixCls]">
-    <span
-      :class="[`${prefixCls}-label`]"
-      v-if="labelIsShow"
-      :style="labelStyles"
-      >{{ label }}</span
-    >
-    <ul :class="[`${prefixCls}-options`]" :style="optionsStyles">
-      <li
-        :class="{
-          [`${prefixCls}-selected`]: !selectedIds.length
-        }"
-        @click="selectAll"
-        v-if="showAllOptionTag"
-      >
-        全部
-      </li>
-      <li
-        v-for="(item, index) in optionList"
-        :key="index"
-        :class="{
-          [`${prefixCls}-selected`]: item.selected,
-          [`${prefixCls}-disabled`]: item.disabled
-        }"
-        @click="select(item)"
-      >
-        {{ item.name }}
-      </li>
-    </ul>
-  </div>
-</template>
-
-<script>
-const prefixCls = "cc-labels";
-
-export default {
-  name: "label-select",
-  props: {
-    value: {
-      type: [String, Number, Array]
-    },
-    label: {
-      type: String
-    },
-    labelWidth: {
-      type: Number
-    },
-    labelIsShow: {
-      type: Boolean,
-      default: true
-    },
-    showAllOptionTag: {
-      type: Boolean,
-      default: true
-    },
-    multiple: {
-      type: Boolean,
-      default: false
-    },
-    optionKey: {
-      type: String,
-      default: "id"
-    },
-    options: {
-      type: Array,
-      default() {
-        return [];
-      }
-    },
-    costom: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      prefixCls,
-      selectedIds: [],
-      optionList: []
-    };
-  },
-  computed: {
-    labelStyles() {
-      const width =
-        this.labelWidth || this.labelWidth === 0 ? this.labelWidth : 60;
-
-      return {
-        width: `${width}px`
-      };
-    },
-    optionsStyles() {
-      const width =
-        this.labelWidth || this.labelWidth === 0 ? this.labelWidth : 60;
-
-      return {
-        marginLeft: `${width}px`
-      };
-    }
-  },
-  watch: {
-    options: {
-      immediate: true,
-      handler(val) {
-        this.optionList = val.map(item => {
-          return {
-            ...item,
-            selected: this.selectedIds.indexOf(item[this.optionKey]) !== -1
-          };
-        });
-      }
-    },
-    value: {
-      immediate: true,
-      handler(val) {
-        if (this.multiple) {
-          this.selectedIds = val ? [...val] : [];
-        } else {
-          this.selectedIds = val ? [val] : [];
-        }
-        this.actOptions();
-      }
-    }
-  },
-  methods: {
-    select(option) {
-      const optkey = option[this.optionKey];
-      if (this.multiple) {
-        option.selected = !option.selected;
-        const optPoz = this.selectedIds.indexOf(optkey);
-        if (optPoz === -1) {
-          this.selectedIds.push(optkey);
-        } else {
-          this.selectedIds.splice(optPoz, 1);
-        }
-      } else {
-        this.optionList.map(item => {
-          item.selected = optkey === item[this.optionKey];
-        });
-        this.selectedIds = [optkey];
-      }
-      this.emitSelect();
-    },
-    actOptions() {
-      this.optionList.map(item => {
-        item.selected = this.selectedIds.indexOf(item[this.optionKey]) !== -1;
-      });
-    },
-    selectAll() {
-      this.optionList.map(item => (item.selected = false));
-      this.selectedIds = [];
-      this.emitSelect();
-    },
-    emitSelect() {
-      const selectOptions = this.optionList.filter(
-        item => this.selectedIds.indexOf(item[this.optionKey]) !== -1
-      );
-      this.$emit(
-        "input",
-        this.multiple ? this.selectedIds : this.selectedIds[0]
-      );
-      this.$emit("on-change", selectOptions);
-    }
-  }
-};
-</script>
-
-<style lang="css">
-.label-select {
-  margin-bottom: 8px;
-}
-.label-label {
-  display: block;
-  float: left;
-  height: 24px;
-  line-height: 24px;
-  font-size: 14px;
-  padding-right: 20px;
-  font-weight: 600;
-}
-.label-options {
-  margin-left: 60px;
-}
-.label-options li {
-  display: inline-block;
-  vertical-align: top;
-  margin: 0 5px 5px 0;
-  height: 24px;
-  line-height: 24px;
-  padding: 0 10px;
-  border-radius: 3px;
-  cursor: pointer;
-}
-.label-options li:hover {
-  color: #409eff;
-}
-.label-options li.label-selected {
-  background: #409eff;
-  color: #fff;
-}
-.label-options li.label-disabled {
-  color: #909399;
-  cursor: not-allowed;
-}
-</style>
+<template>
+  <div :class="['label-select', prefixCls]">
+    <span
+      :class="[`${prefixCls}-label`]"
+      v-if="labelIsShow"
+      :style="labelStyles"
+      >{{ label }}</span
+    >
+    <ul :class="[`${prefixCls}-options`]" :style="optionsStyles">
+      <li
+        :class="{
+          [`${prefixCls}-selected`]: !selectedIds.length,
+        }"
+        @click="selectAll"
+        v-if="showAllOptionTag"
+      >
+        全部
+      </li>
+      <li
+        v-for="(item, index) in optionList"
+        :key="index"
+        :class="{
+          [`${prefixCls}-selected`]: item.selected,
+          [`${prefixCls}-disabled`]: item.disabled,
+        }"
+        @click="select(item)"
+      >
+        {{ item.name }}
+      </li>
+    </ul>
+  </div>
+</template>
+
+<script>
+const prefixCls = "cc-labels";
+
+export default {
+  name: "label-select",
+  props: {
+    value: {
+      type: [String, Number, Array],
+    },
+    label: {
+      type: String,
+    },
+    labelWidth: {
+      type: Number,
+    },
+    labelIsShow: {
+      type: Boolean,
+      default: true,
+    },
+    showAllOptionTag: {
+      type: Boolean,
+      default: true,
+    },
+    multiple: {
+      type: Boolean,
+      default: false,
+    },
+    optionKey: {
+      type: String,
+      default: "id",
+    },
+    options: {
+      type: Array,
+      default() {
+        return [];
+      },
+    },
+    costom: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      prefixCls,
+      selectedIds: [],
+      optionList: [],
+    };
+  },
+  computed: {
+    labelStyles() {
+      const width =
+        this.labelWidth || this.labelWidth === 0 ? this.labelWidth : 60;
+
+      return {
+        width: `${width}px`,
+      };
+    },
+    optionsStyles() {
+      const width =
+        this.labelWidth || this.labelWidth === 0 ? this.labelWidth : 60;
+
+      return {
+        marginLeft: `${width}px`,
+      };
+    },
+  },
+  watch: {
+    options: {
+      immediate: true,
+      handler(val) {
+        this.optionList = val.map((item) => {
+          return {
+            ...item,
+            selected: this.selectedIds.indexOf(item[this.optionKey]) !== -1,
+          };
+        });
+      },
+    },
+    value: {
+      immediate: true,
+      handler(val) {
+        if (this.multiple) {
+          this.selectedIds = val ? [...val] : [];
+        } else {
+          this.selectedIds = val ? [val] : [];
+        }
+        this.actOptions();
+      },
+    },
+  },
+  methods: {
+    select(option) {
+      const optkey = option[this.optionKey];
+      if (this.multiple) {
+        option.selected = !option.selected;
+        const optPoz = this.selectedIds.indexOf(optkey);
+        if (optPoz === -1) {
+          this.selectedIds.push(optkey);
+        } else {
+          this.selectedIds.splice(optPoz, 1);
+        }
+      } else {
+        this.optionList.map((item) => {
+          item.selected = optkey === item[this.optionKey];
+        });
+        this.selectedIds = [optkey];
+      }
+      this.emitSelect();
+    },
+    actOptions() {
+      this.optionList.map((item) => {
+        item.selected = this.selectedIds.indexOf(item[this.optionKey]) !== -1;
+      });
+    },
+    selectAll() {
+      this.optionList.map((item) => (item.selected = false));
+      this.selectedIds = [];
+      this.emitSelect();
+    },
+    emitSelect() {
+      const selectOptions = this.optionList.filter(
+        (item) => this.selectedIds.indexOf(item[this.optionKey]) !== -1
+      );
+      this.$emit(
+        "input",
+        this.multiple ? this.selectedIds : this.selectedIds[0]
+      );
+      this.$emit("on-change", selectOptions);
+    },
+  },
+};
+</script>
+
+<style lang="css">
+.label-select {
+  margin-bottom: 8px;
+}
+.label-label {
+  display: block;
+  float: left;
+  height: 24px;
+  line-height: 24px;
+  font-size: 14px;
+  padding-right: 20px;
+  font-weight: 600;
+}
+.label-options {
+  margin-left: 60px;
+}
+.label-options li {
+  display: inline-block;
+  vertical-align: top;
+  margin: 0 5px 5px 0;
+  height: 24px;
+  line-height: 24px;
+  padding: 0 10px;
+  border-radius: 3px;
+  cursor: pointer;
+}
+.label-options li:hover {
+  color: #409eff;
+}
+.label-options li.label-selected {
+  background: #409eff;
+  color: #fff;
+}
+.label-options li.label-disabled {
+  color: #909399;
+  cursor: not-allowed;
+}
+</style>

+ 281 - 283
src/components/common/RichTextEditor/RichTextEditor.vue

@@ -1,283 +1,281 @@
-<template>
-  <div class="rich-text-editor cc-editor">
-    <quill-editor
-      :id="editorId"
-      :content="content"
-      ref="QuillEditor"
-      @change="onEditorChange"
-      :options="options"
-    ></quill-editor>
-    <input
-      style="display: none"
-      :id="uniqueInputId"
-      type="file"
-      name="fileinput"
-      @change="uploadImg"
-    />
-    <el-progress
-      :percentage="percentage"
-      :stroke-width="2"
-      :show-text="false"
-    ></el-progress>
-  </div>
-</template>
-
-<script>
-// 文档:https://github.com/surmon-china/vue-quill-editor
-import ajax from "../utils/ajax";
-import Quill from "quill";
-import Delta from "quill-delta";
-import { quillEditor } from "vue-quill-editor";
-import "quill/dist/quill.snow.css";
-import ImageResize from "quill-image-resize-module";
-Quill.register("modules/imageResize", ImageResize);
-
-export default {
-  name: "rich-text-editor",
-  props: {
-    value: String,
-    // upload
-    action: {
-      type: String,
-      required: true
-    },
-    headers: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    withCredentials: {
-      type: Boolean,
-      default: false
-    },
-    data: {
-      type: Object
-    },
-    name: {
-      type: String,
-      default: "file"
-    },
-    maxSize: {
-      type: Number,
-      default: 2 * 1024
-    },
-    rendFileUrl: {
-      type: Function,
-      default(fileInfo) {
-        return fileInfo;
-      }
-    },
-    onUploadSuccess: {
-      type: Function,
-      default() {
-        return {};
-      }
-    },
-    onUploadError: {
-      type: Function,
-      default() {
-        return {};
-      }
-    }
-  },
-  components: {
-    quillEditor
-  },
-  data() {
-    return {
-      content: "",
-      iframeSrc: "",
-      options: {
-        placeholder: "请输入内容",
-        modules: {
-          toolbar: [
-            ["bold", "italic", "underline", "strike"],
-            ["blockquote", "code-block"],
-            [{ list: "ordered" }, { list: "bullet" }],
-            [{ script: "sub" }, { script: "super" }],
-            [{ indent: "-1" }, { indent: "+1" }, { direction: "rtl" }],
-            [{ size: ["small", false, "large", "huge"] }],
-            [{ header: [1, 2, 3, 4, 5, 6, false] }],
-            [{ color: [] }, { background: [] }, { align: [] }],
-            ["clean", "link", "image"]
-          ],
-          imageResize: true,
-          history: {
-            delay: 1000,
-            maxStack: 50,
-            userOnly: false
-          }
-        }
-      },
-      percentage: 0,
-      uniqueInputId: "",
-      uploadImages: [],
-      editorId: "",
-      // math-modal
-      src: "",
-      mathModalIsShow: false
-    };
-  },
-  computed: {
-    editor() {
-      return this.$refs.QuillEditor.quill;
-    }
-  },
-  watch: {
-    value(val) {
-      this.content = val;
-    }
-  },
-  mounted() {
-    const serno = Math.random()
-      .toString(16)
-      .slice(-8);
-    this.editorId = "rich-text-editor-" + serno;
-    this.uniqueInputId = "file-input-" + serno;
-
-    this.registImageHandle();
-    this.registPasteEvent();
-    this.content = this.value;
-  },
-  methods: {
-    registPasteEvent() {
-      const inputBox = this.$el.querySelector(".ql-editor");
-      inputBox.addEventListener("paste", e => {
-        e.preventDefault();
-        let items = e.clipboardData ? e.clipboardData.items : [];
-        if (!items || !items.length) return;
-
-        for (let i = 0; i < items.length; i++) {
-          let item = items[i];
-          if (
-            item &&
-            item.kind === "string" &&
-            item.type.match(/^text\/plain/i)
-          ) {
-            this.textPasteHandle(item);
-            break;
-          } else if (
-            item &&
-            item.kind === "file" &&
-            item.type.match(/^image\//i)
-          ) {
-            this.imgPasteHandle(item);
-            break;
-          }
-        }
-      });
-    },
-    textPasteHandle(item) {
-      item.getAsString(content => {
-        this.insertText(content);
-      });
-    },
-    imgPasteHandle(item) {
-      let file = item.getAsFile();
-
-      // 展示文件
-      // const reader = new FileReader();
-      // reader.onload = e => {
-      //   this.insertImg(e.target.result);
-      // };
-      // reader.readAsDataURL(file);
-
-      this.upload(file)
-        .then(rep => {
-          const fileUrl = this.rendFileUrl(rep);
-          this.insertImg(fileUrl);
-          this.onUploadSuccess(fileUrl);
-        })
-        .catch(error => {
-          this.onUploadError(error);
-        });
-    },
-    registImageHandle() {
-      let that = this;
-      let imgHandler = async state => {
-        if (state) {
-          let fileInput = document.getElementById(that.uniqueInputId);
-          fileInput.click();
-        }
-      };
-      that.editor.getModule("toolbar").addHandler("image", imgHandler);
-    },
-    onEditorChange() {
-      this.$emit("input", this.content);
-    },
-    uploadImg() {
-      let file = document.getElementById(this.uniqueInputId).files[0];
-      this.upload(file)
-        .then(rep => {
-          const fileUrl = this.rendFileUrl(rep);
-          this.insertImg(fileUrl);
-          this.onUploadSuccess(fileUrl);
-        })
-        .catch(error => {
-          this.onUploadError(error);
-        });
-    },
-    getSelectionIndex() {
-      this.editor.focus();
-      const selectionRange = this.editor.getSelection();
-      if (selectionRange && selectionRange.length)
-        this.editor.deleteText(selectionRange.index, selectionRange.length);
-
-      return selectionRange ? selectionRange.index : 0;
-    },
-    insertText(content) {
-      const index = this.getSelectionIndex();
-      this.editor.insertEmbed(index, "text", content, "user");
-    },
-    insertImg(url, alt) {
-      const index = this.getSelectionIndex();
-      let delta = this.editor.insertEmbed(index, "image", url, "user");
-      this.editor.setSelection(index + 1);
-      if (alt) {
-        let retain = delta.ops[0].retain;
-        this.editor.updateContents(
-          new Delta().retain(retain).retain(1, { alt })
-        );
-      }
-    },
-    base64ToBlob(base64Str) {
-      var bytes = atob(base64Str.split(",")[1]);
-      let arr = new Uint8Array(bytes.length);
-      for (let i = 0; i < bytes.length; i++) {
-        arr[i] = bytes.charCodeAt(i);
-      }
-      return new Blob([arr], { type: "image/png" });
-    },
-    upload(file) {
-      if (file.size > this.maxSize * 1024) {
-        return Promise.reject({ msg: "图片过大,请重新编辑!" });
-      }
-      return new Promise((resolve, reject) => {
-        ajax({
-          headers: this.headers,
-          withCredentials: this.withCredentials,
-          file: file,
-          data: this.data,
-          filename: this.name,
-          action: this.action,
-          onProgress: e => {
-            this.percentage = e.percent || 0;
-            if (this.percentage === 100) {
-              setTimeout(() => {
-                this.percentage = 0;
-              }, 300);
-            }
-          },
-          onSuccess: res => {
-            resolve(res);
-          },
-          onError: (err, response) => {
-            reject({ err, response });
-          }
-        });
-      });
-    }
-  }
-};
-</script>
+<template>
+  <div class="rich-text-editor cc-editor">
+    <quill-editor
+      :id="editorId"
+      :content="content"
+      ref="QuillEditor"
+      @change="onEditorChange"
+      :options="options"
+    ></quill-editor>
+    <input
+      style="display: none"
+      :id="uniqueInputId"
+      type="file"
+      name="fileinput"
+      @change="uploadImg"
+    />
+    <el-progress
+      :percentage="percentage"
+      :stroke-width="2"
+      :show-text="false"
+    ></el-progress>
+  </div>
+</template>
+
+<script>
+// 文档:https://github.com/surmon-china/vue-quill-editor
+import ajax from "../utils/ajax";
+import Quill from "quill";
+import Delta from "quill-delta";
+import { quillEditor } from "vue-quill-editor";
+import "quill/dist/quill.snow.css";
+import ImageResize from "quill-image-resize-module";
+Quill.register("modules/imageResize", ImageResize);
+
+export default {
+  name: "rich-text-editor",
+  props: {
+    value: String,
+    // upload
+    action: {
+      type: String,
+      required: true,
+    },
+    headers: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    withCredentials: {
+      type: Boolean,
+      default: false,
+    },
+    data: {
+      type: Object,
+    },
+    name: {
+      type: String,
+      default: "file",
+    },
+    maxSize: {
+      type: Number,
+      default: 2 * 1024,
+    },
+    rendFileUrl: {
+      type: Function,
+      default(fileInfo) {
+        return fileInfo;
+      },
+    },
+    onUploadSuccess: {
+      type: Function,
+      default() {
+        return {};
+      },
+    },
+    onUploadError: {
+      type: Function,
+      default() {
+        return {};
+      },
+    },
+  },
+  components: {
+    quillEditor,
+  },
+  data() {
+    return {
+      content: "",
+      iframeSrc: "",
+      options: {
+        placeholder: "请输入内容",
+        modules: {
+          toolbar: [
+            ["bold", "italic", "underline", "strike"],
+            ["blockquote", "code-block"],
+            [{ list: "ordered" }, { list: "bullet" }],
+            [{ script: "sub" }, { script: "super" }],
+            [{ indent: "-1" }, { indent: "+1" }, { direction: "rtl" }],
+            [{ size: ["small", false, "large", "huge"] }],
+            [{ header: [1, 2, 3, 4, 5, 6, false] }],
+            [{ color: [] }, { background: [] }, { align: [] }],
+            ["clean", "link", "image"],
+          ],
+          imageResize: true,
+          history: {
+            delay: 1000,
+            maxStack: 50,
+            userOnly: false,
+          },
+        },
+      },
+      percentage: 0,
+      uniqueInputId: "",
+      uploadImages: [],
+      editorId: "",
+      // math-modal
+      src: "",
+      mathModalIsShow: false,
+    };
+  },
+  computed: {
+    editor() {
+      return this.$refs.QuillEditor.quill;
+    },
+  },
+  watch: {
+    value(val) {
+      this.content = val;
+    },
+  },
+  mounted() {
+    const serno = Math.random().toString(16).slice(-8);
+    this.editorId = "rich-text-editor-" + serno;
+    this.uniqueInputId = "file-input-" + serno;
+
+    this.registImageHandle();
+    this.registPasteEvent();
+    this.content = this.value;
+  },
+  methods: {
+    registPasteEvent() {
+      const inputBox = this.$el.querySelector(".ql-editor");
+      inputBox.addEventListener("paste", (e) => {
+        e.preventDefault();
+        let items = e.clipboardData ? e.clipboardData.items : [];
+        if (!items || !items.length) return;
+
+        for (let i = 0; i < items.length; i++) {
+          let item = items[i];
+          if (
+            item &&
+            item.kind === "string" &&
+            item.type.match(/^text\/plain/i)
+          ) {
+            this.textPasteHandle(item);
+            break;
+          } else if (
+            item &&
+            item.kind === "file" &&
+            item.type.match(/^image\//i)
+          ) {
+            this.imgPasteHandle(item);
+            break;
+          }
+        }
+      });
+    },
+    textPasteHandle(item) {
+      item.getAsString((content) => {
+        this.insertText(content);
+      });
+    },
+    imgPasteHandle(item) {
+      let file = item.getAsFile();
+
+      // 展示文件
+      // const reader = new FileReader();
+      // reader.onload = e => {
+      //   this.insertImg(e.target.result);
+      // };
+      // reader.readAsDataURL(file);
+
+      this.upload(file)
+        .then((rep) => {
+          const fileUrl = this.rendFileUrl(rep);
+          this.insertImg(fileUrl);
+          this.onUploadSuccess(fileUrl);
+        })
+        .catch((error) => {
+          this.onUploadError(error);
+        });
+    },
+    registImageHandle() {
+      let that = this;
+      let imgHandler = async (state) => {
+        if (state) {
+          let fileInput = document.getElementById(that.uniqueInputId);
+          fileInput.click();
+        }
+      };
+      that.editor.getModule("toolbar").addHandler("image", imgHandler);
+    },
+    onEditorChange() {
+      this.$emit("input", this.content);
+    },
+    uploadImg() {
+      let file = document.getElementById(this.uniqueInputId).files[0];
+      this.upload(file)
+        .then((rep) => {
+          const fileUrl = this.rendFileUrl(rep);
+          this.insertImg(fileUrl);
+          this.onUploadSuccess(fileUrl);
+        })
+        .catch((error) => {
+          this.onUploadError(error);
+        });
+    },
+    getSelectionIndex() {
+      this.editor.focus();
+      const selectionRange = this.editor.getSelection();
+      if (selectionRange && selectionRange.length)
+        this.editor.deleteText(selectionRange.index, selectionRange.length);
+
+      return selectionRange ? selectionRange.index : 0;
+    },
+    insertText(content) {
+      const index = this.getSelectionIndex();
+      this.editor.insertEmbed(index, "text", content, "user");
+    },
+    insertImg(url, alt) {
+      const index = this.getSelectionIndex();
+      let delta = this.editor.insertEmbed(index, "image", url, "user");
+      this.editor.setSelection(index + 1);
+      if (alt) {
+        let retain = delta.ops[0].retain;
+        this.editor.updateContents(
+          new Delta().retain(retain).retain(1, { alt })
+        );
+      }
+    },
+    base64ToBlob(base64Str) {
+      var bytes = atob(base64Str.split(",")[1]);
+      let arr = new Uint8Array(bytes.length);
+      for (let i = 0; i < bytes.length; i++) {
+        arr[i] = bytes.charCodeAt(i);
+      }
+      return new Blob([arr], { type: "image/png" });
+    },
+    upload(file) {
+      if (file.size > this.maxSize * 1024) {
+        return Promise.reject({ msg: "图片过大,请重新编辑!" });
+      }
+      return new Promise((resolve, reject) => {
+        ajax({
+          headers: this.headers,
+          withCredentials: this.withCredentials,
+          file: file,
+          data: this.data,
+          filename: this.name,
+          action: this.action,
+          onProgress: (e) => {
+            this.percentage = e.percent || 0;
+            if (this.percentage === 100) {
+              setTimeout(() => {
+                this.percentage = 0;
+              }, 300);
+            }
+          },
+          onSuccess: (res) => {
+            resolve(res);
+          },
+          onError: (err, response) => {
+            reject({ err, response });
+          },
+        });
+      });
+    },
+  },
+};
+</script>

+ 2 - 2
src/components/common/RichTextEditor/index.js

@@ -1,2 +1,2 @@
-import RichTextEditor from "./RichTextEditor.vue";
-export default RichTextEditor;
+import RichTextEditor from "./RichTextEditor.vue";
+export default RichTextEditor;

+ 104 - 104
src/components/common/RichTextEditor/intro.md

@@ -1,104 +1,104 @@
-# RickEdit api
-
-- [官方git地址](https://github.com/surmon-china/vue-quill-editor)
-
-## 实例
-
-```html
-<template>
-  <div class="demo">
-    <rich-editor v-model="content" :headers="headers" :action="action" :rend-file-url="rendFileUrl" ref="RichEditor"></rich-editor>
-  </div>
-</template>
-
-<script>
-import RichEditor from "@/components/common/RichEditor";
-
-export default {
-  name: "demo",
-  components: {
-    RichEditor
-  },
-  computed: {
-    editor() {
-      // editor实例,实质时quill对象
-      return this.$refs.RichEditor.editor;
-    }
-  },
-  data() {
-    return {
-      content: "<p>这是一段默认内容</p>",
-      headers: {},
-      action: ""
-    };
-  },
-  mounted() {
-    this.headers = {
-      Authorization: "token"
-    };
-    this.action = "file upload url";
-  },
-  methods: {
-    rendFileUrl(rep) {
-      return 'file-url'
-    }
-  }
-};
-</script>
-```
-
-## RickEdit props
-
-| 属性              | 说明                                                      | 类型     | 默认值   |
-| ----------------- | --------------------------------------------------------- | -------- | -------- |
-| value             | 配合v-model实现文本数据的双向绑定                         | String   | -        |
-| action            | 上传文件的api地址                                         | String   | -        |
-| headers           | 上传文件的header信息                                      | Object   | {}       |
-| max-size          | 上传文件大小限制,单位kb                                   | Number   | 2 * 1024 |
-| rend-file-url     | 上传文件成功后,解析文件路径的方法,参数rep为response对象 | Function | {}       |
-| name              | 上传文件的字段名                                          | String   | file     |
-| on-upload-success | 上传文件成功后的回调方法                                  | Function | {}       |
-| on-upload-error   | 上传文件失败后的回调方法,参数error信息                   | Function | {}       |
-
-
-## 插件说明:
-
-### 1. 图片缩放插件
-
-- 官方推荐插件:[quill-image-resize-module](https://github.com/kensnyder/quill-image-resize-module)
-- **Tips:** quill-image-resize-module若按官方提供的方式引入会有问题。调整后的方式如下:
-
-**载入图片缩放插件**
-
-- `vue.config.js`文件中加入如下代码
- 
-```bash
-configureWebpack: {
-    plugins: [
-      new webpack.ProvidePlugin({
-        'window.Quill': 'quill/dist/quill.js',
-        Quill: 'quill/dist/quill.js'
-      })
-    ]
-  }
-```
-
-- 引入插件
-
-```bash
-import Quill from "quill";
-import ImageResize from "quill-image-resize-module";
-Quill.register("modules/imageResize", ImageResize);
-```
-
-- 配置插件
-
-```bash
-options: {
- modules: {
-   imageResize: true
- }
-}
-```
-
-- **Tips:** 如果不需要图片缩放插件,则可以删除相应的文件及代码。
+# RickEdit api
+
+- [官方git地址](https://github.com/surmon-china/vue-quill-editor)
+
+## 实例
+
+```html
+<template>
+  <div class="demo">
+    <rich-editor v-model="content" :headers="headers" :action="action" :rend-file-url="rendFileUrl" ref="RichEditor"></rich-editor>
+  </div>
+</template>
+
+<script>
+import RichEditor from "@/components/common/RichEditor";
+
+export default {
+  name: "demo",
+  components: {
+    RichEditor
+  },
+  computed: {
+    editor() {
+      // editor实例,实质时quill对象
+      return this.$refs.RichEditor.editor;
+    }
+  },
+  data() {
+    return {
+      content: "<p>这是一段默认内容</p>",
+      headers: {},
+      action: ""
+    };
+  },
+  mounted() {
+    this.headers = {
+      Authorization: "token"
+    };
+    this.action = "file upload url";
+  },
+  methods: {
+    rendFileUrl(rep) {
+      return 'file-url'
+    }
+  }
+};
+</script>
+```
+
+## RickEdit props
+
+| 属性              | 说明                                                      | 类型     | 默认值   |
+| ----------------- | --------------------------------------------------------- | -------- | -------- |
+| value             | 配合v-model实现文本数据的双向绑定                         | String   | -        |
+| action            | 上传文件的api地址                                         | String   | -        |
+| headers           | 上传文件的header信息                                      | Object   | {}       |
+| max-size          | 上传文件大小限制,单位kb                                   | Number   | 2 * 1024 |
+| rend-file-url     | 上传文件成功后,解析文件路径的方法,参数rep为response对象 | Function | {}       |
+| name              | 上传文件的字段名                                          | String   | file     |
+| on-upload-success | 上传文件成功后的回调方法                                  | Function | {}       |
+| on-upload-error   | 上传文件失败后的回调方法,参数error信息                   | Function | {}       |
+
+
+## 插件说明:
+
+### 1. 图片缩放插件
+
+- 官方推荐插件:[quill-image-resize-module](https://github.com/kensnyder/quill-image-resize-module)
+- **Tips:** quill-image-resize-module若按官方提供的方式引入会有问题。调整后的方式如下:
+
+**载入图片缩放插件**
+
+- `vue.config.js`文件中加入如下代码
+ 
+```bash
+configureWebpack: {
+    plugins: [
+      new webpack.ProvidePlugin({
+        'window.Quill': 'quill/dist/quill.js',
+        Quill: 'quill/dist/quill.js'
+      })
+    ]
+  }
+```
+
+- 引入插件
+
+```bash
+import Quill from "quill";
+import ImageResize from "quill-image-resize-module";
+Quill.register("modules/imageResize", ImageResize);
+```
+
+- 配置插件
+
+```bash
+options: {
+ modules: {
+   imageResize: true
+ }
+}
+```
+
+- **Tips:** 如果不需要图片缩放插件,则可以删除相应的文件及代码。

+ 26 - 28
src/components/common/StepsProgress/StepFour.vue

@@ -1,28 +1,26 @@
-<template>
-  <div class="step-four">
-    step-four
-  </div>
-</template>
-
-<script>
-export default {
-  name: "step-four",
-  data() {
-    return {};
-  },
-  mounted() {
-    setTimeout(() => {
-      // 提交步骤准备就绪事件
-      this.$emit("on-ready");
-    }, 500);
-  },
-  methods: {
-    checkValid() {
-      // some code
-
-      // 提交可执行下一步操作事件
-      this.$emit("on-next");
-    }
-  }
-};
-</script>
+<template>
+  <div class="step-four">step-four</div>
+</template>
+
+<script>
+export default {
+  name: "step-four",
+  data() {
+    return {};
+  },
+  mounted() {
+    setTimeout(() => {
+      // 提交步骤准备就绪事件
+      this.$emit("on-ready");
+    }, 500);
+  },
+  methods: {
+    checkValid() {
+      // some code
+
+      // 提交可执行下一步操作事件
+      this.$emit("on-next");
+    },
+  },
+};
+</script>

+ 26 - 28
src/components/common/StepsProgress/StepOne.vue

@@ -1,28 +1,26 @@
-<template>
-  <div class="step-one">
-    step-one
-  </div>
-</template>
-
-<script>
-export default {
-  name: "step-one",
-  data() {
-    return {};
-  },
-  mounted() {
-    setTimeout(() => {
-      // 提交步骤准备就绪事件
-      this.$emit("on-ready");
-    }, 500);
-  },
-  methods: {
-    checkValid() {
-      // some code
-
-      // 提交可执行下一步操作事件
-      this.$emit("on-next");
-    }
-  }
-};
-</script>
+<template>
+  <div class="step-one">step-one</div>
+</template>
+
+<script>
+export default {
+  name: "step-one",
+  data() {
+    return {};
+  },
+  mounted() {
+    setTimeout(() => {
+      // 提交步骤准备就绪事件
+      this.$emit("on-ready");
+    }, 500);
+  },
+  methods: {
+    checkValid() {
+      // some code
+
+      // 提交可执行下一步操作事件
+      this.$emit("on-next");
+    },
+  },
+};
+</script>

+ 26 - 28
src/components/common/StepsProgress/StepThree.vue

@@ -1,28 +1,26 @@
-<template>
-  <div class="step-three">
-    step-three
-  </div>
-</template>
-
-<script>
-export default {
-  name: "step-three",
-  data() {
-    return {};
-  },
-  mounted() {
-    setTimeout(() => {
-      // 提交步骤准备就绪事件
-      this.$emit("on-ready");
-    }, 500);
-  },
-  methods: {
-    checkValid() {
-      // some code
-
-      // 提交可执行下一步操作事件
-      this.$emit("on-next");
-    }
-  }
-};
-</script>
+<template>
+  <div class="step-three">step-three</div>
+</template>
+
+<script>
+export default {
+  name: "step-three",
+  data() {
+    return {};
+  },
+  mounted() {
+    setTimeout(() => {
+      // 提交步骤准备就绪事件
+      this.$emit("on-ready");
+    }, 500);
+  },
+  methods: {
+    checkValid() {
+      // some code
+
+      // 提交可执行下一步操作事件
+      this.$emit("on-next");
+    },
+  },
+};
+</script>

+ 26 - 28
src/components/common/StepsProgress/StepTwo.vue

@@ -1,28 +1,26 @@
-<template>
-  <div class="step-two">
-    step-two
-  </div>
-</template>
-
-<script>
-export default {
-  name: "step-two",
-  data() {
-    return {};
-  },
-  mounted() {
-    setTimeout(() => {
-      // 提交步骤准备就绪事件
-      this.$emit("on-ready");
-    }, 500);
-  },
-  methods: {
-    checkValid() {
-      // some code
-
-      // 提交可执行下一步操作事件
-      this.$emit("on-next");
-    }
-  }
-};
-</script>
+<template>
+  <div class="step-two">step-two</div>
+</template>
+
+<script>
+export default {
+  name: "step-two",
+  data() {
+    return {};
+  },
+  mounted() {
+    setTimeout(() => {
+      // 提交步骤准备就绪事件
+      this.$emit("on-ready");
+    }, 500);
+  },
+  methods: {
+    checkValid() {
+      // some code
+
+      // 提交可执行下一步操作事件
+      this.$emit("on-next");
+    },
+  },
+};
+</script>

+ 126 - 126
src/components/common/StepsProgress/StepsProgress.vue

@@ -1,126 +1,126 @@
-<template>
-  <div class="step-progress">
-    <div class="step-menu">
-      <el-steps :active="current" align-center process-status="finish">
-        <el-step
-          v-for="(step, index) in STEPS_LIST"
-          :key="index"
-          :title="step.title"
-        ></el-step>
-      </el-steps>
-    </div>
-    <div class="step-body">
-      <component
-        :is="currentComponent"
-        :ref="currentComponent"
-        @on-next="toNext"
-        @on-ready="stepReady"
-      ></component>
-    </div>
-
-    <div class="step-ctrl">
-      <el-button type="primary" @click="prevStep" :disabled="isFirstStep"
-        >上一步</el-button
-      >
-      <el-button
-        type="primary"
-        @click="nextStep"
-        :disabled="nextHolder || isLastStep"
-        >下一步</el-button
-      >
-    </div>
-  </div>
-</template>
-
-<script>
-import StepOne from "./StepOne";
-import StepTwo from "./StepTwo";
-import StepThree from "./StepThree";
-import StepFour from "./StepFour";
-
-const STEPS_LIST = [
-  {
-    name: "step-one",
-    title: "步骤1"
-  },
-  {
-    name: "step-two",
-    title: "步骤2"
-  },
-  {
-    name: "step-three",
-    title: "步骤3"
-  },
-  {
-    name: "step-four",
-    title: "步骤4"
-  }
-];
-
-export default {
-  name: "step-progress",
-  components: {
-    StepOne,
-    StepTwo,
-    StepThree,
-    StepFour
-  },
-  data() {
-    return {
-      STEPS_LIST,
-      current: 0,
-      nextHolder: true,
-      dataReady: true
-    };
-  },
-  computed: {
-    currentComponent() {
-      return this.STEPS_LIST[this.current].name;
-    },
-    isFirstStep() {
-      return this.current === 0;
-    },
-    isLastStep() {
-      return this.current === this.lastStep;
-    },
-    lastStep() {
-      return this.STEPS_LIST.length - 1;
-    }
-  },
-  watch: {
-    current() {
-      // 滚动条置顶
-      // document.getElementById("home-body").scrollTop = 0;
-    }
-  },
-  methods: {
-    prevStep() {
-      if (this.isFirstStep) return;
-      this.current -= 1;
-    },
-    nextStep() {
-      if (this.isLastStep || this.nextHolder) return;
-      this.$refs[this.currentComponent].checkValid();
-    },
-    toNext() {
-      if (this.isLastStep) return;
-      this.current += 1;
-      this.nextHolder = true;
-    },
-    stepReady() {
-      this.nextHolder = false;
-    }
-  }
-};
-</script>
-
-<style lang="css">
-.step-body {
-  min-height: 600px;
-  padding: 20px;
-}
-.step-ctrl {
-  text-align: center;
-  margin-top: 50px;
-}
-</style>
+<template>
+  <div class="step-progress">
+    <div class="step-menu">
+      <el-steps :active="current" align-center process-status="finish">
+        <el-step
+          v-for="(step, index) in STEPS_LIST"
+          :key="index"
+          :title="step.title"
+        ></el-step>
+      </el-steps>
+    </div>
+    <div class="step-body">
+      <component
+        :is="currentComponent"
+        :ref="currentComponent"
+        @on-next="toNext"
+        @on-ready="stepReady"
+      ></component>
+    </div>
+
+    <div class="step-ctrl">
+      <el-button type="primary" @click="prevStep" :disabled="isFirstStep"
+        >上一步</el-button
+      >
+      <el-button
+        type="primary"
+        @click="nextStep"
+        :disabled="nextHolder || isLastStep"
+        >下一步</el-button
+      >
+    </div>
+  </div>
+</template>
+
+<script>
+import StepOne from "./StepOne";
+import StepTwo from "./StepTwo";
+import StepThree from "./StepThree";
+import StepFour from "./StepFour";
+
+const STEPS_LIST = [
+  {
+    name: "step-one",
+    title: "步骤1",
+  },
+  {
+    name: "step-two",
+    title: "步骤2",
+  },
+  {
+    name: "step-three",
+    title: "步骤3",
+  },
+  {
+    name: "step-four",
+    title: "步骤4",
+  },
+];
+
+export default {
+  name: "step-progress",
+  components: {
+    StepOne,
+    StepTwo,
+    StepThree,
+    StepFour,
+  },
+  data() {
+    return {
+      STEPS_LIST,
+      current: 0,
+      nextHolder: true,
+      dataReady: true,
+    };
+  },
+  computed: {
+    currentComponent() {
+      return this.STEPS_LIST[this.current].name;
+    },
+    isFirstStep() {
+      return this.current === 0;
+    },
+    isLastStep() {
+      return this.current === this.lastStep;
+    },
+    lastStep() {
+      return this.STEPS_LIST.length - 1;
+    },
+  },
+  watch: {
+    current() {
+      // 滚动条置顶
+      // document.getElementById("home-body").scrollTop = 0;
+    },
+  },
+  methods: {
+    prevStep() {
+      if (this.isFirstStep) return;
+      this.current -= 1;
+    },
+    nextStep() {
+      if (this.isLastStep || this.nextHolder) return;
+      this.$refs[this.currentComponent].checkValid();
+    },
+    toNext() {
+      if (this.isLastStep) return;
+      this.current += 1;
+      this.nextHolder = true;
+    },
+    stepReady() {
+      this.nextHolder = false;
+    },
+  },
+};
+</script>
+
+<style lang="css">
+.step-body {
+  min-height: 600px;
+  padding: 20px;
+}
+.step-ctrl {
+  text-align: center;
+  margin-top: 50px;
+}
+</style>

+ 85 - 82
src/components/common/utils/ajax.js

@@ -1,82 +1,85 @@
-// https://github.com/ElemeFE/element/blob/dev/packages/upload/src/ajax.js
-
-function getError(action, option, xhr) {
-  const msg = `fail to post ${action} ${xhr.status}'`;
-  const err = new Error(msg);
-  err.status = xhr.status;
-  err.method = "post";
-  err.url = action;
-  return err;
-}
-
-function getBody(xhr) {
-  const text = xhr.responseText || xhr.response;
-  if (!text) {
-    return text;
-  }
-
-  try {
-    return JSON.parse(text);
-  } catch (e) {
-    return text;
-  }
-}
-
-export default function upload(option) {
-  if (typeof XMLHttpRequest === "undefined") {
-    return;
-  }
-
-  const xhr = new XMLHttpRequest();
-  const action = option.action;
-
-  if (xhr.upload) {
-    xhr.upload.onprogress = function progress(e) {
-      if (e.total > 0) {
-        e.percent = (e.loaded / e.total) * 100;
-      }
-      option.onProgress(e);
-    };
-  }
-
-  const formData = new FormData();
-
-  if (option.data) {
-    Object.keys(option.data).map(key => {
-      formData.append(key, option.data[key]);
-    });
-  }
-
-  formData.append(option.filename, option.file);
-
-  xhr.onerror = function error(e) {
-    option.onError(e);
-  };
-
-  xhr.onload = function onload() {
-    if (xhr.status < 200 || xhr.status >= 300) {
-      return option.onError(getError(action, option, xhr), getBody(xhr));
-    }
-
-    option.onSuccess(getBody(xhr));
-  };
-
-  xhr.open("post", action, true);
-
-  if (option.withCredentials && "withCredentials" in xhr) {
-    xhr.withCredentials = true;
-  }
-
-  const headers = option.headers || {};
-
-  // if (headers['X-Requested-With'] !== null) {
-  //   xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
-  // }
-
-  for (let item in headers) {
-    if (headers.hasOwnProperty(item) && headers[item] !== null) {
-      xhr.setRequestHeader(item, headers[item]);
-    }
-  }
-  xhr.send(formData);
-}
+// https://github.com/ElemeFE/element/blob/dev/packages/upload/src/ajax.js
+
+function getError(action, option, xhr) {
+  const msg = `fail to post ${action} ${xhr.status}'`;
+  const err = new Error(msg);
+  err.status = xhr.status;
+  err.method = "post";
+  err.url = action;
+  return err;
+}
+
+function getBody(xhr) {
+  const text = xhr.responseText || xhr.response;
+  if (!text) {
+    return text;
+  }
+
+  try {
+    return JSON.parse(text);
+  } catch (e) {
+    return text;
+  }
+}
+
+export default function upload(option) {
+  if (typeof XMLHttpRequest === "undefined") {
+    return;
+  }
+
+  const xhr = new XMLHttpRequest();
+  const action = option.action;
+
+  if (xhr.upload) {
+    xhr.upload.onprogress = function progress(e) {
+      if (e.total > 0) {
+        e.percent = (e.loaded / e.total) * 100;
+      }
+      option.onProgress(e);
+    };
+  }
+
+  const formData = new FormData();
+
+  if (option.data) {
+    Object.keys(option.data).map((key) => {
+      formData.append(key, option.data[key]);
+    });
+  }
+
+  formData.append(option.filename, option.file);
+
+  xhr.onerror = function error(e) {
+    option.onError(e);
+  };
+
+  xhr.onload = function onload() {
+    if (xhr.status < 200 || xhr.status >= 300) {
+      return option.onError(getError(action, option, xhr), getBody(xhr));
+    }
+
+    option.onSuccess(getBody(xhr));
+  };
+
+  xhr.open("post", action, true);
+
+  if (option.withCredentials && "withCredentials" in xhr) {
+    xhr.withCredentials = true;
+  }
+
+  const headers = option.headers || {};
+
+  // if (headers['X-Requested-With'] !== null) {
+  //   xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
+  // }
+
+  for (let item in headers) {
+    if (
+      Object.prototype.hasOwnProperty.call(headers, item) &&
+      headers[item] !== null
+    ) {
+      xhr.setRequestHeader(item, headers[item]);
+    }
+  }
+  xhr.send(formData);
+}

+ 6 - 6
src/config.js

@@ -1,6 +1,6 @@
-export default {
-  domain: process.env.VUE_APP_DOMAIN || window.location.origin,
-  timeout: process.env.VUE_APP_TIMEOUT * 1,
-  pageSize: process.env.VUE_APP_PAGE_SIZE * 1,
-  authTimeout: process.env.VUE_APP_AUTH_TIMEOUT * 1
-};
+export default {
+  domain: process.env.VUE_APP_DOMAIN || window.location.origin,
+  timeout: process.env.VUE_APP_TIMEOUT * 1,
+  pageSize: process.env.VUE_APP_PAGE_SIZE * 1,
+  authTimeout: process.env.VUE_APP_AUTH_TIMEOUT * 1,
+};

+ 20 - 20
src/constants/app.js

@@ -1,20 +1,20 @@
-const MD5 = require("js-md5");
-
-// domain
-let domain;
-if (process.env.VUE_APP_SELF_DEFINE_DOMAIN === "true") {
-  domain = window.localStorage.getItem("domain_in_url");
-}
-if (!domain) domain = window.location.hostname.split(".")[0];
-export const ORG_CODE = domain;
-
-const ADMIN_CODE = "admin";
-
-export const IS_ADMIN_SYSTEM = ADMIN_CODE === ORG_CODE;
-
-export const PLATFORM = "WEB";
-
-if (!localStorage.getItem("deviceId")) {
-  localStorage.setItem("deviceId", MD5(Math.random() + "-" + Date.now()));
-}
-export const DEVICE_ID = localStorage.getItem("deviceId");
+const MD5 = require("js-md5");
+
+// domain
+let domain;
+if (process.env.VUE_APP_SELF_DEFINE_DOMAIN === "true") {
+  domain = window.localStorage.getItem("domain_in_url");
+}
+if (!domain) domain = window.location.hostname.split(".")[0];
+export const ORG_CODE = domain;
+
+const ADMIN_CODE = "admin";
+
+export const IS_ADMIN_SYSTEM = ADMIN_CODE === ORG_CODE;
+
+export const PLATFORM = "WEB";
+
+if (!localStorage.getItem("deviceId")) {
+  localStorage.setItem("deviceId", MD5(Math.random() + "-" + Date.now()));
+}
+export const DEVICE_ID = localStorage.getItem("deviceId");

+ 31 - 31
src/constants/datePickerOptions.js

@@ -1,31 +1,31 @@
-export default {
-  shortcuts: [
-    {
-      text: "最近一周",
-      onClick(picker) {
-        const end = new Date();
-        const start = new Date();
-        start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
-        picker.$emit("pick", [start, end]);
-      }
-    },
-    {
-      text: "最近一个月",
-      onClick(picker) {
-        const end = new Date();
-        const start = new Date();
-        start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
-        picker.$emit("pick", [start, end]);
-      }
-    },
-    {
-      text: "最近三个月",
-      onClick(picker) {
-        const end = new Date();
-        const start = new Date();
-        start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
-        picker.$emit("pick", [start, end]);
-      }
-    }
-  ]
-};
+export default {
+  shortcuts: [
+    {
+      text: "最近一周",
+      onClick(picker) {
+        const end = new Date();
+        const start = new Date();
+        start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+        picker.$emit("pick", [start, end]);
+      },
+    },
+    {
+      text: "最近一个月",
+      onClick(picker) {
+        const end = new Date();
+        const start = new Date();
+        start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+        picker.$emit("pick", [start, end]);
+      },
+    },
+    {
+      text: "最近三个月",
+      onClick(picker) {
+        const end = new Date();
+        const start = new Date();
+        start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+        picker.$emit("pick", [start, end]);
+      },
+    },
+  ],
+};

+ 48 - 48
src/constants/enumerate.js

@@ -1,48 +1,48 @@
-export const SYS_ADMIN_NAME = "sysadmin";
-
-// 通用 -------------->
-// 启用/禁用
-export const ABLE_TYPE = {
-  0: "禁用",
-  1: "启用"
-};
-
-// 是 / 否
-export const BOOLEAN_TYPE = {
-  0: "否",
-  1: "是"
-};
-
-// 下载用途
-export const USE_TYPE = {
-  PARAM_PRINT: "变量印刷",
-  SCAN: "扫描阅卷",
-  ANALYSE: "教研分析"
-};
-
-// 审核结果
-export const AUDITING_RESULT = {
-  NOT_PASS: "未通过",
-  PASS: "通过"
-};
-
-// 权限类型
-export const PRIVILEGE_TYPE = {
-  MENU: "菜单",
-  URL: "操作"
-};
-
-// data task status
-export const DATA_TASK_STATUS = {
-  INIT: "未开始",
-  RUNNING: "进行中",
-  FINISH: "已完成"
-};
-export const DATA_TASK_TYPE = {
-  WHU_TEACH_DATA: "同步武大考务数据",
-  CLOUD_MARKING_STUDENT_SCORE: "同步云阅卷考生成绩"
-};
-export const DATA_TASK_RESULT = {
-  SUCCESS: "成功",
-  ERROR: "失败"
-};
+export const SYS_ADMIN_NAME = "sysadmin";
+
+// 通用 -------------->
+// 启用/禁用
+export const ABLE_TYPE = {
+  0: "禁用",
+  1: "启用",
+};
+
+// 是 / 否
+export const BOOLEAN_TYPE = {
+  0: "否",
+  1: "是",
+};
+
+// 下载用途
+export const USE_TYPE = {
+  PARAM_PRINT: "变量印刷",
+  SCAN: "扫描阅卷",
+  ANALYSE: "教研分析",
+};
+
+// 审核结果
+export const AUDITING_RESULT = {
+  NOT_PASS: "未通过",
+  PASS: "通过",
+};
+
+// 权限类型
+export const PRIVILEGE_TYPE = {
+  MENU: "菜单",
+  URL: "操作",
+};
+
+// data task status
+export const DATA_TASK_STATUS = {
+  INIT: "未开始",
+  RUNNING: "进行中",
+  FINISH: "已完成",
+};
+export const DATA_TASK_TYPE = {
+  WHU_TEACH_DATA: "同步武大考务数据",
+  CLOUD_MARKING_STUDENT_SCORE: "同步云阅卷考生成绩",
+};
+export const DATA_TASK_RESULT = {
+  SUCCESS: "成功",
+  ERROR: "失败",
+};

+ 107 - 107
src/constants/menus-data.js

@@ -1,107 +1,107 @@
-export default [
-  {
-    id: "1",
-    parentId: "-1",
-    name: "数据对接",
-    url: "data",
-    type: "MENU"
-  },
-  {
-    id: "101",
-    parentId: "1",
-    name: "超管中心",
-    url: "super",
-    type: "MENU"
-  },
-  {
-    id: "10101",
-    parentId: "101",
-    name: "授权管理",
-    type: "MENU",
-    url: "AuthSet"
-  },
-  {
-    id: "102",
-    parentId: "1",
-    name: "基础配置",
-    url: "base",
-    type: "MENU"
-  },
-  {
-    id: "10201",
-    parentId: "102",
-    name: "学期管理",
-    type: "MENU",
-    url: "SemesterManage"
-  },
-  {
-    id: "10202",
-    parentId: "102",
-    name: "考试类型管理",
-    type: "MENU",
-    url: "ExamTypeManage"
-  },
-  {
-    id: "10203",
-    parentId: "102",
-    name: "用户管理",
-    type: "MENU",
-    url: "UserManage"
-  },
-  {
-    id: "103",
-    parentId: "1",
-    name: "考务数据对接",
-    url: "business",
-    type: "MENU"
-  },
-  {
-    id: "10301",
-    parentId: "103",
-    name: "设置定时任务",
-    type: "MENU",
-    url: "TimeTaskManage"
-  },
-  {
-    id: "10302",
-    parentId: "103",
-    name: "考务数据列表",
-    type: "MENU",
-    url: "BusinessDataManage"
-  },
-  {
-    id: "10303",
-    parentId: "103",
-    name: "下载列表",
-    type: "MENU",
-    url: "DownloadManage"
-  },
-  {
-    id: "10304",
-    parentId: "103",
-    name: "课程关联管理",
-    type: "MENU",
-    url: "CourseLinkManage"
-  },
-  {
-    id: "104",
-    parentId: "1",
-    name: "成绩回传",
-    type: "MENU",
-    url: "score"
-  },
-  {
-    id: "10401",
-    parentId: "104",
-    name: "云阅卷数据管理",
-    type: "MENU",
-    url: "EcsDataManage"
-  },
-  {
-    id: "10402",
-    parentId: "104",
-    name: "回传数据管理",
-    type: "MENU",
-    url: "DataReturnManage"
-  }
-];
+export default [
+  {
+    id: "1",
+    parentId: "-1",
+    name: "数据对接",
+    url: "data",
+    type: "MENU",
+  },
+  {
+    id: "101",
+    parentId: "1",
+    name: "超管中心",
+    url: "super",
+    type: "MENU",
+  },
+  {
+    id: "10101",
+    parentId: "101",
+    name: "授权管理",
+    type: "MENU",
+    url: "AuthSet",
+  },
+  {
+    id: "102",
+    parentId: "1",
+    name: "基础配置",
+    url: "base",
+    type: "MENU",
+  },
+  {
+    id: "10201",
+    parentId: "102",
+    name: "学期管理",
+    type: "MENU",
+    url: "SemesterManage",
+  },
+  {
+    id: "10202",
+    parentId: "102",
+    name: "考试类型管理",
+    type: "MENU",
+    url: "ExamTypeManage",
+  },
+  {
+    id: "10203",
+    parentId: "102",
+    name: "用户管理",
+    type: "MENU",
+    url: "UserManage",
+  },
+  {
+    id: "103",
+    parentId: "1",
+    name: "考务数据对接",
+    url: "business",
+    type: "MENU",
+  },
+  {
+    id: "10301",
+    parentId: "103",
+    name: "设置定时任务",
+    type: "MENU",
+    url: "TimeTaskManage",
+  },
+  {
+    id: "10302",
+    parentId: "103",
+    name: "考务数据列表",
+    type: "MENU",
+    url: "BusinessDataManage",
+  },
+  {
+    id: "10303",
+    parentId: "103",
+    name: "下载列表",
+    type: "MENU",
+    url: "DownloadManage",
+  },
+  {
+    id: "10304",
+    parentId: "103",
+    name: "课程关联管理",
+    type: "MENU",
+    url: "CourseLinkManage",
+  },
+  {
+    id: "104",
+    parentId: "1",
+    name: "成绩回传",
+    type: "MENU",
+    url: "score",
+  },
+  {
+    id: "10401",
+    parentId: "104",
+    name: "云阅卷数据管理",
+    type: "MENU",
+    url: "EcsDataManage",
+  },
+  {
+    id: "10402",
+    parentId: "104",
+    name: "回传数据管理",
+    type: "MENU",
+    url: "DataReturnManage",
+  },
+];

+ 30 - 30
src/constants/privilege.js

@@ -1,30 +1,30 @@
-export const rolePrivilege = {
-  ADMIN: [
-    "data",
-    "base",
-    "SemesterManage",
-    "ExamTypeManage",
-    "UserManage",
-    "business",
-    "TimeTaskManage",
-    "BusinessDataManage",
-    "DownloadManage",
-    "score",
-    "EcsDataManage",
-    "DataReturnManage",
-    "CourseLinkManage"
-  ],
-  IMPLEMENT: [
-    "data",
-    "business",
-    "TimeTaskManage",
-    "BusinessDataManage",
-    "DownloadManage",
-    "score",
-    "EcsDataManage",
-    "DataReturnManage",
-    "CourseLinkManage"
-  ]
-};
-
-export const adminPrivilege = ["data", "super", "AuthSet"];
+export const rolePrivilege = {
+  ADMIN: [
+    "data",
+    "base",
+    "SemesterManage",
+    "ExamTypeManage",
+    "UserManage",
+    "business",
+    "TimeTaskManage",
+    "BusinessDataManage",
+    "DownloadManage",
+    "score",
+    "EcsDataManage",
+    "DataReturnManage",
+    "CourseLinkManage",
+  ],
+  IMPLEMENT: [
+    "data",
+    "business",
+    "TimeTaskManage",
+    "BusinessDataManage",
+    "DownloadManage",
+    "score",
+    "EcsDataManage",
+    "DataReturnManage",
+    "CourseLinkManage",
+  ],
+};
+
+export const adminPrivilege = ["data", "super", "AuthSet"];

+ 28 - 28
src/main.js

@@ -1,28 +1,28 @@
-import Vue from "vue";
-import App from "./App.vue";
-import router from "./router";
-import store from "./store";
-import globalVuePlugins from "./plugins/globalVuePlugins";
-import GLOBAL from "./config";
-// import "./plugins/keepAlive";
-import "./plugins/filters";
-
-// https://github.com/RobinCK/vue-ls
-import VueLocalStorage from "vue-ls";
-import ElementUI from "element-ui";
-import "element-ui/lib/theme-chalk/index.css";
-import "./assets/styles/index.scss";
-
-Vue.use(ElementUI, { size: "small" });
-
-Vue.use(VueLocalStorage, { namespace: "vs_", storage: "session" });
-Vue.use(globalVuePlugins);
-
-Vue.prototype.GLOBAL = GLOBAL;
-Vue.config.productionTip = false;
-
-new Vue({
-  router,
-  store,
-  render: h => h(App)
-}).$mount("#app");
+import Vue from "vue";
+import App from "./App.vue";
+import router from "./router";
+import store from "./store";
+import globalVuePlugins from "./plugins/globalVuePlugins";
+import GLOBAL from "./config";
+// import "./plugins/keepAlive";
+import "./plugins/filters";
+
+// https://github.com/RobinCK/vue-ls
+import VueLocalStorage from "vue-ls";
+import ElementUI from "element-ui";
+import "element-ui/lib/theme-chalk/index.css";
+import "./assets/styles/index.scss";
+
+Vue.use(ElementUI, { size: "small" });
+
+Vue.use(VueLocalStorage, { namespace: "vs_", storage: "session" });
+Vue.use(globalVuePlugins);
+
+Vue.prototype.GLOBAL = GLOBAL;
+Vue.config.productionTip = false;
+
+new Vue({
+  router,
+  store,
+  render: (h) => h(App),
+}).$mount("#app");

+ 23 - 23
src/mixins/common.js

@@ -1,23 +1,23 @@
-export default {
-  methods: {
-    deletePageLastItem(len = 1) {
-      let page = this.current || 1;
-      if (this.$refs.TableList.data.length === len) {
-        page = page > 1 ? page - 1 : 1;
-      }
-      this.toPage && this.toPage(page);
-    },
-    goback() {
-      this.$router.go(-1);
-    },
-    getRouterPath(location) {
-      const { href } = this.$router.resolve(location);
-      return href;
-    },
-    indexMethod(index) {
-      const current = this.current || 1;
-      const size = this.size || 10;
-      return (current - 1) * size + index + 1;
-    }
-  }
-};
+export default {
+  methods: {
+    deletePageLastItem(len = 1) {
+      let page = this.current || 1;
+      if (this.$refs.TableList.data.length === len) {
+        page = page > 1 ? page - 1 : 1;
+      }
+      this.toPage && this.toPage(page);
+    },
+    goback() {
+      this.$router.go(-1);
+    },
+    getRouterPath(location) {
+      const { href } = this.$router.resolve(location);
+      return href;
+    },
+    indexMethod(index) {
+      const current = this.current || 1;
+      const size = this.size || 10;
+      return (current - 1) * size + index + 1;
+    },
+  },
+};

+ 2 - 2
src/modules/admin/api.js

@@ -4,7 +4,7 @@ import { $post } from "@/plugins/axios";
 export const authSelect = () => {
   return $post("/api/auth/select", {});
 };
-export const offlineActivation = datas => {
+export const offlineActivation = (datas) => {
   return $post("/api/auth/offline/activation", datas);
 };
 export const exportDeviceInfo = () => {
@@ -12,7 +12,7 @@ export const exportDeviceInfo = () => {
     "/api/auth/export/device/info",
     {},
     {
-      responseType: "blob"
+      responseType: "blob",
     }
   );
 };

+ 4 - 4
src/modules/admin/router.js

@@ -7,13 +7,13 @@ export default {
   name: "Admin",
   component: Home,
   props: {
-    super: true
+    super: true,
   },
   children: [
     {
       path: "auth-set",
       name: "AuthSet",
-      component: AuthSet
-    }
-  ]
+      component: AuthSet,
+    },
+  ],
 };

+ 87 - 87
src/modules/admin/views/AuthSet.vue

@@ -1,87 +1,87 @@
-<template>
-  <div class="auth-set">
-    <div class="part-box part-box-pad">
-      <el-form ref="modalFormComp" :model="modalForm" label-width="120px">
-        <el-form-item prop="loginName" label="当前信息:">
-          {{ modalForm.expireTime === null ? "未授权" : "已授权" }}
-        </el-form-item>
-        <el-form-item label="过期时间:">
-          <span v-if="modalForm.expireTime === -1">不过期</span>
-          <span v-else-if="modalForm.expireTime">
-            {{ modalForm.expireTime | timestampFilter }}</span
-          >
-          <span v-else>--</span>
-        </el-form-item>
-        <el-form-item prop="mobileNumber" label="导出:">
-          <el-button type="primary" :loading="downloading" @click="toExport">
-            硬件信息
-          </el-button>
-        </el-form-item>
-        <el-form-item prop="code" label="导入授权文件:">
-          <upload-button
-            btn-content="选择文件"
-            btn-type="primary"
-            :upload-url="uploadUrl"
-            :format="['lic']"
-            accept=".lic"
-            style="margin:0;"
-            @valid-error="validError"
-            @upload-success="uploadSuccess"
-          >
-          </upload-button>
-        </el-form-item>
-      </el-form>
-    </div>
-  </div>
-</template>
-
-<script>
-import { downloadByApi } from "@/plugins/download";
-import { exportDeviceInfo, authSelect } from "../api";
-import UploadButton from "@/components/UploadButton";
-
-export default {
-  name: "auth-set",
-  components: { UploadButton },
-  data() {
-    return {
-      modalForm: {
-        expireTime: "",
-        authFile: null
-      },
-      downloading: false,
-      // import
-      uploadUrl: "/api/auth/offline/activation"
-    };
-  },
-  created() {
-    this.search();
-  },
-  methods: {
-    async search() {
-      const res = await authSelect();
-      this.modalForm.expireTime = res;
-    },
-    async toExport() {
-      if (this.downloading) return;
-      this.downloading = true;
-
-      const res = await downloadByApi(() => {
-        return exportDeviceInfo();
-      }).catch(e => {
-        this.$message.error(e || "下载失败,请重新尝试!");
-      });
-      this.downloading = false;
-
-      if (!res) return;
-      this.$message.success("下载成功!");
-    },
-    validError(errorData) {
-      this.$message.error(errorData.message);
-    },
-    uploadSuccess() {
-      this.search();
-    }
-  }
-};
-</script>
+<template>
+  <div class="auth-set">
+    <div class="part-box part-box-pad">
+      <el-form ref="modalFormComp" :model="modalForm" label-width="120px">
+        <el-form-item prop="loginName" label="当前信息:">
+          {{ modalForm.expireTime === null ? "未授权" : "已授权" }}
+        </el-form-item>
+        <el-form-item label="过期时间:">
+          <span v-if="modalForm.expireTime === -1">不过期</span>
+          <span v-else-if="modalForm.expireTime">
+            {{ modalForm.expireTime | timestampFilter }}</span
+          >
+          <span v-else>--</span>
+        </el-form-item>
+        <el-form-item prop="mobileNumber" label="导出:">
+          <el-button type="primary" :loading="downloading" @click="toExport">
+            硬件信息
+          </el-button>
+        </el-form-item>
+        <el-form-item prop="code" label="导入授权文件:">
+          <upload-button
+            btn-content="选择文件"
+            btn-type="primary"
+            :upload-url="uploadUrl"
+            :format="['lic']"
+            accept=".lic"
+            style="margin: 0"
+            @valid-error="validError"
+            @upload-success="uploadSuccess"
+          >
+          </upload-button>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+import { downloadByApi } from "@/plugins/download";
+import { exportDeviceInfo, authSelect } from "../api";
+import UploadButton from "@/components/UploadButton";
+
+export default {
+  name: "auth-set",
+  components: { UploadButton },
+  data() {
+    return {
+      modalForm: {
+        expireTime: "",
+        authFile: null,
+      },
+      downloading: false,
+      // import
+      uploadUrl: "/api/auth/offline/activation",
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    async search() {
+      const res = await authSelect();
+      this.modalForm.expireTime = res;
+    },
+    async toExport() {
+      if (this.downloading) return;
+      this.downloading = true;
+
+      const res = await downloadByApi(() => {
+        return exportDeviceInfo();
+      }).catch((e) => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
+
+      if (!res) return;
+      this.$message.success("下载成功!");
+    },
+    validError(errorData) {
+      this.$message.error(errorData.message);
+    },
+    uploadSuccess() {
+      this.search();
+    },
+  },
+};
+</script>

+ 141 - 130
src/modules/base/api.js

@@ -1,130 +1,141 @@
-import { $postParam, $post } from "@/plugins/axios";
-
-export const semesterQuery = datas => {
-  return $postParam("/api/exam_semester/list", datas);
-};
-export const ecsExamQuery = (collegeId = "") => {
-  return $postParam("/api/cloud_marking_exam/list", { collegeId });
-};
-export const ecsExamSync = (collegeId = "") => {
-  return $postParam("/api/cloud_marking_exam/sync", { collegeId });
-};
-export const examTypeQuery = datas => {
-  return $postParam("/api/exam_type/list", datas);
-};
-export const collegeQuery = datas => {
-  return $postParam("/api/sys_college/list", datas);
-};
-// user --------------------------------->
-// user-manage
-export const userListPage = datas => {
-  return $postParam("/api/sys_user/page", datas);
-};
-export const updateUser = datas => {
-  return $post("/api/sys_user/save", datas);
-};
-export const ableUser = ({ id, enable }) => {
-  return $post("/api/sys_user/enable", { id, enable });
-};
-export const resetPwd = id => {
-  return $post("/api/sys_user/reset_password", { id });
-};
-export const userRoleListPage = () => {
-  return $postParam("/api/sys_role/list", {});
-};
-
-// semester-manage
-export const semesterListQuery = datas => {
-  return $postParam("/api/exam_semester/page", datas);
-};
-export const deleteSemester = id => {
-  return $postParam("/api/exam_semester/delete", { id });
-};
-export const updateSemester = datas => {
-  return $post("/api/exam_semester/save", datas);
-};
-// no user
-export const semesterSetInUsed = id => {
-  return $postParam("/api/exam_semester/set_in_used", { id });
-};
-
-// exam-type-manage
-export const examTypeListQuery = datas => {
-  return $postParam("/api/exam_type/page", datas);
-};
-export const deleteExamType = id => {
-  return $postParam("/api/exam_type/delete", {
-    id
-  });
-};
-export const updateExamType = datas => {
-  return $post("/api/exam_type/save", datas);
-};
-// setting --------------------------------->
-// time-task
-export const timeTaskList = datas => {
-  return $postParam("/api/exam_schedule_task/page", datas);
-};
-export const updateTimeTask = datas => {
-  return $post("/api/exam_schedule_task/save", datas);
-};
-
-// business-data
-export const businessDataList = datas => {
-  return $postParam("/api/exam_sync_total/page", datas);
-};
-export const manualSync = () => {
-  return $postParam("/api/exam_sync_total/manual_sync", {});
-};
-export const downloadBusinessData = (id, writeLog) => {
-  return $postParam(
-    "/api/exam_sync_total/download",
-    { id, writeLog },
-    {
-      responseType: "blob"
-    }
-  );
-};
-export const useSceneList = datas => {
-  return $postParam("/api/exam_download_record/list_use_scene", datas);
-};
-// download-manage
-export const downloadList = datas => {
-  return $postParam("/api/exam_download_record/page", datas);
-};
-export const signPurpose = datas => {
-  return $postParam("/api/exam_download_record/used", datas);
-};
-// ecs-data-manage
-export const ecsDataList = datas => {
-  return $postParam("/api/cloud_marking_score/page", datas);
-};
-export const syncEcsData = datas => {
-  return $postParam("/api/cloud_marking_score/sync_student_score", datas);
-};
-// ecs-data-manage
-export const dataTaskList = datas => {
-  return $postParam("/api/sync_task/page", datas);
-  // status(非必填):INIT("未开始"),RUNNING("进行中"),FINISH("已完成");
-  // type(必填):WHU_TEACH_DATA("同步武大考务数据"),CLOUD_MARKING_STUDENT_SCORE("同步云阅卷考生成绩");
-  // result(非必填):SUCCESS("成功"),ERROR("失败");
-};
-export const dataReturnList = datas => {
-  return $postParam("/api/cloud_marking_score_foreign/page", datas);
-};
-export const downloadDataReturn = datas => {
-  return $postParam("/api/cloud_marking_score_foreign/download_score", datas, {
-    responseType: "blob"
-  });
-};
-// course-link-manage
-export const courseLinkList = datas => {
-  return $postParam("/api/exam_course_mapping/page", datas);
-};
-// common
-export const uploadFile = datas => {
-  return $post("/api/admin/common/file/upload", datas);
-};
-export const getCode = type => {
-  return $postParam("/api/admin/common/get_code", { type });
-};
+import { $postParam, $post } from "@/plugins/axios";
+
+export const semesterQuery = (datas) => {
+  return $postParam("/api/exam_semester/list", datas);
+};
+export const ecsExamQuery = (collegeId = "") => {
+  return $postParam("/api/cloud_marking_exam/list", { collegeId });
+};
+export const ecsExamSync = (collegeId = "") => {
+  return $postParam("/api/cloud_marking_exam/sync", { collegeId });
+};
+export const examTypeQuery = (datas) => {
+  return $postParam("/api/exam_type/list", datas);
+};
+export const collegeQuery = (datas) => {
+  return $postParam("/api/sys_college/list", datas);
+};
+// user --------------------------------->
+// user-manage
+export const userListPage = (datas) => {
+  return $postParam("/api/sys_user/page", datas);
+};
+export const updateUser = (datas) => {
+  return $post("/api/sys_user/save", datas);
+};
+export const ableUser = ({ id, enable }) => {
+  return $post("/api/sys_user/enable", { id, enable });
+};
+export const resetPwd = (id) => {
+  return $post("/api/sys_user/reset_password", { id });
+};
+export const userRoleListPage = () => {
+  return $postParam("/api/sys_role/list", {});
+};
+
+// semester-manage
+export const semesterListQuery = (datas) => {
+  return $postParam("/api/exam_semester/page", datas);
+};
+export const deleteSemester = (id) => {
+  return $postParam("/api/exam_semester/delete", { id });
+};
+export const updateSemester = (datas) => {
+  return $post("/api/exam_semester/save", datas);
+};
+// no user
+export const semesterSetInUsed = (id) => {
+  return $postParam("/api/exam_semester/set_in_used", { id });
+};
+
+// exam-type-manage
+export const examTypeListQuery = (datas) => {
+  return $postParam("/api/exam_type/page", datas);
+};
+export const deleteExamType = (id) => {
+  return $postParam("/api/exam_type/delete", {
+    id,
+  });
+};
+export const updateExamType = (datas) => {
+  return $post("/api/exam_type/save", datas);
+};
+// setting --------------------------------->
+// time-task
+export const timeTaskList = (datas) => {
+  return $postParam("/api/exam_schedule_task/page", datas);
+};
+export const updateTimeTask = (datas) => {
+  return $post("/api/exam_schedule_task/save", datas);
+};
+
+// business-data
+export const businessDataList = (datas) => {
+  return $postParam("/api/exam_sync_total/page", datas);
+};
+export const manualSync = () => {
+  return $postParam("/api/exam_sync_total/manual_sync", {});
+};
+export const downloadBusinessData = (id, writeLog) => {
+  return $postParam(
+    "/api/exam_sync_total/download",
+    { id, writeLog },
+    {
+      responseType: "blob",
+    }
+  );
+};
+export const useSceneList = (datas) => {
+  return $postParam("/api/exam_download_record/list_use_scene", datas);
+};
+// download-manage
+export const downloadList = (datas) => {
+  return $postParam("/api/exam_download_record/page", datas);
+};
+export const signPurpose = (datas) => {
+  return $postParam("/api/exam_download_record/used", datas);
+};
+// ecs-data-manage
+export const ecsDataList = (datas) => {
+  return $postParam("/api/cloud_marking_score/page", datas);
+};
+export const syncEcsData = (datas) => {
+  return $postParam("/api/cloud_marking_score/sync_student_score", datas);
+};
+// ecs-data-manage
+export const dataTaskList = (datas) => {
+  return $postParam("/api/sync_task/page", datas);
+  // status(非必填):INIT("未开始"),RUNNING("进行中"),FINISH("已完成");
+  // type(必填):WHU_TEACH_DATA("同步武大考务数据"),CLOUD_MARKING_STUDENT_SCORE("同步云阅卷考生成绩");
+  // result(非必填):SUCCESS("成功"),ERROR("失败");
+};
+export const dataReturnList = (datas) => {
+  return $postParam("/api/cloud_marking_score_foreign/page", datas);
+};
+export const downloadDataReturn = (datas) => {
+  return $postParam("/api/cloud_marking_score_foreign/download_score", datas, {
+    responseType: "blob",
+  });
+};
+// course-link-manage
+export const courseLinkList = (datas) => {
+  return $postParam("/api/exam_course_mapping/page", datas);
+};
+// common
+export const uploadFile = (datas) => {
+  return $post("/api/admin/common/file/upload", datas);
+};
+export const getCode = (type) => {
+  return $postParam("/api/admin/common/get_code", { type });
+};
+
+// assignment-calculate
+export const assignmentDataList = (datas) => {
+  return $postParam("/api/exam_course_mapping/page", datas);
+};
+export const assignmentResult = (datas) => {
+  return $postParam("/api/exam_course_mapping/page", datas);
+};
+export const courseExamInfo = (datas) => {
+  return $postParam("/api/exam_course_mapping/page", datas);
+};

+ 8 - 8
src/modules/base/components/DataTaskDialog.vue

@@ -93,8 +93,8 @@ export default {
   props: {
     taskType: {
       type: String,
-      default: ""
-    }
+      default: "",
+    },
   },
   data() {
     return {
@@ -102,13 +102,13 @@ export default {
       filter: {
         type: "", // WHU_TEACH_DATA("同步武大考务数据"),CLOUD_MARKING_STUDENT_SCORE("同步云阅卷考生成绩");
         status: "", // INIT("未开始"),RUNNING("进行中"),FINISH("已完成");
-        result: "" // SUCCESS("成功"),ERROR("失败");
+        result: "", // SUCCESS("成功"),ERROR("失败");
       },
       dataList: [],
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
-      loading: false
+      loading: false,
     };
   },
   methods: {
@@ -126,10 +126,10 @@ export default {
       const datas = {
         ...this.filter,
         pageNumber: this.current,
-        pageSize: this.size
+        pageSize: this.size,
       };
       const data = await dataTaskList(datas);
-      this.dataList = data.records.map(item => {
+      this.dataList = data.records.map((item) => {
         item.reportFile = item.txtFilePath;
         item.resultFile = item.importFilePath || item.exportFilePath || "";
         return item;
@@ -148,7 +148,7 @@ export default {
 
       downloadByUrl(url);
       this.$message.success("文件开始成功!");
-    }
-  }
+    },
+  },
 };
 </script>

+ 118 - 118
src/modules/base/components/ModifyExamType.vue

@@ -1,118 +1,118 @@
-<template>
-  <el-dialog
-    class="modify-exam-type"
-    :visible.sync="modalIsShow"
-    :title="title"
-    top="10vh"
-    width="460px"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    @open="visibleChange"
-  >
-    <el-form
-      ref="modalFormComp"
-      :model="modalForm"
-      :rules="rules"
-      @submit.native.prevent
-    >
-      <el-form-item prop="name" label="类型名称:" label-width="100px">
-        <el-input
-          v-model.trim="modalForm.name"
-          placeholder="请输入类型名称"
-          clearable
-        ></el-input>
-      </el-form-item>
-    </el-form>
-    <div slot="footer">
-      <el-button type="primary" :disabled="isSubmit" @click="submit"
-        >确认</el-button
-      >
-      <el-button @click="cancel">取消</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { updateExamType } from "../api";
-
-const initModalForm = {
-  id: null,
-  name: ""
-};
-
-export default {
-  name: "modify-exam-type",
-  props: {
-    instance: {
-      type: Object,
-      default() {
-        return {};
-      }
-    }
-  },
-  computed: {
-    isEdit() {
-      return !!this.instance.id;
-    },
-    title() {
-      return (this.isEdit ? "编辑" : "新增") + "考试类型";
-    }
-  },
-  data() {
-    return {
-      modalIsShow: false,
-      isSubmit: false,
-      modalForm: { ...initModalForm },
-      rules: {
-        name: [
-          {
-            required: true,
-            message: "请输入类型名称",
-            trigger: "change"
-          },
-          {
-            message: "类型名称不能超过100字符",
-            max: 100,
-            trigger: "change"
-          }
-        ]
-      }
-    };
-  },
-  methods: {
-    initData(val) {
-      if (val.id) {
-        this.modalForm = this.$objAssign(initModalForm, val);
-      } else {
-        this.modalForm = { ...initModalForm };
-      }
-    },
-    visibleChange() {
-      this.initData(this.instance);
-    },
-    cancel() {
-      this.modalIsShow = false;
-    },
-    open() {
-      this.modalIsShow = true;
-    },
-    async submit() {
-      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-      let datas = { ...this.modalForm };
-      const data = await updateExamType(datas).catch(() => {});
-      this.isSubmit = false;
-
-      if (!data) return;
-
-      this.$message.success(this.title + "成功!");
-      this.$emit("modified");
-      this.cancel();
-    }
-  }
-};
-</script>
+<template>
+  <el-dialog
+    class="modify-exam-type"
+    :visible.sync="modalIsShow"
+    :title="title"
+    top="10vh"
+    width="460px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      @submit.native.prevent
+    >
+      <el-form-item prop="name" label="类型名称:" label-width="100px">
+        <el-input
+          v-model.trim="modalForm.name"
+          placeholder="请输入类型名称"
+          clearable
+        ></el-input>
+      </el-form-item>
+    </el-form>
+    <div slot="footer">
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+      <el-button @click="cancel">取消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { updateExamType } from "../api";
+
+const initModalForm = {
+  id: null,
+  name: "",
+};
+
+export default {
+  name: "modify-exam-type",
+  props: {
+    instance: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  computed: {
+    isEdit() {
+      return !!this.instance.id;
+    },
+    title() {
+      return (this.isEdit ? "编辑" : "新增") + "考试类型";
+    },
+  },
+  data() {
+    return {
+      modalIsShow: false,
+      isSubmit: false,
+      modalForm: { ...initModalForm },
+      rules: {
+        name: [
+          {
+            required: true,
+            message: "请输入类型名称",
+            trigger: "change",
+          },
+          {
+            message: "类型名称不能超过100字符",
+            max: 100,
+            trigger: "change",
+          },
+        ],
+      },
+    };
+  },
+  methods: {
+    initData(val) {
+      if (val.id) {
+        this.modalForm = this.$objAssign(initModalForm, val);
+      } else {
+        this.modalForm = { ...initModalForm };
+      }
+    },
+    visibleChange() {
+      this.initData(this.instance);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+      let datas = { ...this.modalForm };
+      const data = await updateExamType(datas).catch(() => {});
+      this.isSubmit = false;
+
+      if (!data) return;
+
+      this.$message.success(this.title + "成功!");
+      this.$emit("modified");
+      this.cancel();
+    },
+  },
+};
+</script>

+ 119 - 119
src/modules/base/components/ModifySemester.vue

@@ -1,119 +1,119 @@
-<template>
-  <el-dialog
-    class="modify-semester"
-    :visible.sync="modalIsShow"
-    :title="title"
-    top="10vh"
-    width="600px"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    @open="visibleChange"
-  >
-    <el-form
-      ref="modalFormComp"
-      :model="modalForm"
-      :rules="rules"
-      label-position="top"
-    >
-      <el-form-item prop="name" label="学期名称:">
-        <el-input
-          v-model.trim="modalForm.name"
-          placeholder="请输入学期名称"
-          clearable
-        ></el-input>
-        <p class="tips-info">示例:2021~2022第一学期/上学期</p>
-      </el-form-item>
-    </el-form>
-    <div slot="footer">
-      <el-button type="primary" :disabled="isSubmit" @click="submit"
-        >确认</el-button
-      >
-      <el-button @click="cancel">取消</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { updateSemester } from "../api";
-
-const initModalForm = {
-  id: null,
-  name: ""
-};
-
-export default {
-  name: "modify-semester",
-  props: {
-    instance: {
-      type: Object,
-      default() {
-        return {};
-      }
-    }
-  },
-  computed: {
-    isEdit() {
-      return !!this.instance.id;
-    },
-    title() {
-      return (this.isEdit ? "编辑" : "新增") + "学期";
-    }
-  },
-  data() {
-    return {
-      modalIsShow: false,
-      isSubmit: false,
-      modalForm: { ...initModalForm },
-      rules: {
-        name: [
-          {
-            required: true,
-            message: "请输入学期名称",
-            trigger: "change"
-          },
-          {
-            message: "学期名称不能超过100个字",
-            max: 100,
-            trigger: "change"
-          }
-        ]
-      }
-    };
-  },
-  methods: {
-    initData(val) {
-      if (val.id) {
-        this.modalForm = this.$objAssign(initModalForm, val);
-      } else {
-        this.modalForm = { ...initModalForm };
-      }
-    },
-    visibleChange() {
-      this.initData(this.instance);
-    },
-    cancel() {
-      this.modalIsShow = false;
-    },
-    open() {
-      this.modalIsShow = true;
-    },
-    async submit() {
-      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-      let datas = { ...this.modalForm };
-      const data = await updateSemester(datas).catch(() => {});
-      this.isSubmit = false;
-
-      if (!data) return;
-
-      this.$message.success(this.title + "成功!");
-      this.$emit("modified");
-      this.cancel();
-    }
-  }
-};
-</script>
+<template>
+  <el-dialog
+    class="modify-semester"
+    :visible.sync="modalIsShow"
+    :title="title"
+    top="10vh"
+    width="600px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-position="top"
+    >
+      <el-form-item prop="name" label="学期名称:">
+        <el-input
+          v-model.trim="modalForm.name"
+          placeholder="请输入学期名称"
+          clearable
+        ></el-input>
+        <p class="tips-info">示例:2021~2022第一学期/上学期</p>
+      </el-form-item>
+    </el-form>
+    <div slot="footer">
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+      <el-button @click="cancel">取消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { updateSemester } from "../api";
+
+const initModalForm = {
+  id: null,
+  name: "",
+};
+
+export default {
+  name: "modify-semester",
+  props: {
+    instance: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  computed: {
+    isEdit() {
+      return !!this.instance.id;
+    },
+    title() {
+      return (this.isEdit ? "编辑" : "新增") + "学期";
+    },
+  },
+  data() {
+    return {
+      modalIsShow: false,
+      isSubmit: false,
+      modalForm: { ...initModalForm },
+      rules: {
+        name: [
+          {
+            required: true,
+            message: "请输入学期名称",
+            trigger: "change",
+          },
+          {
+            message: "学期名称不能超过100个字",
+            max: 100,
+            trigger: "change",
+          },
+        ],
+      },
+    };
+  },
+  methods: {
+    initData(val) {
+      if (val.id) {
+        this.modalForm = this.$objAssign(initModalForm, val);
+      } else {
+        this.modalForm = { ...initModalForm };
+      }
+    },
+    visibleChange() {
+      this.initData(this.instance);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+      let datas = { ...this.modalForm };
+      const data = await updateSemester(datas).catch(() => {});
+      this.isSubmit = false;
+
+      if (!data) return;
+
+      this.$message.success(this.title + "成功!");
+      this.$emit("modified");
+      this.cancel();
+    },
+  },
+};
+</script>

+ 180 - 180
src/modules/base/components/ModifyTask.vue

@@ -1,180 +1,180 @@
-<template>
-  <el-dialog
-    class="modify-template"
-    :visible.sync="modalIsShow"
-    :title="title"
-    top="10vh"
-    width="600px"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    @open="visibleChange"
-  >
-    <el-form
-      ref="modalFormComp"
-      :rules="rules"
-      :model="modalForm"
-      label-width="110px"
-    >
-      <el-form-item prop="semesterId" label="学期:">
-        <semester-select
-          v-model="modalForm.semesterId"
-          class="width-400"
-          @change="semesterChange"
-        ></semester-select>
-      </el-form-item>
-      <el-form-item prop="examTypeId" label="考试类型:">
-        <exam-type-select
-          v-model="modalForm.examTypeId"
-          class="width-400"
-          @change="examTypeChange"
-        ></exam-type-select>
-      </el-form-item>
-      <el-form-item prop="startTime" label="定时任务时间:">
-        <el-date-picker
-          v-model="createTime"
-          type="datetimerange"
-          :picker-options="pickerOptions"
-          range-separator="至"
-          start-placeholder="定时任务开始时间"
-          end-placeholder="定时任务结束时间"
-          value-format="timestamp"
-          align="right"
-          unlink-panels
-          @change="dateChange"
-        >
-        </el-date-picker>
-      </el-form-item>
-    </el-form>
-
-    <div slot="footer">
-      <el-button type="primary" :disabled="isSubmit" @click="submit"
-        >确认</el-button
-      >
-      <el-button @click="cancel">取消</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { updateTimeTask } from "../api";
-import pickerOptions from "@/constants/datePickerOptions";
-
-const initModalForm = {
-  id: null,
-  semesterId: null,
-  semesterName: null,
-  examTypeId: null,
-  examTypeName: null,
-  startTime: "",
-  endTime: ""
-};
-
-export default {
-  name: "modify-task",
-  props: {
-    instance: {
-      type: Object,
-      default() {
-        return {};
-      }
-    }
-  },
-  computed: {
-    isEdit() {
-      return !!this.instance.id;
-    },
-    title() {
-      return (this.isEdit ? "编辑" : "新增") + "定时任务";
-    }
-  },
-  data() {
-    return {
-      modalIsShow: false,
-      isSubmit: false,
-      modalForm: {},
-      createTime: [],
-      pickerOptions,
-      rules: {
-        semesterId: [
-          {
-            required: true,
-            message: "请选择学期",
-            trigger: "change"
-          }
-        ],
-        examTypeId: [
-          {
-            required: true,
-            message: "请选择考试",
-            trigger: "change"
-          }
-        ],
-        startTime: [
-          {
-            required: true,
-            message: "请选择学校",
-            trigger: "change"
-          }
-        ]
-      }
-    };
-  },
-  methods: {
-    initData(val) {
-      if (val.id) {
-        this.modalForm = this.$objAssign(initModalForm, val);
-        this.createTime = [this.modalForm.startTime, this.modalForm.endTime];
-      } else {
-        this.modalForm = { ...initModalForm };
-        this.createTime = [];
-      }
-    },
-    visibleChange() {
-      this.initData(this.instance);
-
-      this.$nextTick(() => {
-        this.$refs.modalFormComp.clearValidate();
-      });
-    },
-    dateChange() {
-      if (this.createTime) {
-        this.modalForm.startTime = this.createTime[0];
-        this.modalForm.endTime = this.createTime[1];
-      } else {
-        this.modalForm.startTime = "";
-        this.modalForm.endTime = "";
-      }
-    },
-    semesterChange(val) {
-      this.modalForm.semesterName = val.name;
-    },
-    examTypeChange(val) {
-      this.modalForm.examTypeName = val.name;
-    },
-    cancel() {
-      this.modalIsShow = false;
-    },
-    open() {
-      this.modalIsShow = true;
-    },
-    async submit() {
-      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-      let datas = {
-        ...this.modalForm
-      };
-      const data = await updateTimeTask(datas).catch(() => {});
-      this.isSubmit = false;
-      if (!data) return;
-
-      this.$message.success("保存成功!");
-      this.$emit("modified");
-      this.cancel();
-    }
-  }
-};
-</script>
+<template>
+  <el-dialog
+    class="modify-template"
+    :visible.sync="modalIsShow"
+    :title="title"
+    top="10vh"
+    width="600px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      :rules="rules"
+      :model="modalForm"
+      label-width="110px"
+    >
+      <el-form-item prop="semesterId" label="学期:">
+        <semester-select
+          v-model="modalForm.semesterId"
+          class="width-400"
+          @change="semesterChange"
+        ></semester-select>
+      </el-form-item>
+      <el-form-item prop="examTypeId" label="考试类型:">
+        <exam-type-select
+          v-model="modalForm.examTypeId"
+          class="width-400"
+          @change="examTypeChange"
+        ></exam-type-select>
+      </el-form-item>
+      <el-form-item prop="startTime" label="定时任务时间:">
+        <el-date-picker
+          v-model="createTime"
+          type="datetimerange"
+          :picker-options="pickerOptions"
+          range-separator="至"
+          start-placeholder="定时任务开始时间"
+          end-placeholder="定时任务结束时间"
+          value-format="timestamp"
+          align="right"
+          unlink-panels
+          @change="dateChange"
+        >
+        </el-date-picker>
+      </el-form-item>
+    </el-form>
+
+    <div slot="footer">
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+      <el-button @click="cancel">取消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { updateTimeTask } from "../api";
+import pickerOptions from "@/constants/datePickerOptions";
+
+const initModalForm = {
+  id: null,
+  semesterId: null,
+  semesterName: null,
+  examTypeId: null,
+  examTypeName: null,
+  startTime: "",
+  endTime: "",
+};
+
+export default {
+  name: "modify-task",
+  props: {
+    instance: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  computed: {
+    isEdit() {
+      return !!this.instance.id;
+    },
+    title() {
+      return (this.isEdit ? "编辑" : "新增") + "定时任务";
+    },
+  },
+  data() {
+    return {
+      modalIsShow: false,
+      isSubmit: false,
+      modalForm: {},
+      createTime: [],
+      pickerOptions,
+      rules: {
+        semesterId: [
+          {
+            required: true,
+            message: "请选择学期",
+            trigger: "change",
+          },
+        ],
+        examTypeId: [
+          {
+            required: true,
+            message: "请选择考试",
+            trigger: "change",
+          },
+        ],
+        startTime: [
+          {
+            required: true,
+            message: "请选择学校",
+            trigger: "change",
+          },
+        ],
+      },
+    };
+  },
+  methods: {
+    initData(val) {
+      if (val.id) {
+        this.modalForm = this.$objAssign(initModalForm, val);
+        this.createTime = [this.modalForm.startTime, this.modalForm.endTime];
+      } else {
+        this.modalForm = { ...initModalForm };
+        this.createTime = [];
+      }
+    },
+    visibleChange() {
+      this.initData(this.instance);
+
+      this.$nextTick(() => {
+        this.$refs.modalFormComp.clearValidate();
+      });
+    },
+    dateChange() {
+      if (this.createTime) {
+        this.modalForm.startTime = this.createTime[0];
+        this.modalForm.endTime = this.createTime[1];
+      } else {
+        this.modalForm.startTime = "";
+        this.modalForm.endTime = "";
+      }
+    },
+    semesterChange(val) {
+      this.modalForm.semesterName = val.name;
+    },
+    examTypeChange(val) {
+      this.modalForm.examTypeName = val.name;
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+      let datas = {
+        ...this.modalForm,
+      };
+      const data = await updateTimeTask(datas).catch(() => {});
+      this.isSubmit = false;
+      if (!data) return;
+
+      this.$message.success("保存成功!");
+      this.$emit("modified");
+      this.cancel();
+    },
+  },
+};
+</script>

+ 205 - 205
src/modules/base/components/ModifyUser.vue

@@ -1,205 +1,205 @@
-<template>
-  <el-dialog
-    class="modify-user"
-    :visible.sync="modalIsShow"
-    :title="title"
-    top="10vh"
-    width="500px"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    @open="visibleChange"
-  >
-    <el-form
-      ref="modalFormComp"
-      :model="modalForm"
-      :rules="rules"
-      label-width="70px"
-    >
-      <el-form-item prop="realName" label="姓名:">
-        <el-input
-          v-model.trim="modalForm.realName"
-          placeholder="请输入姓名"
-          clearable
-        ></el-input>
-      </el-form-item>
-      <el-form-item prop="mobileNumber" label="手机号:">
-        <el-input
-          v-model.trim="modalForm.mobileNumber"
-          placeholder="请输入手机号"
-          clearable
-        ></el-input>
-      </el-form-item>
-      <el-form-item prop="password" label="密码:">
-        <el-input
-          v-model.trim="modalForm.password"
-          placeholder="请输入密码"
-          clearable
-        ></el-input>
-      </el-form-item>
-      <el-form-item prop="roleId" label="角色:">
-        <el-select
-          style="width:100%;"
-          v-model="modalForm.roleId"
-          placeholder="请选择角色"
-        >
-          <el-option
-            v-for="item in roles"
-            :key="item.id"
-            :value="item.id"
-            :label="item.name"
-          >
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="状态:" prop="enable" required>
-        <el-radio-group v-model="modalForm.enable">
-          <el-radio
-            v-for="(val, key) in ABLE_TYPE"
-            :key="key"
-            :label="key * 1"
-            >{{ val }}</el-radio
-          >
-        </el-radio-group>
-      </el-form-item>
-    </el-form>
-    <div slot="footer">
-      <el-button type="primary" :disabled="isSubmit" @click="submit"
-        >确认</el-button
-      >
-      <el-button @click="cancel">取消</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { updateUser } from "../api";
-import { password } from "@/plugins/formRules";
-import { ABLE_TYPE } from "@/constants/enumerate";
-
-const initModalForm = {
-  id: "",
-  loginName: "",
-  realName: "",
-  password: "",
-  mobileNumber: "",
-  roleId: "",
-  enable: 1
-};
-
-export default {
-  name: "modify-user",
-  props: {
-    instance: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    roles: {
-      type: Array,
-      default() {
-        return [];
-      }
-    }
-  },
-  computed: {
-    isEdit() {
-      return !!this.instance.id;
-    },
-    title() {
-      return (this.isEdit ? "编辑" : "新增") + "用户";
-    }
-  },
-  data() {
-    const mobileNumberValidator = (rule, value, callback) => {
-      if (/^1\d{10}$/.test(value)) {
-        return callback();
-      } else {
-        return callback(new Error("请输入合适的手机号码"));
-      }
-    };
-
-    return {
-      modalIsShow: false,
-      isSubmit: false,
-      modalForm: {},
-      ABLE_TYPE,
-      rules: {
-        mobileNumber: [
-          {
-            required: true,
-            validator: mobileNumberValidator,
-            trigger: "change"
-          }
-        ],
-        realName: [
-          {
-            required: true,
-            message: "请输入姓名",
-            trigger: "change"
-          },
-          {
-            max: 50,
-            message: "姓名不能超过50",
-            trigger: "change"
-          }
-        ],
-        roleId: [
-          {
-            required: true,
-            message: "请选择角色",
-            trigger: "change"
-          }
-        ],
-        password
-      },
-      user: {},
-      roleList: []
-    };
-  },
-  methods: {
-    initData(val) {
-      if (val.id) {
-        this.modalForm = this.$objAssign(initModalForm, val);
-        this.modalForm.enable = val.enable ? 1 : 0;
-      } else {
-        this.modalForm = { ...initModalForm };
-        const defRole = this.roles.find(item => item.type === "IMPLEMENT");
-        this.modalForm.roleId = defRole ? defRole.id : null;
-
-        this.$nextTick(() => {
-          this.$refs.modalFormComp.clearValidate();
-        });
-      }
-    },
-    visibleChange() {
-      this.initData(this.instance);
-    },
-    cancel() {
-      this.modalIsShow = false;
-    },
-    open() {
-      this.modalIsShow = true;
-    },
-    async submit() {
-      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-
-      const datas = { ...this.modalForm };
-      datas.enable = !!datas.enable;
-      datas.loginName = datas.mobileNumber;
-      const data = await updateUser(datas).catch(() => {});
-      this.isSubmit = false;
-      if (!data) return;
-
-      this.$message.success("修改成功!");
-      this.cancel();
-      this.$emit("modified");
-    }
-  }
-};
-</script>
+<template>
+  <el-dialog
+    class="modify-user"
+    :visible.sync="modalIsShow"
+    :title="title"
+    top="10vh"
+    width="500px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-width="70px"
+    >
+      <el-form-item prop="realName" label="姓名:">
+        <el-input
+          v-model.trim="modalForm.realName"
+          placeholder="请输入姓名"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="mobileNumber" label="手机号:">
+        <el-input
+          v-model.trim="modalForm.mobileNumber"
+          placeholder="请输入手机号"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="password" label="密码:">
+        <el-input
+          v-model.trim="modalForm.password"
+          placeholder="请输入密码"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="roleId" label="角色:">
+        <el-select
+          style="width: 100%"
+          v-model="modalForm.roleId"
+          placeholder="请选择角色"
+        >
+          <el-option
+            v-for="item in roles"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="状态:" prop="enable" required>
+        <el-radio-group v-model="modalForm.enable">
+          <el-radio
+            v-for="(val, key) in ABLE_TYPE"
+            :key="key"
+            :label="key * 1"
+            >{{ val }}</el-radio
+          >
+        </el-radio-group>
+      </el-form-item>
+    </el-form>
+    <div slot="footer">
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+      <el-button @click="cancel">取消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { updateUser } from "../api";
+import { password } from "@/plugins/formRules";
+import { ABLE_TYPE } from "@/constants/enumerate";
+
+const initModalForm = {
+  id: "",
+  loginName: "",
+  realName: "",
+  password: "",
+  mobileNumber: "",
+  roleId: "",
+  enable: 1,
+};
+
+export default {
+  name: "modify-user",
+  props: {
+    instance: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    roles: {
+      type: Array,
+      default() {
+        return [];
+      },
+    },
+  },
+  computed: {
+    isEdit() {
+      return !!this.instance.id;
+    },
+    title() {
+      return (this.isEdit ? "编辑" : "新增") + "用户";
+    },
+  },
+  data() {
+    const mobileNumberValidator = (rule, value, callback) => {
+      if (/^1\d{10}$/.test(value)) {
+        return callback();
+      } else {
+        return callback(new Error("请输入合适的手机号码"));
+      }
+    };
+
+    return {
+      modalIsShow: false,
+      isSubmit: false,
+      modalForm: {},
+      ABLE_TYPE,
+      rules: {
+        mobileNumber: [
+          {
+            required: true,
+            validator: mobileNumberValidator,
+            trigger: "change",
+          },
+        ],
+        realName: [
+          {
+            required: true,
+            message: "请输入姓名",
+            trigger: "change",
+          },
+          {
+            max: 50,
+            message: "姓名不能超过50",
+            trigger: "change",
+          },
+        ],
+        roleId: [
+          {
+            required: true,
+            message: "请选择角色",
+            trigger: "change",
+          },
+        ],
+        password,
+      },
+      user: {},
+      roleList: [],
+    };
+  },
+  methods: {
+    initData(val) {
+      if (val.id) {
+        this.modalForm = this.$objAssign(initModalForm, val);
+        this.modalForm.enable = val.enable ? 1 : 0;
+      } else {
+        this.modalForm = { ...initModalForm };
+        const defRole = this.roles.find((item) => item.type === "IMPLEMENT");
+        this.modalForm.roleId = defRole ? defRole.id : null;
+
+        this.$nextTick(() => {
+          this.$refs.modalFormComp.clearValidate();
+        });
+      }
+    },
+    visibleChange() {
+      this.initData(this.instance);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+
+      const datas = { ...this.modalForm };
+      datas.enable = !!datas.enable;
+      datas.loginName = datas.mobileNumber;
+      const data = await updateUser(datas).catch(() => {});
+      this.isSubmit = false;
+      if (!data) return;
+
+      this.$message.success("修改成功!");
+      this.cancel();
+      this.$emit("modified");
+    },
+  },
+};
+</script>

+ 140 - 140
src/modules/base/components/SignDownloadData.vue

@@ -1,140 +1,140 @@
-<template>
-  <el-dialog
-    class="sign-download-data"
-    :visible.sync="modalIsShow"
-    title="标记用途"
-    top="10vh"
-    width="600px"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    @open="visibleChange"
-  >
-    <el-form
-      ref="modalFormComp"
-      :model="modalForm"
-      :rules="rules"
-      label-width="100px"
-    >
-      <el-form-item prop="used" label="是否使用:">
-        <el-radio-group v-model="modalForm.used">
-          <el-radio
-            v-for="(val, key) in BOOLEAN_TYPE"
-            :key="key"
-            :label="key * 1"
-            >{{ val }}</el-radio
-          >
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item prop="useScene" label="下载用途:">
-        <el-select
-          v-model="modalForm.useScene"
-          placeholder="下载用途"
-          clearable
-          multiple
-          class="width-400"
-        >
-          <el-option
-            v-for="item in useScenes"
-            :key="item.name"
-            :value="item.name"
-            :label="item.desc"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-    </el-form>
-    <div slot="footer">
-      <el-button type="primary" :disabled="isSubmit" @click="submit"
-        >确认</el-button
-      >
-      <el-button @click="cancel">取消</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { BOOLEAN_TYPE } from "../../../constants/enumerate";
-import { signPurpose } from "../api";
-
-const initModalForm = {
-  used: 1,
-  useScene: []
-};
-
-export default {
-  name: "sign-download-data",
-  props: {
-    ids: {
-      type: Array,
-      default() {
-        return [];
-      }
-    },
-    useScenes: {
-      type: Array,
-      default() {
-        return [];
-      }
-    }
-  },
-  data() {
-    return {
-      modalIsShow: false,
-      isSubmit: false,
-      BOOLEAN_TYPE,
-      modalForm: {},
-      rules: {
-        used: [
-          {
-            required: true,
-            message: "请选择是否使用",
-            trigger: "change"
-          }
-        ],
-        useScene: [
-          {
-            required: true,
-            message: "请选择下载用途",
-            validator: (rule, value, callback) => {
-              if (!value || !value.length) {
-                return callback("请选择下载用途");
-              }
-              return callback();
-            },
-            trigger: "change"
-          }
-        ]
-      }
-    };
-  },
-  methods: {
-    visibleChange() {
-      this.modalForm = { ...initModalForm };
-    },
-    cancel() {
-      this.modalIsShow = false;
-    },
-    open() {
-      this.modalIsShow = true;
-    },
-    async submit() {
-      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-
-      const datas = { ...this.modalForm, id: this.ids.join() };
-      datas.used = !!datas.used;
-      datas.useScene = datas.useScene.join();
-      const data = await signPurpose(datas).catch(() => {});
-      this.isSubmit = false;
-      if (!data) return;
-
-      this.$message.success("操作成功!");
-      this.cancel();
-      this.$emit("modified");
-    }
-  }
-};
-</script>
+<template>
+  <el-dialog
+    class="sign-download-data"
+    :visible.sync="modalIsShow"
+    title="标记用途"
+    top="10vh"
+    width="600px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-width="100px"
+    >
+      <el-form-item prop="used" label="是否使用:">
+        <el-radio-group v-model="modalForm.used">
+          <el-radio
+            v-for="(val, key) in BOOLEAN_TYPE"
+            :key="key"
+            :label="key * 1"
+            >{{ val }}</el-radio
+          >
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item prop="useScene" label="下载用途:">
+        <el-select
+          v-model="modalForm.useScene"
+          placeholder="下载用途"
+          clearable
+          multiple
+          class="width-400"
+        >
+          <el-option
+            v-for="item in useScenes"
+            :key="item.name"
+            :value="item.name"
+            :label="item.desc"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <div slot="footer">
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+      <el-button @click="cancel">取消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { BOOLEAN_TYPE } from "../../../constants/enumerate";
+import { signPurpose } from "../api";
+
+const initModalForm = {
+  used: 1,
+  useScene: [],
+};
+
+export default {
+  name: "sign-download-data",
+  props: {
+    ids: {
+      type: Array,
+      default() {
+        return [];
+      },
+    },
+    useScenes: {
+      type: Array,
+      default() {
+        return [];
+      },
+    },
+  },
+  data() {
+    return {
+      modalIsShow: false,
+      isSubmit: false,
+      BOOLEAN_TYPE,
+      modalForm: {},
+      rules: {
+        used: [
+          {
+            required: true,
+            message: "请选择是否使用",
+            trigger: "change",
+          },
+        ],
+        useScene: [
+          {
+            required: true,
+            message: "请选择下载用途",
+            validator: (rule, value, callback) => {
+              if (!value || !value.length) {
+                return callback("请选择下载用途");
+              }
+              return callback();
+            },
+            trigger: "change",
+          },
+        ],
+      },
+    };
+  },
+  methods: {
+    visibleChange() {
+      this.modalForm = { ...initModalForm };
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+
+      const datas = { ...this.modalForm, id: this.ids.join() };
+      datas.used = !!datas.used;
+      datas.useScene = datas.useScene.join();
+      const data = await signPurpose(datas).catch(() => {});
+      this.isSubmit = false;
+      if (!data) return;
+
+      this.$message.success("操作成功!");
+      this.cancel();
+      this.$emit("modified");
+    },
+  },
+};
+</script>

+ 2034 - 2034
src/modules/base/components/privilege/navs.json

@@ -1,2034 +1,2034 @@
-[
-  {
-    "id": "1",
-    "name": "基础配置",
-    "url": "base",
-    "type": "MENU",
-    "parentId": "-1",
-    "sequence": 1,
-    "children": [
-      {
-        "id": "2",
-        "name": "用户管理",
-        "url": "user",
-        "type": "MENU",
-        "parentId": "1",
-        "sequence": 1,
-        "children": [
-          {
-            "id": "4",
-            "name": "组织架构",
-            "url": "OrganizationManage",
-            "type": "MENU",
-            "parentId": "2",
-            "sequence": 1,
-            "children": [],
-            "buttons": [
-              {
-                "id": "224",
-                "name": "组织架构-添加",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "4",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "225",
-                "name": "组织架构-+子部门",
-                "url": "Add",
-                "type": "LINK",
-                "parentId": "4",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "226",
-                "name": "组织架构-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "4",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "227",
-                "name": "组织架构-删除",
-                "url": "Delete",
-                "type": "LINK",
-                "parentId": "4",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "228",
-                "name": "组织架构-树形列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "4",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "389",
-                "name": "课程管理-机构列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "4",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "234",
-                "name": "组织架构-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "4",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "5",
-            "name": "用户管理",
-            "url": "UserManage",
-            "type": "MENU",
-            "parentId": "2",
-            "sequence": 2,
-            "children": [],
-            "buttons": [
-              {
-                "id": "217",
-                "name": "用户管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "5",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "218",
-                "name": "用户管理-添加用户",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "5",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "243",
-                "name": "用户管理-批量导入",
-                "url": "Export",
-                "type": "BUTTON",
-                "parentId": "5",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "219",
-                "name": "用户管理-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "5",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "220",
-                "name": "用户管理-启用&禁用",
-                "url": "Enable",
-                "type": "LINK",
-                "parentId": "5",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "223",
-                "name": "用户管理-重置",
-                "url": "Reset",
-                "type": "LINK",
-                "parentId": "5",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "221",
-                "name": "用户管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "5",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "222",
-                "name": "用户管理-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "5",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "6",
-            "name": "角色管理",
-            "url": "RoleManage",
-            "type": "MENU",
-            "parentId": "2",
-            "sequence": 3,
-            "children": [],
-            "buttons": [
-              {
-                "id": "229",
-                "name": "角色管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "6",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "230",
-                "name": "角色管理-添加角色",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "6",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "231",
-                "name": "角色管理-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "6",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "232",
-                "name": "角色管理-删除",
-                "url": "Delete",
-                "type": "LINK",
-                "parentId": "6",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "233",
-                "name": "角色管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "6",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "235",
-                "name": "角色管理-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "6",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "id": "3",
-        "name": "配置管理",
-        "url": "rule",
-        "type": "MENU",
-        "parentId": "1",
-        "sequence": 2,
-        "children": [
-          {
-            "id": "8",
-            "name": "通用规则",
-            "url": "CommonRule",
-            "type": "MENU",
-            "parentId": "3",
-            "sequence": 1,
-            "children": [],
-            "buttons": [
-              {
-                "id": "236",
-                "name": "考务规则-考务规则配置",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "8",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "9",
-            "name": "题卡规则管理",
-            "url": "CardRuleManage",
-            "type": "MENU",
-            "parentId": "3",
-            "sequence": 2,
-            "children": [],
-            "buttons": [
-              {
-                "id": "237",
-                "name": "题卡规则-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "9",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "238",
-                "name": "题卡规则-添加",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "9",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "342",
-                "name": "题卡规则-预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "9",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "343",
-                "name": "题卡规则-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "9",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "345",
-                "name": "题卡规则-启用&禁用",
-                "url": "Enable",
-                "type": "LINK",
-                "parentId": "9",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "240",
-                "name": "题卡规则-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "9",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "239",
-                "name": "题卡规则-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "9",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "10",
-            "name": "通卡模板",
-            "url": "CommonCardTemplate",
-            "type": "MENU",
-            "parentId": "3",
-            "sequence": 3,
-            "children": [],
-            "buttons": [
-              {
-                "id": "241",
-                "name": "通卡模版-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "10",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "242",
-                "name": "通卡模版-添加模版",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "10",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "244",
-                "name": "通卡模版-预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "10",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "245",
-                "name": "通卡模版-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "10",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "246",
-                "name": "通卡模版-启用&禁用",
-                "url": "Enable",
-                "type": "LINK",
-                "parentId": "10",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "248",
-                "name": "通卡模版-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "10",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "247",
-                "name": "通卡模版-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "10",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "11",
-            "name": "变量印品模板",
-            "url": "ParamPrintTemplate",
-            "type": "MENU",
-            "parentId": "3",
-            "sequence": 4,
-            "children": [],
-            "buttons": [
-              {
-                "id": "249",
-                "name": "变量印品模版-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "11",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "250",
-                "name": "变量印品模版-添加模版",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "11",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "251",
-                "name": "变量印品模版-预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "11",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "252",
-                "name": "变量印品模版-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "11",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "253",
-                "name": "变量印品模版-启用&禁用",
-                "url": "Enable",
-                "type": "LINK",
-                "parentId": "11",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "255",
-                "name": "变量印品模版-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "11",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "254",
-                "name": "变量印品模版-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "11",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "12",
-            "name": "普通印品模板",
-            "url": "CommonPrintTemplate",
-            "type": "MENU",
-            "parentId": "3",
-            "sequence": 5,
-            "children": [],
-            "buttons": [
-              {
-                "id": "256",
-                "name": "普通印品模版-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "12",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "257",
-                "name": "普通印品模版-添加模版",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "12",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "258",
-                "name": "普通印品模版-预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "12",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "259",
-                "name": "普通印品模版-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "12",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "260",
-                "name": "普通印品模版-启用&禁用",
-                "url": "Enable",
-                "type": "LINK",
-                "parentId": "12",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "262",
-                "name": "普通印品模版-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "12",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "261",
-                "name": "普通印品模版-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "12",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "13",
-            "name": "课程管理",
-            "url": "CourseManage",
-            "type": "MENU",
-            "parentId": "3",
-            "sequence": 6,
-            "children": [],
-            "buttons": [
-              {
-                "id": "263",
-                "name": "课程管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "264",
-                "name": "课程管理-批量禁用",
-                "url": "BatchEnable",
-                "type": "BUTTON",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "265",
-                "name": "课程管理-模版下载",
-                "url": "TempleteDownload",
-                "type": "BUTTON",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              },
-              {
-                "id": "266",
-                "name": "课程管理-批量导入",
-                "url": "Export",
-                "type": "BUTTON",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 4,
-                "enable": true
-              },
-              {
-                "id": "267",
-                "name": "课程管理-新增课程",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 5,
-                "enable": true
-              },
-              {
-                "id": "383",
-                "name": "课程管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "385",
-                "name": "课程管理-新增",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "388",
-                "name": "课程管理-批量导入",
-                "url": "Import",
-                "type": "BUTTON",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "268",
-                "name": "课程管理-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "269",
-                "name": "课程管理-删除",
-                "url": "Delete",
-                "type": "LINK",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "386",
-                "name": "课程管理-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "387",
-                "name": "课程管理-删除",
-                "url": "Delete",
-                "type": "LINK",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "271",
-                "name": "课程管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "384",
-                "name": "课程管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "270",
-                "name": "课程管理-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "13",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "id": "356",
-        "name": "字典管理",
-        "url": "dictionary",
-        "type": "MENU",
-        "parentId": "1",
-        "sequence": 1,
-        "children": [
-          {
-            "id": "357",
-            "name": "校区管理",
-            "url": "CampusManage",
-            "type": "MENU",
-            "parentId": "356",
-            "sequence": 1,
-            "children": [],
-            "buttons": [
-              {
-                "id": "372",
-                "name": "校区管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "357",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "374",
-                "name": "校区管理-新增",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "357",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "375",
-                "name": "校区管理-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "357",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "376",
-                "name": "校区管理-删除",
-                "url": "Delete",
-                "type": "LINK",
-                "parentId": "357",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "373",
-                "name": "校区管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "357",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "358",
-            "name": "学生管理",
-            "url": "StudentManage",
-            "type": "MENU",
-            "parentId": "356",
-            "sequence": 2,
-            "children": [],
-            "buttons": [
-              {
-                "id": "377",
-                "name": "学生管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "358",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "379",
-                "name": "学生管理-新增",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "358",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "382",
-                "name": "学生管理-批量导入",
-                "url": "Import",
-                "type": "BUTTON",
-                "parentId": "358",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "380",
-                "name": "学生管理-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "358",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "381",
-                "name": "学生管理-删除",
-                "url": "Delete",
-                "type": "LINK",
-                "parentId": "358",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "378",
-                "name": "学生管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "358",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          }
-        ]
-      }
-    ]
-  },
-  {
-    "id": "14",
-    "name": "考试中心",
-    "url": "exam",
-    "type": "MENU",
-    "parentId": "-1",
-    "sequence": 2,
-    "children": [
-      {
-        "id": "15",
-        "name": "我的工作台",
-        "url": "work",
-        "type": "MENU",
-        "parentId": "14",
-        "sequence": 1,
-        "children": [
-          {
-            "id": "16",
-            "name": "待办任务",
-            "url": "WaitTask",
-            "type": "MENU",
-            "parentId": "15",
-            "sequence": 1,
-            "children": []
-          }
-        ]
-      },
-      {
-        "id": "37",
-        "name": "命题管理",
-        "url": "paper",
-        "type": "MENU",
-        "parentId": "14",
-        "sequence": 2,
-        "children": [
-          {
-            "id": "39",
-            "name": "命题任务管理",
-            "url": "ExamTaskManage",
-            "type": "MENU",
-            "parentId": "37",
-            "sequence": 1,
-            "children": [],
-            "buttons": [
-              {
-                "id": "272",
-                "name": "命题任务管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "39",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "273",
-                "name": "命题任务管理-批量新建命题任务",
-                "url": "BatchAdd",
-                "type": "BUTTON",
-                "parentId": "39",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "274",
-                "name": "命题任务管理-新建命题任务",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "39",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "275",
-                "name": "命题任务管理-预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "39",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "276",
-                "name": "命题任务管理-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "39",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "277",
-                "name": "命题任务管理-取消任务",
-                "url": "Cancel",
-                "type": "LINK",
-                "parentId": "39",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "279",
-                "name": "命题任务管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "39",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "278",
-                "name": "命题任务管理-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "39",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "40",
-            "name": "入库申请",
-            "url": "TaskApplyManage",
-            "type": "MENU",
-            "parentId": "37",
-            "sequence": 2,
-            "children": [],
-            "buttons": [
-              {
-                "id": "280",
-                "name": "入库申请-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "40",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "307",
-                "name": "入库申请-新建命题申请",
-                "url": "AddTask",
-                "type": "BUTTON",
-                "parentId": "40",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "281",
-                "name": "入库申请-预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "40",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "282",
-                "name": "入库申请-撤销申请",
-                "url": "End",
-                "type": "LINK",
-                "parentId": "40",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "283",
-                "name": "入库申请-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "40",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "285",
-                "name": "入库申请-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "40",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "284",
-                "name": "入库申请-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "40",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "41",
-            "name": "入库审核",
-            "url": "TaskReviewManage",
-            "type": "MENU",
-            "parentId": "37",
-            "sequence": 3,
-            "children": [],
-            "buttons": [
-              {
-                "id": "288",
-                "name": "入库审核-未审核查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "289",
-                "name": "入库审核-未审核导出审核样本",
-                "url": "Export",
-                "type": "BUTTON",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "290",
-                "name": "入库审核-未审核批量不通过",
-                "url": "BatchNotPass",
-                "type": "BUTTON",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              },
-              {
-                "id": "291",
-                "name": "入库审核-未审核批量通过",
-                "url": "BatchPass",
-                "type": "BUTTON",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 4,
-                "enable": true
-              },
-              {
-                "id": "295",
-                "name": "入库审核-已审核查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "292",
-                "name": "入库审核-未审核编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "296",
-                "name": "入库审核-已审核预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "294",
-                "name": "入库审核-未审核列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "298",
-                "name": "入库审核-已审核列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "293",
-                "name": "入库审核-未审核查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "297",
-                "name": "入库审核-已审核查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "41",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "42",
-            "name": "卷库查询",
-            "url": "TaskPaperManage",
-            "type": "MENU",
-            "parentId": "37",
-            "sequence": 4,
-            "children": [],
-            "buttons": [
-              {
-                "id": "299",
-                "name": "卷库查询-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "42",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "300",
-                "name": "卷库查询-批量下载试卷题卡",
-                "url": "BatchDownload",
-                "type": "BUTTON",
-                "parentId": "42",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "301",
-                "name": "卷库查询-预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "42",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "302",
-                "name": "卷库查询-启用&禁用",
-                "url": "Enable",
-                "type": "LINK",
-                "parentId": "42",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "303",
-                "name": "卷库查询-下载",
-                "url": "Download",
-                "type": "LINK",
-                "parentId": "42",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              },
-              {
-                "id": "306",
-                "name": "卷库查询-发布印刷任务",
-                "url": "Publish",
-                "type": "LINK",
-                "parentId": "42",
-                "schoolId": "2",
-                "sequence": 4,
-                "enable": true
-              },
-              {
-                "id": "308",
-                "name": "卷库查询-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "42",
-                "schoolId": "2",
-                "sequence": 4,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "305",
-                "name": "卷库查询-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "42",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "304",
-                "name": "卷库查询-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "42",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "id": "38",
-        "name": "印刷管理",
-        "url": "print",
-        "type": "MENU",
-        "parentId": "14",
-        "sequence": 3,
-        "children": [
-          {
-            "id": "43",
-            "name": "印刷计划管理",
-            "url": "PrintPlanManage",
-            "type": "MENU",
-            "parentId": "38",
-            "sequence": 1,
-            "children": [],
-            "buttons": [
-              {
-                "id": "309",
-                "name": "印刷计划管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "43",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "310",
-                "name": "印刷计划管理-新建印刷计划",
-                "url": "Add",
-                "type": "BUTTON",
-                "parentId": "43",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "311",
-                "name": "印刷计划管理-预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "43",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "312",
-                "name": "印刷计划管理-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "43",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "313",
-                "name": "印刷计划管理-删除",
-                "url": "Delete",
-                "type": "LINK",
-                "parentId": "43",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "315",
-                "name": "印刷计划管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "43",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "314",
-                "name": "印刷计划管理-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "43",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "44",
-            "name": "考务数据导入",
-            "url": "BusinessDataExport",
-            "type": "MENU",
-            "parentId": "38",
-            "sequence": 2,
-            "children": [],
-            "buttons": [
-              {
-                "id": "316",
-                "name": "考务数据导入-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "44",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "317",
-                "name": "考务数据导入-考务数据模版下载",
-                "url": "TempleteDownload",
-                "type": "BUTTON",
-                "parentId": "44",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "318",
-                "name": "考务数据导入-导出查询结果",
-                "url": "Export",
-                "type": "BUTTON",
-                "parentId": "44",
-                "schoolId": "2",
-                "sequence": 3,
-                "enable": true
-              },
-              {
-                "id": "319",
-                "name": "考务数据导入-导入",
-                "url": "Import",
-                "type": "BUTTON",
-                "parentId": "44",
-                "schoolId": "2",
-                "sequence": 4,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "320",
-                "name": "考务数据导入-预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "44",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "322",
-                "name": "考务数据导入-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "44",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "321",
-                "name": "考务数据导入-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "44",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "45",
-            "name": "考务明细查询",
-            "url": "BusinessDataDetail",
-            "type": "MENU",
-            "parentId": "38",
-            "sequence": 3,
-            "children": [],
-            "buttons": [
-              {
-                "id": "323",
-                "name": "考务明细查询-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "45",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "324",
-                "name": "考务明细查询-预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "45",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "326",
-                "name": "考务明细查询-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "45",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "325",
-                "name": "考务明细查询-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "45",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "46",
-            "name": "关联试卷管理",
-            "url": "PlanLinkPaper",
-            "type": "MENU",
-            "parentId": "38",
-            "sequence": 4,
-            "children": [],
-            "buttons": [
-              {
-                "id": "327",
-                "name": "关联试卷管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "46",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "328",
-                "name": "关联试卷管理-编辑",
-                "url": "Edit",
-                "type": "LINK",
-                "parentId": "46",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "330",
-                "name": "关联试卷管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "46",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "329",
-                "name": "关联试卷管理-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "46",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          },
-          {
-            "id": "47",
-            "name": "印刷任务管理",
-            "url": "PrintTaskManage",
-            "type": "MENU",
-            "parentId": "38",
-            "sequence": 5,
-            "children": [],
-            "buttons": [
-              {
-                "id": "331",
-                "name": "印刷任务管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "47",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "336",
-                "name": "印刷任务管理-批量下载PDF",
-                "url": "BatchDownload",
-                "type": "BUTTON",
-                "parentId": "47",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "332",
-                "name": "印刷任务管理-下载",
-                "url": "Download",
-                "type": "LINK",
-                "parentId": "47",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "335",
-                "name": "印刷任务管理-撤回",
-                "url": "End",
-                "type": "LINK",
-                "parentId": "47",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "334",
-                "name": "印刷任务管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "47",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "333",
-                "name": "印刷任务管理-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "47",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "id": "112",
-        "name": "数据管理",
-        "url": "data",
-        "type": "MENU",
-        "parentId": "14",
-        "sequence": 4,
-        "children": [
-          {
-            "id": "113",
-            "name": "任务管理",
-            "url": "DataTaskManage",
-            "type": "MENU",
-            "parentId": "112",
-            "sequence": 1,
-            "children": [],
-            "buttons": [
-              {
-                "id": "337",
-                "name": "任务管理-查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "113",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "338",
-                "name": "任务管理-导出日志",
-                "url": "Export",
-                "type": "LINK",
-                "parentId": "113",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "339",
-                "name": "任务管理-下载文件",
-                "url": "Download",
-                "type": "LINK",
-                "parentId": "113",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "341",
-                "name": "任务管理-列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "113",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "340",
-                "name": "任务管理-查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "113",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          }
-        ]
-      }
-    ]
-  },
-  {
-    "id": "170",
-    "name": "客服制卡",
-    "url": "customer",
-    "type": "MENU",
-    "parentId": "-1",
-    "sequence": 4,
-    "children": [
-      {
-        "id": "171",
-        "name": "客服制卡",
-        "url": "customer",
-        "type": "MENU",
-        "parentId": "170",
-        "sequence": 1,
-        "children": [
-          {
-            "id": "172",
-            "name": "题卡审核",
-            "url": "CustomerCard",
-            "type": "MENU",
-            "parentId": "171",
-            "sequence": 1,
-            "children": [],
-            "buttons": [
-              {
-                "id": "346",
-                "name": "题卡审核-待审核查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "172",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "347",
-                "name": "题卡审核-待审核批量下载试卷文件",
-                "url": "BatchDownload",
-                "type": "BUTTON",
-                "parentId": "172",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "352",
-                "name": "题卡审核-已审核查询",
-                "url": "Select",
-                "type": "BUTTON",
-                "parentId": "172",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "links": [
-              {
-                "id": "350",
-                "name": "题卡审核-待审核预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "172",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "351",
-                "name": "题卡审核-待审核设计题卡",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "172",
-                "schoolId": "2",
-                "sequence": 2,
-                "enable": true
-              },
-              {
-                "id": "355",
-                "name": "题卡审核-已审核预览",
-                "url": "Preview",
-                "type": "LINK",
-                "parentId": "172",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "lists": [
-              {
-                "id": "349",
-                "name": "题卡审核-待审核列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "172",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "354",
-                "name": "题卡审核-已审核列表",
-                "url": "List",
-                "type": "LIST",
-                "parentId": "172",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ],
-            "conditions": [
-              {
-                "id": "348",
-                "name": "题卡审核-待审核查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "172",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              },
-              {
-                "id": "353",
-                "name": "题卡审核-已审核查询条件",
-                "url": "Condition",
-                "type": "CONDITION",
-                "parentId": "172",
-                "schoolId": "2",
-                "sequence": 1,
-                "enable": true
-              }
-            ]
-          }
-        ]
-      }
-    ]
-  },
-  {
-    "id": "199",
-    "name": "客户端",
-    "url": "client",
-    "type": "MENU",
-    "parentId": "-1",
-    "sequence": 22,
-    "children": []
-  }
-]
+[
+  {
+    "id": "1",
+    "name": "基础配置",
+    "url": "base",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 1,
+    "children": [
+      {
+        "id": "2",
+        "name": "用户管理",
+        "url": "user",
+        "type": "MENU",
+        "parentId": "1",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "4",
+            "name": "组织架构",
+            "url": "OrganizationManage",
+            "type": "MENU",
+            "parentId": "2",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "224",
+                "name": "组织架构-添加",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "4",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "225",
+                "name": "组织架构-+子部门",
+                "url": "Add",
+                "type": "LINK",
+                "parentId": "4",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "226",
+                "name": "组织架构-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "4",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "227",
+                "name": "组织架构-删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "4",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "228",
+                "name": "组织架构-树形列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "4",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "389",
+                "name": "课程管理-机构列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "4",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "234",
+                "name": "组织架构-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "4",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "5",
+            "name": "用户管理",
+            "url": "UserManage",
+            "type": "MENU",
+            "parentId": "2",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "217",
+                "name": "用户管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "5",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "218",
+                "name": "用户管理-添加用户",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "5",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "243",
+                "name": "用户管理-批量导入",
+                "url": "Export",
+                "type": "BUTTON",
+                "parentId": "5",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "219",
+                "name": "用户管理-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "5",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "220",
+                "name": "用户管理-启用&禁用",
+                "url": "Enable",
+                "type": "LINK",
+                "parentId": "5",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "223",
+                "name": "用户管理-重置",
+                "url": "Reset",
+                "type": "LINK",
+                "parentId": "5",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "221",
+                "name": "用户管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "5",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "222",
+                "name": "用户管理-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "5",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "6",
+            "name": "角色管理",
+            "url": "RoleManage",
+            "type": "MENU",
+            "parentId": "2",
+            "sequence": 3,
+            "children": [],
+            "buttons": [
+              {
+                "id": "229",
+                "name": "角色管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "6",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "230",
+                "name": "角色管理-添加角色",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "6",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "231",
+                "name": "角色管理-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "6",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "232",
+                "name": "角色管理-删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "6",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "233",
+                "name": "角色管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "6",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "235",
+                "name": "角色管理-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "6",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "id": "3",
+        "name": "配置管理",
+        "url": "rule",
+        "type": "MENU",
+        "parentId": "1",
+        "sequence": 2,
+        "children": [
+          {
+            "id": "8",
+            "name": "通用规则",
+            "url": "CommonRule",
+            "type": "MENU",
+            "parentId": "3",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "236",
+                "name": "考务规则-考务规则配置",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "8",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "9",
+            "name": "题卡规则管理",
+            "url": "CardRuleManage",
+            "type": "MENU",
+            "parentId": "3",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "237",
+                "name": "题卡规则-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "9",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "238",
+                "name": "题卡规则-添加",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "9",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "342",
+                "name": "题卡规则-预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "9",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "343",
+                "name": "题卡规则-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "9",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "345",
+                "name": "题卡规则-启用&禁用",
+                "url": "Enable",
+                "type": "LINK",
+                "parentId": "9",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "240",
+                "name": "题卡规则-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "9",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "239",
+                "name": "题卡规则-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "9",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "10",
+            "name": "通卡模板",
+            "url": "CommonCardTemplate",
+            "type": "MENU",
+            "parentId": "3",
+            "sequence": 3,
+            "children": [],
+            "buttons": [
+              {
+                "id": "241",
+                "name": "通卡模版-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "10",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "242",
+                "name": "通卡模版-添加模版",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "10",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "244",
+                "name": "通卡模版-预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "10",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "245",
+                "name": "通卡模版-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "10",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "246",
+                "name": "通卡模版-启用&禁用",
+                "url": "Enable",
+                "type": "LINK",
+                "parentId": "10",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "248",
+                "name": "通卡模版-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "10",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "247",
+                "name": "通卡模版-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "10",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "11",
+            "name": "变量印品模板",
+            "url": "ParamPrintTemplate",
+            "type": "MENU",
+            "parentId": "3",
+            "sequence": 4,
+            "children": [],
+            "buttons": [
+              {
+                "id": "249",
+                "name": "变量印品模版-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "11",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "250",
+                "name": "变量印品模版-添加模版",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "11",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "251",
+                "name": "变量印品模版-预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "11",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "252",
+                "name": "变量印品模版-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "11",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "253",
+                "name": "变量印品模版-启用&禁用",
+                "url": "Enable",
+                "type": "LINK",
+                "parentId": "11",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "255",
+                "name": "变量印品模版-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "11",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "254",
+                "name": "变量印品模版-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "11",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "12",
+            "name": "普通印品模板",
+            "url": "CommonPrintTemplate",
+            "type": "MENU",
+            "parentId": "3",
+            "sequence": 5,
+            "children": [],
+            "buttons": [
+              {
+                "id": "256",
+                "name": "普通印品模版-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "12",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "257",
+                "name": "普通印品模版-添加模版",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "12",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "258",
+                "name": "普通印品模版-预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "12",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "259",
+                "name": "普通印品模版-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "12",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "260",
+                "name": "普通印品模版-启用&禁用",
+                "url": "Enable",
+                "type": "LINK",
+                "parentId": "12",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "262",
+                "name": "普通印品模版-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "12",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "261",
+                "name": "普通印品模版-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "12",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "13",
+            "name": "课程管理",
+            "url": "CourseManage",
+            "type": "MENU",
+            "parentId": "3",
+            "sequence": 6,
+            "children": [],
+            "buttons": [
+              {
+                "id": "263",
+                "name": "课程管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "264",
+                "name": "课程管理-批量禁用",
+                "url": "BatchEnable",
+                "type": "BUTTON",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "265",
+                "name": "课程管理-模版下载",
+                "url": "TempleteDownload",
+                "type": "BUTTON",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "266",
+                "name": "课程管理-批量导入",
+                "url": "Export",
+                "type": "BUTTON",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 4,
+                "enable": true
+              },
+              {
+                "id": "267",
+                "name": "课程管理-新增课程",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 5,
+                "enable": true
+              },
+              {
+                "id": "383",
+                "name": "课程管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "385",
+                "name": "课程管理-新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "388",
+                "name": "课程管理-批量导入",
+                "url": "Import",
+                "type": "BUTTON",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "268",
+                "name": "课程管理-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "269",
+                "name": "课程管理-删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "386",
+                "name": "课程管理-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "387",
+                "name": "课程管理-删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "271",
+                "name": "课程管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "384",
+                "name": "课程管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "270",
+                "name": "课程管理-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "13",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "id": "356",
+        "name": "字典管理",
+        "url": "dictionary",
+        "type": "MENU",
+        "parentId": "1",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "357",
+            "name": "校区管理",
+            "url": "CampusManage",
+            "type": "MENU",
+            "parentId": "356",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "372",
+                "name": "校区管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "357",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "374",
+                "name": "校区管理-新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "357",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "375",
+                "name": "校区管理-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "357",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "376",
+                "name": "校区管理-删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "357",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "373",
+                "name": "校区管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "357",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "358",
+            "name": "学生管理",
+            "url": "StudentManage",
+            "type": "MENU",
+            "parentId": "356",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "377",
+                "name": "学生管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "358",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "379",
+                "name": "学生管理-新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "358",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "382",
+                "name": "学生管理-批量导入",
+                "url": "Import",
+                "type": "BUTTON",
+                "parentId": "358",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "380",
+                "name": "学生管理-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "358",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "381",
+                "name": "学生管理-删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "358",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "378",
+                "name": "学生管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "358",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "id": "14",
+    "name": "考试中心",
+    "url": "exam",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 2,
+    "children": [
+      {
+        "id": "15",
+        "name": "我的工作台",
+        "url": "work",
+        "type": "MENU",
+        "parentId": "14",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "16",
+            "name": "待办任务",
+            "url": "WaitTask",
+            "type": "MENU",
+            "parentId": "15",
+            "sequence": 1,
+            "children": []
+          }
+        ]
+      },
+      {
+        "id": "37",
+        "name": "命题管理",
+        "url": "paper",
+        "type": "MENU",
+        "parentId": "14",
+        "sequence": 2,
+        "children": [
+          {
+            "id": "39",
+            "name": "命题任务管理",
+            "url": "ExamTaskManage",
+            "type": "MENU",
+            "parentId": "37",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "272",
+                "name": "命题任务管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "39",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "273",
+                "name": "命题任务管理-批量新建命题任务",
+                "url": "BatchAdd",
+                "type": "BUTTON",
+                "parentId": "39",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "274",
+                "name": "命题任务管理-新建命题任务",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "39",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "275",
+                "name": "命题任务管理-预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "39",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "276",
+                "name": "命题任务管理-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "39",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "277",
+                "name": "命题任务管理-取消任务",
+                "url": "Cancel",
+                "type": "LINK",
+                "parentId": "39",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "279",
+                "name": "命题任务管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "39",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "278",
+                "name": "命题任务管理-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "39",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "40",
+            "name": "入库申请",
+            "url": "TaskApplyManage",
+            "type": "MENU",
+            "parentId": "37",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "280",
+                "name": "入库申请-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "40",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "307",
+                "name": "入库申请-新建命题申请",
+                "url": "AddTask",
+                "type": "BUTTON",
+                "parentId": "40",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "281",
+                "name": "入库申请-预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "40",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "282",
+                "name": "入库申请-撤销申请",
+                "url": "End",
+                "type": "LINK",
+                "parentId": "40",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "283",
+                "name": "入库申请-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "40",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "285",
+                "name": "入库申请-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "40",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "284",
+                "name": "入库申请-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "40",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "41",
+            "name": "入库审核",
+            "url": "TaskReviewManage",
+            "type": "MENU",
+            "parentId": "37",
+            "sequence": 3,
+            "children": [],
+            "buttons": [
+              {
+                "id": "288",
+                "name": "入库审核-未审核查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "289",
+                "name": "入库审核-未审核导出审核样本",
+                "url": "Export",
+                "type": "BUTTON",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "290",
+                "name": "入库审核-未审核批量不通过",
+                "url": "BatchNotPass",
+                "type": "BUTTON",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "291",
+                "name": "入库审核-未审核批量通过",
+                "url": "BatchPass",
+                "type": "BUTTON",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 4,
+                "enable": true
+              },
+              {
+                "id": "295",
+                "name": "入库审核-已审核查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "292",
+                "name": "入库审核-未审核编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "296",
+                "name": "入库审核-已审核预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "294",
+                "name": "入库审核-未审核列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "298",
+                "name": "入库审核-已审核列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "293",
+                "name": "入库审核-未审核查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "297",
+                "name": "入库审核-已审核查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "41",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "42",
+            "name": "卷库查询",
+            "url": "TaskPaperManage",
+            "type": "MENU",
+            "parentId": "37",
+            "sequence": 4,
+            "children": [],
+            "buttons": [
+              {
+                "id": "299",
+                "name": "卷库查询-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "42",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "300",
+                "name": "卷库查询-批量下载试卷题卡",
+                "url": "BatchDownload",
+                "type": "BUTTON",
+                "parentId": "42",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "301",
+                "name": "卷库查询-预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "42",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "302",
+                "name": "卷库查询-启用&禁用",
+                "url": "Enable",
+                "type": "LINK",
+                "parentId": "42",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "303",
+                "name": "卷库查询-下载",
+                "url": "Download",
+                "type": "LINK",
+                "parentId": "42",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "306",
+                "name": "卷库查询-发布印刷任务",
+                "url": "Publish",
+                "type": "LINK",
+                "parentId": "42",
+                "schoolId": "2",
+                "sequence": 4,
+                "enable": true
+              },
+              {
+                "id": "308",
+                "name": "卷库查询-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "42",
+                "schoolId": "2",
+                "sequence": 4,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "305",
+                "name": "卷库查询-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "42",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "304",
+                "name": "卷库查询-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "42",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "id": "38",
+        "name": "印刷管理",
+        "url": "print",
+        "type": "MENU",
+        "parentId": "14",
+        "sequence": 3,
+        "children": [
+          {
+            "id": "43",
+            "name": "印刷计划管理",
+            "url": "PrintPlanManage",
+            "type": "MENU",
+            "parentId": "38",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "309",
+                "name": "印刷计划管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "43",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "310",
+                "name": "印刷计划管理-新建印刷计划",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "43",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "311",
+                "name": "印刷计划管理-预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "43",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "312",
+                "name": "印刷计划管理-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "43",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "313",
+                "name": "印刷计划管理-删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "43",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "315",
+                "name": "印刷计划管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "43",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "314",
+                "name": "印刷计划管理-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "43",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "44",
+            "name": "考务数据导入",
+            "url": "BusinessDataExport",
+            "type": "MENU",
+            "parentId": "38",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "316",
+                "name": "考务数据导入-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "44",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "317",
+                "name": "考务数据导入-考务数据模版下载",
+                "url": "TempleteDownload",
+                "type": "BUTTON",
+                "parentId": "44",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "318",
+                "name": "考务数据导入-导出查询结果",
+                "url": "Export",
+                "type": "BUTTON",
+                "parentId": "44",
+                "schoolId": "2",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "319",
+                "name": "考务数据导入-导入",
+                "url": "Import",
+                "type": "BUTTON",
+                "parentId": "44",
+                "schoolId": "2",
+                "sequence": 4,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "320",
+                "name": "考务数据导入-预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "44",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "322",
+                "name": "考务数据导入-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "44",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "321",
+                "name": "考务数据导入-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "44",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "45",
+            "name": "考务明细查询",
+            "url": "BusinessDataDetail",
+            "type": "MENU",
+            "parentId": "38",
+            "sequence": 3,
+            "children": [],
+            "buttons": [
+              {
+                "id": "323",
+                "name": "考务明细查询-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "45",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "324",
+                "name": "考务明细查询-预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "45",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "326",
+                "name": "考务明细查询-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "45",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "325",
+                "name": "考务明细查询-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "45",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "46",
+            "name": "关联试卷管理",
+            "url": "PlanLinkPaper",
+            "type": "MENU",
+            "parentId": "38",
+            "sequence": 4,
+            "children": [],
+            "buttons": [
+              {
+                "id": "327",
+                "name": "关联试卷管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "46",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "328",
+                "name": "关联试卷管理-编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "46",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "330",
+                "name": "关联试卷管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "46",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "329",
+                "name": "关联试卷管理-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "46",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "47",
+            "name": "印刷任务管理",
+            "url": "PrintTaskManage",
+            "type": "MENU",
+            "parentId": "38",
+            "sequence": 5,
+            "children": [],
+            "buttons": [
+              {
+                "id": "331",
+                "name": "印刷任务管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "47",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "336",
+                "name": "印刷任务管理-批量下载PDF",
+                "url": "BatchDownload",
+                "type": "BUTTON",
+                "parentId": "47",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "332",
+                "name": "印刷任务管理-下载",
+                "url": "Download",
+                "type": "LINK",
+                "parentId": "47",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "335",
+                "name": "印刷任务管理-撤回",
+                "url": "End",
+                "type": "LINK",
+                "parentId": "47",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "334",
+                "name": "印刷任务管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "47",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "333",
+                "name": "印刷任务管理-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "47",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "id": "112",
+        "name": "数据管理",
+        "url": "data",
+        "type": "MENU",
+        "parentId": "14",
+        "sequence": 4,
+        "children": [
+          {
+            "id": "113",
+            "name": "任务管理",
+            "url": "DataTaskManage",
+            "type": "MENU",
+            "parentId": "112",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "337",
+                "name": "任务管理-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "113",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "338",
+                "name": "任务管理-导出日志",
+                "url": "Export",
+                "type": "LINK",
+                "parentId": "113",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "339",
+                "name": "任务管理-下载文件",
+                "url": "Download",
+                "type": "LINK",
+                "parentId": "113",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "341",
+                "name": "任务管理-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "113",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "340",
+                "name": "任务管理-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "113",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "id": "170",
+    "name": "客服制卡",
+    "url": "customer",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 4,
+    "children": [
+      {
+        "id": "171",
+        "name": "客服制卡",
+        "url": "customer",
+        "type": "MENU",
+        "parentId": "170",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "172",
+            "name": "题卡审核",
+            "url": "CustomerCard",
+            "type": "MENU",
+            "parentId": "171",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "346",
+                "name": "题卡审核-待审核查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "172",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "347",
+                "name": "题卡审核-待审核批量下载试卷文件",
+                "url": "BatchDownload",
+                "type": "BUTTON",
+                "parentId": "172",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "352",
+                "name": "题卡审核-已审核查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "172",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "350",
+                "name": "题卡审核-待审核预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "172",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "351",
+                "name": "题卡审核-待审核设计题卡",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "172",
+                "schoolId": "2",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "355",
+                "name": "题卡审核-已审核预览",
+                "url": "Preview",
+                "type": "LINK",
+                "parentId": "172",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "349",
+                "name": "题卡审核-待审核列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "172",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "354",
+                "name": "题卡审核-已审核列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "172",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "348",
+                "name": "题卡审核-待审核查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "172",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "353",
+                "name": "题卡审核-已审核查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "172",
+                "schoolId": "2",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "id": "199",
+    "name": "客户端",
+    "url": "client",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 22,
+    "children": []
+  }
+]

+ 58 - 58
src/modules/base/router.js

@@ -1,58 +1,58 @@
-import UserManage from "./views/UserManage.vue";
-import SemesterManage from "./views/SemesterManage.vue";
-import ExamTypeManage from "./views/ExamTypeManage.vue";
-
-import TimeTaskManage from "./views/TimeTaskManage.vue";
-import BusinessDataManage from "./views/BusinessDataManage.vue";
-import DownloadManage from "./views/DownloadManage.vue";
-import EcsDataManage from "./views/EcsDataManage.vue";
-import DataReturnManage from "./views/DataReturnManage.vue";
-import CourseLinkManage from "./views/CourseLinkManage.vue";
-
-export default [
-  {
-    path: "/base/user-manage",
-    name: "UserManage",
-    component: UserManage
-  },
-  {
-    path: "/base/semester-manage",
-    name: "SemesterManage",
-    component: SemesterManage
-  },
-  {
-    path: "/base/exam-type-manage",
-    name: "ExamTypeManage",
-    component: ExamTypeManage
-  },
-  {
-    path: "/base/time-task-manage",
-    name: "TimeTaskManage",
-    component: TimeTaskManage
-  },
-  {
-    path: "/base/business-data-manage",
-    name: "BusinessDataManage",
-    component: BusinessDataManage
-  },
-  {
-    path: "/base/download-manage",
-    name: "DownloadManage",
-    component: DownloadManage
-  },
-  {
-    path: "/base/ecs-data-manage",
-    name: "EcsDataManage",
-    component: EcsDataManage
-  },
-  {
-    path: "/base/data-return-manage",
-    name: "DataReturnManage",
-    component: DataReturnManage
-  },
-  {
-    path: "/base/course-link-manage",
-    name: "CourseLinkManage",
-    component: CourseLinkManage
-  }
-];
+import UserManage from "./views/UserManage.vue";
+import SemesterManage from "./views/SemesterManage.vue";
+import ExamTypeManage from "./views/ExamTypeManage.vue";
+
+import TimeTaskManage from "./views/TimeTaskManage.vue";
+import BusinessDataManage from "./views/BusinessDataManage.vue";
+import DownloadManage from "./views/DownloadManage.vue";
+import EcsDataManage from "./views/EcsDataManage.vue";
+import DataReturnManage from "./views/DataReturnManage.vue";
+import CourseLinkManage from "./views/CourseLinkManage.vue";
+
+export default [
+  {
+    path: "/base/user-manage",
+    name: "UserManage",
+    component: UserManage,
+  },
+  {
+    path: "/base/semester-manage",
+    name: "SemesterManage",
+    component: SemesterManage,
+  },
+  {
+    path: "/base/exam-type-manage",
+    name: "ExamTypeManage",
+    component: ExamTypeManage,
+  },
+  {
+    path: "/base/time-task-manage",
+    name: "TimeTaskManage",
+    component: TimeTaskManage,
+  },
+  {
+    path: "/base/business-data-manage",
+    name: "BusinessDataManage",
+    component: BusinessDataManage,
+  },
+  {
+    path: "/base/download-manage",
+    name: "DownloadManage",
+    component: DownloadManage,
+  },
+  {
+    path: "/base/ecs-data-manage",
+    name: "EcsDataManage",
+    component: EcsDataManage,
+  },
+  {
+    path: "/base/data-return-manage",
+    name: "DataReturnManage",
+    component: DataReturnManage,
+  },
+  {
+    path: "/base/course-link-manage",
+    name: "CourseLinkManage",
+    component: CourseLinkManage,
+  },
+];

+ 144 - 0
src/modules/base/views/AssignmentCalculate.vue

@@ -0,0 +1,144 @@
+<template>
+  <div class="data-return-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item prop="semesterId" label="学期:">
+          <semester-select
+            ref="SemesterSelect"
+            v-model="filter.semesterId"
+            :clearable="false"
+            manual-fetch
+            select-default
+          ></semester-select>
+        </el-form-item>
+        <el-form-item prop="examTypeId" label="考试类型:">
+          <exam-type-select v-model="filter.examTypeId"></exam-type-select>
+        </el-form-item>
+        <el-form-item label="学院:">
+          <college-select v-model="filter.collegeId"></college-select>
+        </el-form-item>
+        <el-form-item label="考试:">
+          <ecs-exam-select
+            v-model="filter.examId"
+            :college-id="filter.collegeId"
+          ></ecs-exam-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="toPage(1)">查询</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="dataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="examId" label="云阅卷id"></el-table-column>
+        <el-table-column prop="xnm" label="学年"></el-table-column>
+        <el-table-column prop="xqm" label="学期"></el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="200px">
+          <template slot-scope="scope">
+            <el-button
+              :class="scope.row.enable ? 'btn-danger' : 'btn-primary'"
+              type="text"
+              @click="toEnable(scope.row)"
+              >{{ scope.row.enable ? "重算" : "试算" }}</el-button
+            >
+            <!-- 查看 -->
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          :page-sizes="[20, 50, 100]"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <!-- DataTaskDialog -->
+    <data-task-dialog
+      ref="DataTaskDialog"
+      task-type="CLOUD_MARKING_STUDENT_SCORE"
+    ></data-task-dialog>
+  </div>
+</template>
+
+<script>
+import { dataReturnList, downloadDataReturn } from "../api";
+import DataTaskDialog from "../components/DataTaskDialog.vue";
+import { downloadByApi } from "@/plugins/download";
+
+export default {
+  name: "assignment-calculate",
+  components: { DataTaskDialog },
+  data() {
+    return {
+      filter: {
+        semesterId: "",
+        examTypeId: "",
+        collegeId: "",
+        examId: "",
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      downloading: false,
+    };
+  },
+  async mounted() {
+    await this.$refs.SemesterSelect.search();
+    // this.getList();
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size,
+      };
+
+      const data = await dataReturnList(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async toDownload() {
+      if (
+        !this.filter.semesterId ||
+        !this.filter.examTypeId ||
+        !this.filter.examId
+      ) {
+        this.$message.error("学期、考试以及考试类型必选!");
+        return;
+      }
+
+      if (this.downloading) return;
+      this.downloading = true;
+
+      const res = await downloadByApi(() => {
+        return downloadDataReturn(this.filter);
+      }).catch((e) => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
+
+      if (!res) return;
+      this.$message.success("下载成功!");
+    },
+  },
+};
+</script>

+ 154 - 154
src/modules/base/views/BusinessDataManage.vue

@@ -1,154 +1,154 @@
-<template>
-  <div class="print-plan-push-manage">
-    <div class="part-box part-box-filter part-box-flex">
-      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="同步日期:">
-          <el-date-picker
-            v-model="filter.syncDate"
-            type="date"
-            value-format="timestamp"
-            placeholder="同步日期"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label-width="0px">
-          <el-button type="primary" @click="search">查询</el-button>
-        </el-form-item>
-      </el-form>
-      <div class="part-box-action">
-        <el-button
-          icon="el-icon-circle-plus-outline"
-          type="primary"
-          :loading="downloading"
-          @click="toSync"
-        >
-          人工同步数据
-        </el-button>
-      </div>
-    </div>
-
-    <div class="part-box part-box-pad">
-      <el-table ref="TableList" :data="dataList">
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="syncDate" label="同步日期" width="170">
-          <span slot-scope="scope">{{
-            scope.row.syncDate | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column prop="schoolName" label="学校"></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examTypeName" label="考试类型"></el-table-column>
-        <el-table-column
-          prop="colleges"
-          label="学院数量"
-          width="100"
-        ></el-table-column>
-        <el-table-column
-          prop="subjects"
-          label="科目门数"
-          width="100"
-        ></el-table-column>
-        <el-table-column
-          prop="students"
-          label="考试科次"
-          width="100"
-        ></el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="80">
-          <template slot-scope="scope">
-            <el-button
-              v-if="scope.row.downloadStatus"
-              class="btn-primary"
-              type="text"
-              @click="toDownload(scope.row)"
-              >下载</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="total,prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          :page-sizes="[20, 50, 100]"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { businessDataList, downloadBusinessData, manualSync } from "../api";
-import { downloadByApi } from "@/plugins/download";
-
-export default {
-  name: "business-data-manage",
-  data() {
-    return {
-      filter: {
-        syncDate: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      downloading: false,
-      dataList: []
-    };
-  },
-  mounted() {
-    this.search();
-  },
-  methods: {
-    async getList() {
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      const data = await businessDataList(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    search() {
-      this.toPage(1);
-    },
-    async toSync() {
-      if (this.downloading) return;
-      this.downloading = true;
-      await manualSync().catch(() => {});
-      this.downloading = false;
-    },
-    async toDownload(row) {
-      if (this.downloading) return;
-      this.downloading = true;
-
-      const res = await downloadByApi(() => {
-        return downloadBusinessData(row.id, true);
-      }).catch(e => {
-        this.$message.error(e || "下载失败,请重新尝试!");
-      });
-      this.downloading = false;
-
-      if (!res) return;
-      this.$message.success("下载成功!");
-
-      // this.$message.success(
-      //   "已开始下载,下载需要时间,请稍后到【下载列表】模块中查看数据"
-      // );
-    }
-  }
-};
-</script>
+<template>
+  <div class="print-plan-push-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="同步日期:">
+          <el-date-picker
+            v-model="filter.syncDate"
+            type="date"
+            value-format="timestamp"
+            placeholder="同步日期"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label-width="0px">
+          <el-button type="primary" @click="search">查询</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="part-box-action">
+        <el-button
+          icon="el-icon-circle-plus-outline"
+          type="primary"
+          :loading="downloading"
+          @click="toSync"
+        >
+          人工同步数据
+        </el-button>
+      </div>
+    </div>
+
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="dataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="syncDate" label="同步日期" width="170">
+          <span slot-scope="scope">{{
+            scope.row.syncDate | timestampFilter
+          }}</span>
+        </el-table-column>
+        <el-table-column prop="schoolName" label="学校"></el-table-column>
+        <el-table-column prop="semesterName" label="学期"></el-table-column>
+        <el-table-column prop="examTypeName" label="考试类型"></el-table-column>
+        <el-table-column
+          prop="colleges"
+          label="学院数量"
+          width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="subjects"
+          label="科目门数"
+          width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="students"
+          label="考试科次"
+          width="100"
+        ></el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="80">
+          <template slot-scope="scope">
+            <el-button
+              v-if="scope.row.downloadStatus"
+              class="btn-primary"
+              type="text"
+              @click="toDownload(scope.row)"
+              >下载</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          :page-sizes="[20, 50, 100]"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { businessDataList, downloadBusinessData, manualSync } from "../api";
+import { downloadByApi } from "@/plugins/download";
+
+export default {
+  name: "business-data-manage",
+  data() {
+    return {
+      filter: {
+        syncDate: "",
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      downloading: false,
+      dataList: [],
+    };
+  },
+  mounted() {
+    this.search();
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size,
+      };
+      const data = await businessDataList(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    search() {
+      this.toPage(1);
+    },
+    async toSync() {
+      if (this.downloading) return;
+      this.downloading = true;
+      await manualSync().catch(() => {});
+      this.downloading = false;
+    },
+    async toDownload(row) {
+      if (this.downloading) return;
+      this.downloading = true;
+
+      const res = await downloadByApi(() => {
+        return downloadBusinessData(row.id, true);
+      }).catch((e) => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
+
+      if (!res) return;
+      this.$message.success("下载成功!");
+
+      // this.$message.success(
+      //   "已开始下载,下载需要时间,请稍后到【下载列表】模块中查看数据"
+      // );
+    },
+  },
+};
+</script>

+ 8 - 8
src/modules/base/views/CourseLinkManage.vue

@@ -10,7 +10,7 @@
         </el-form-item>
         <el-form-item label="云阅卷课程代码:">
           <el-input
-            style="width: 200px;"
+            style="width: 200px"
             v-model.trim="filter.cloudMarkingCourseCode"
             placeholder="云阅卷课程代码模糊查询"
             clearable
@@ -18,7 +18,7 @@
         </el-form-item>
         <el-form-item label="考务数据课程代码:">
           <el-input
-            style="width: 210px;"
+            style="width: 210px"
             v-model.trim="filter.syncCourseCode"
             placeholder="考务数据课程代码模糊查询"
             clearable
@@ -35,7 +35,7 @@
           :upload-url="uploadUrl"
           :upload-data="{
             semesterId: filter.semesterId,
-            examTypeId: filter.examTypeId
+            examTypeId: filter.examTypeId,
           }"
           :format="['xls', 'xlsx']"
           accept=".xls,.xlsx"
@@ -94,13 +94,13 @@ export default {
         semesterId: "",
         examTypeId: "",
         syncCourseCode: "",
-        cloudMarkingCourseCode: ""
+        cloudMarkingCourseCode: "",
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
       dataList: [],
-      uploadUrl: "/api/exam_course_mapping/import"
+      uploadUrl: "/api/exam_course_mapping/import",
     };
   },
   mounted() {
@@ -111,7 +111,7 @@ export default {
       const datas = {
         ...this.filter,
         pageNumber: this.current,
-        pageSize: this.size
+        pageSize: this.size,
       };
 
       const data = await courseLinkList(datas);
@@ -127,7 +127,7 @@ export default {
     },
     uploadSuccess() {
       this.search();
-    }
-  }
+    },
+  },
 };
 </script>

+ 6 - 6
src/modules/base/views/DataReturnManage.vue

@@ -86,13 +86,13 @@ export default {
         semesterId: "",
         examTypeId: "",
         collegeId: "",
-        examId: ""
+        examId: "",
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
       dataList: [],
-      downloading: false
+      downloading: false,
     };
   },
   async mounted() {
@@ -104,7 +104,7 @@ export default {
       const datas = {
         ...this.filter,
         pageNumber: this.current,
-        pageSize: this.size
+        pageSize: this.size,
       };
 
       const data = await dataReturnList(datas);
@@ -130,14 +130,14 @@ export default {
 
       const res = await downloadByApi(() => {
         return downloadDataReturn(this.filter);
-      }).catch(e => {
+      }).catch((e) => {
         this.$message.error(e || "下载失败,请重新尝试!");
       });
       this.downloading = false;
 
       if (!res) return;
       this.$message.success("下载成功!");
-    }
-  }
+    },
+  },
 };
 </script>

+ 205 - 205
src/modules/base/views/DownloadManage.vue

@@ -1,205 +1,205 @@
-<template>
-  <div class="student-manage">
-    <div class="part-box part-box-filter part-box-flex">
-      <el-form ref="FilterForm" label-position="left" label-width="90px" inline>
-        <el-form-item label="下载时间:">
-          <el-date-picker
-            v-model="filter.operateTime"
-            type="date"
-            placeholder="下载时间"
-            value-format="timestamp"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="是否使用:">
-          <el-select v-model="filter.used" placeholder="是否使用" clearable>
-            <el-option
-              v-for="(val, key) in BOOLEAN_TYPE"
-              :key="key"
-              :value="key * 1"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="下载用途:">
-          <el-select v-model="filter.useScene" placeholder="下载用途" clearable>
-            <el-option
-              v-for="item in useScenes"
-              :key="item.name"
-              :value="item.name"
-              :label="item.desc"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="toPage(1)">查询</el-button>
-        </el-form-item>
-      </el-form>
-      <div class="part-box-action">
-        <el-button type="primary" icon="el-icon-delete" @click="toSign"
-          >标记用途</el-button
-        >
-      </div>
-    </div>
-    <div class="part-box part-box-pad">
-      <el-table
-        ref="TableList"
-        :data="dataList"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" align="center">
-        </el-table-column>
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="operateTime" label="下载时间" width="170">
-          <span slot-scope="scope">{{
-            scope.row.operateTime | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column
-          prop="userName"
-          label="下载人员"
-          width="120"
-        ></el-table-column>
-        <el-table-column prop="fileName" label="文件" min-width="150">
-          <template slot-scope="scope">
-            <div
-              class="cont-link"
-              title="点击下载文件"
-              @click="toDownload(scope.row)"
-            >
-              {{ scope.row.fileName }}
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column prop="schoolName" label="学校"></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examTypeName" label="考试类型"></el-table-column>
-        <el-table-column
-          prop="colleges"
-          label="学院数量"
-          width="100"
-        ></el-table-column>
-        <el-table-column
-          prop="subjects"
-          label="科目门数"
-          width="100"
-        ></el-table-column>
-        <el-table-column
-          prop="students"
-          label="考试科次"
-          width="100"
-        ></el-table-column>
-        <el-table-column prop="used" label="是否使用" width="80">
-          <span slot-scope="scope">{{ scope.row.used | booleanFilter }}</span>
-        </el-table-column>
-        <el-table-column prop="useSceneStr" label="下载用途"></el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="total,prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          :page-sizes="[20, 50, 100]"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
-    </div>
-
-    <!-- SignDownloadData -->
-    <sign-download-data
-      ref="SignDownloadData"
-      :ids="multipleSelection"
-      :useScenes="useScenes"
-      @modified="getList"
-    ></sign-download-data>
-  </div>
-</template>
-
-<script>
-import { USE_TYPE, BOOLEAN_TYPE } from "../../../constants/enumerate";
-import { downloadList, useSceneList, downloadBusinessData } from "../api";
-import SignDownloadData from "../components/SignDownloadData.vue";
-import { downloadByApi } from "@/plugins/download";
-
-export default {
-  name: "student-manage",
-  components: { SignDownloadData },
-  data() {
-    return {
-      filter: {
-        operateTime: "",
-        used: null,
-        useScene: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      dataList: [],
-      useScenes: [],
-      curRow: {},
-      BOOLEAN_TYPE,
-      USE_TYPE,
-      multipleSelection: [],
-      downloading: false
-    };
-  },
-  mounted() {
-    this.getList();
-    this.getUseSences();
-  },
-  methods: {
-    async getUseSences() {
-      const res = await useSceneList();
-      this.useScenes = res || [];
-    },
-    async getList() {
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      const data = await downloadList(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-      this.queriedFilter = { ...this.filter };
-    },
-    toPage(page) {
-      this.multipleSelection = [];
-      this.current = page;
-      this.getList();
-    },
-    handleSelectionChange(val) {
-      this.multipleSelection = val.map(item => item.id);
-    },
-    toSign() {
-      if (!this.multipleSelection.length) {
-        this.$message.error("请先选择数据!");
-        return;
-      }
-      this.$refs.SignDownloadData.open();
-    },
-    async toDownload(row) {
-      if (this.downloading) return;
-      this.downloading = true;
-
-      const res = await downloadByApi(() => {
-        return downloadBusinessData(row.examSyncTotalId, false);
-      }).catch(e => {
-        this.$message.error(e || "下载失败,请重新尝试!");
-      });
-      this.downloading = false;
-
-      if (!res) return;
-      this.$message.success("下载成功!");
-    }
-  }
-};
-</script>
+<template>
+  <div class="student-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="90px" inline>
+        <el-form-item label="下载时间:">
+          <el-date-picker
+            v-model="filter.operateTime"
+            type="date"
+            placeholder="下载时间"
+            value-format="timestamp"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="是否使用:">
+          <el-select v-model="filter.used" placeholder="是否使用" clearable>
+            <el-option
+              v-for="(val, key) in BOOLEAN_TYPE"
+              :key="key"
+              :value="key * 1"
+              :label="val"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="下载用途:">
+          <el-select v-model="filter.useScene" placeholder="下载用途" clearable>
+            <el-option
+              v-for="item in useScenes"
+              :key="item.name"
+              :value="item.name"
+              :label="item.desc"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="toPage(1)">查询</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="part-box-action">
+        <el-button type="primary" icon="el-icon-delete" @click="toSign"
+          >标记用途</el-button
+        >
+      </div>
+    </div>
+    <div class="part-box part-box-pad">
+      <el-table
+        ref="TableList"
+        :data="dataList"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column type="selection" width="55" align="center">
+        </el-table-column>
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="operateTime" label="下载时间" width="170">
+          <span slot-scope="scope">{{
+            scope.row.operateTime | timestampFilter
+          }}</span>
+        </el-table-column>
+        <el-table-column
+          prop="userName"
+          label="下载人员"
+          width="120"
+        ></el-table-column>
+        <el-table-column prop="fileName" label="文件" min-width="150">
+          <template slot-scope="scope">
+            <div
+              class="cont-link"
+              title="点击下载文件"
+              @click="toDownload(scope.row)"
+            >
+              {{ scope.row.fileName }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="schoolName" label="学校"></el-table-column>
+        <el-table-column prop="semesterName" label="学期"></el-table-column>
+        <el-table-column prop="examTypeName" label="考试类型"></el-table-column>
+        <el-table-column
+          prop="colleges"
+          label="学院数量"
+          width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="subjects"
+          label="科目门数"
+          width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="students"
+          label="考试科次"
+          width="100"
+        ></el-table-column>
+        <el-table-column prop="used" label="是否使用" width="80">
+          <span slot-scope="scope">{{ scope.row.used | booleanFilter }}</span>
+        </el-table-column>
+        <el-table-column prop="useSceneStr" label="下载用途"></el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          :page-sizes="[20, 50, 100]"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <!-- SignDownloadData -->
+    <sign-download-data
+      ref="SignDownloadData"
+      :ids="multipleSelection"
+      :useScenes="useScenes"
+      @modified="getList"
+    ></sign-download-data>
+  </div>
+</template>
+
+<script>
+import { USE_TYPE, BOOLEAN_TYPE } from "../../../constants/enumerate";
+import { downloadList, useSceneList, downloadBusinessData } from "../api";
+import SignDownloadData from "../components/SignDownloadData.vue";
+import { downloadByApi } from "@/plugins/download";
+
+export default {
+  name: "student-manage",
+  components: { SignDownloadData },
+  data() {
+    return {
+      filter: {
+        operateTime: "",
+        used: null,
+        useScene: "",
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      useScenes: [],
+      curRow: {},
+      BOOLEAN_TYPE,
+      USE_TYPE,
+      multipleSelection: [],
+      downloading: false,
+    };
+  },
+  mounted() {
+    this.getList();
+    this.getUseSences();
+  },
+  methods: {
+    async getUseSences() {
+      const res = await useSceneList();
+      this.useScenes = res || [];
+    },
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size,
+      };
+      const data = await downloadList(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+      this.queriedFilter = { ...this.filter };
+    },
+    toPage(page) {
+      this.multipleSelection = [];
+      this.current = page;
+      this.getList();
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val.map((item) => item.id);
+    },
+    toSign() {
+      if (!this.multipleSelection.length) {
+        this.$message.error("请先选择数据!");
+        return;
+      }
+      this.$refs.SignDownloadData.open();
+    },
+    async toDownload(row) {
+      if (this.downloading) return;
+      this.downloading = true;
+
+      const res = await downloadByApi(() => {
+        return downloadBusinessData(row.examSyncTotalId, false);
+      }).catch((e) => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
+
+      if (!res) return;
+      this.$message.success("下载成功!");
+    },
+  },
+};
+</script>

+ 7 - 7
src/modules/base/views/EcsDataManage.vue

@@ -91,12 +91,12 @@ export default {
         semesterId: "",
         examTypeId: "",
         collegeId: "",
-        examId: ""
+        examId: "",
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
-      dataList: []
+      dataList: [],
     };
   },
   async mounted() {
@@ -108,7 +108,7 @@ export default {
       const datas = {
         ...this.filter,
         pageNumber: this.current,
-        pageSize: this.size
+        pageSize: this.size,
       };
 
       const data = await ecsDataList(datas);
@@ -125,19 +125,19 @@ export default {
         return;
       }
       const result = await this.$confirm(`确定要同步吗?`, "提示", {
-        type: "warning"
+        type: "warning",
       }).catch(() => {});
       if (result !== "confirm") return;
 
       await syncEcsData({
         type: "CLOUD_MARKING_STUDENT_SCORE",
-        ...this.filter
+        ...this.filter,
       });
       this.$message.success("任务提交成功!");
     },
     toSyncResult() {
       this.$refs.DataTaskDialog.open();
-    }
-  }
+    },
+  },
 };
 </script>

+ 122 - 122
src/modules/base/views/ExamTypeManage.vue

@@ -1,122 +1,122 @@
-<template>
-  <div class="exam-type-manage">
-    <div class="part-box part-box-filter part-box-flex">
-      <div>
-        <el-button type="primary" @click="toPage(1)">查询</el-button>
-      </div>
-      <div class="part-box-action">
-        <el-button
-          type="primary"
-          icon="el-icon-circle-plus-outline"
-          @click="toAdd"
-          >新增类型</el-button
-        >
-      </div>
-    </div>
-    <div class="part-box part-box-pad">
-      <el-table ref="TableList" :data="dataList">
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="name" label="类型名称"></el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="160px">
-          <template slot-scope="scope">
-            <el-button
-              class="btn-primary"
-              type="text"
-              @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-            <el-button
-              class="btn-danger"
-              type="text"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="total,prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
-    </div>
-
-    <modify-exam-type
-      :instance="curRow"
-      @modified="getList"
-      ref="ModifyExamType"
-    ></modify-exam-type>
-  </div>
-</template>
-
-<script>
-import { examTypeListQuery, deleteExamType } from "../api";
-import ModifyExamType from "../components/ModifyExamType.vue";
-
-export default {
-  name: "exam-type-manage",
-  components: { ModifyExamType },
-  data() {
-    return {
-      filter: {},
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      dataList: [],
-      curRow: {}
-    };
-  },
-  mounted() {
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      const data = await examTypeListQuery(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toAdd() {
-      this.curRow = {};
-      this.$refs.ModifyExamType.open();
-    },
-    toEdit(row) {
-      this.curRow = row;
-      this.$refs.ModifyExamType.open();
-    },
-    async toDelete(row) {
-      const result = await this.$confirm(
-        `确定要删除类型【${row.name}】吗?`,
-        "提示",
-        {
-          type: "warning"
-        }
-      ).catch(() => {});
-      if (result !== "confirm") return;
-
-      await deleteExamType([row.id]);
-      this.$message.success("删除成功!");
-      this.deletePageLastItem();
-    }
-  }
-};
-</script>
+<template>
+  <div class="exam-type-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <div>
+        <el-button type="primary" @click="toPage(1)">查询</el-button>
+      </div>
+      <div class="part-box-action">
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
+          >新增类型</el-button
+        >
+      </div>
+    </div>
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="dataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="name" label="类型名称"></el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="160px">
+          <template slot-scope="scope">
+            <el-button
+              class="btn-primary"
+              type="text"
+              @click="toEdit(scope.row)"
+              >编辑</el-button
+            >
+            <el-button
+              class="btn-danger"
+              type="text"
+              @click="toDelete(scope.row)"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <modify-exam-type
+      :instance="curRow"
+      @modified="getList"
+      ref="ModifyExamType"
+    ></modify-exam-type>
+  </div>
+</template>
+
+<script>
+import { examTypeListQuery, deleteExamType } from "../api";
+import ModifyExamType from "../components/ModifyExamType.vue";
+
+export default {
+  name: "exam-type-manage",
+  components: { ModifyExamType },
+  data() {
+    return {
+      filter: {},
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      curRow: {},
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size,
+      };
+      const data = await examTypeListQuery(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    toAdd() {
+      this.curRow = {};
+      this.$refs.ModifyExamType.open();
+    },
+    toEdit(row) {
+      this.curRow = row;
+      this.$refs.ModifyExamType.open();
+    },
+    async toDelete(row) {
+      const result = await this.$confirm(
+        `确定要删除类型【${row.name}】吗?`,
+        "提示",
+        {
+          type: "warning",
+        }
+      ).catch(() => {});
+      if (result !== "confirm") return;
+
+      await deleteExamType([row.id]);
+      this.$message.success("删除成功!");
+      this.deletePageLastItem();
+    },
+  },
+};
+</script>

+ 122 - 122
src/modules/base/views/SemesterManage.vue

@@ -1,122 +1,122 @@
-<template>
-  <div class="semester-manage">
-    <div class="part-box part-box-filter part-box-flex">
-      <div>
-        <el-button type="primary" @click="toPage(1)">查询</el-button>
-      </div>
-      <div class="part-box-action">
-        <el-button
-          type="primary"
-          icon="el-icon-circle-plus-outline"
-          @click="toAdd"
-          >新增学期</el-button
-        >
-      </div>
-    </div>
-    <div class="part-box part-box-pad">
-      <el-table ref="TableList" :data="dataList">
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="name" label="学期"></el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="120">
-          <template slot-scope="scope">
-            <el-button
-              class="btn-primary"
-              type="text"
-              @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-            <el-button
-              class="btn-danger"
-              type="text"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="total,prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
-    </div>
-
-    <modify-semester
-      :instance="curRow"
-      @modified="getList"
-      ref="ModifySemester"
-    ></modify-semester>
-  </div>
-</template>
-
-<script>
-import { semesterListQuery, deleteSemester } from "../api";
-import ModifySemester from "../components/ModifySemester";
-
-export default {
-  name: "semester-manage",
-  components: { ModifySemester },
-  data() {
-    return {
-      filter: {},
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      dataList: [],
-      curRow: {}
-    };
-  },
-  mounted() {
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      const data = await semesterListQuery(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toAdd() {
-      this.curRow = {};
-      this.$refs.ModifySemester.open();
-    },
-    toEdit(row) {
-      this.curRow = row;
-      this.$refs.ModifySemester.open();
-    },
-    async toDelete(row) {
-      const result = await this.$confirm(
-        `确定要删除学期【${row.name}】吗?`,
-        "提示",
-        {
-          type: "warning"
-        }
-      ).catch(() => {});
-      if (result !== "confirm") return;
-
-      await deleteSemester(row.id);
-      this.$message.success("删除成功!");
-      this.deletePageLastItem();
-    }
-  }
-};
-</script>
+<template>
+  <div class="semester-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <div>
+        <el-button type="primary" @click="toPage(1)">查询</el-button>
+      </div>
+      <div class="part-box-action">
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
+          >新增学期</el-button
+        >
+      </div>
+    </div>
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="dataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="name" label="学期"></el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="120">
+          <template slot-scope="scope">
+            <el-button
+              class="btn-primary"
+              type="text"
+              @click="toEdit(scope.row)"
+              >编辑</el-button
+            >
+            <el-button
+              class="btn-danger"
+              type="text"
+              @click="toDelete(scope.row)"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <modify-semester
+      :instance="curRow"
+      @modified="getList"
+      ref="ModifySemester"
+    ></modify-semester>
+  </div>
+</template>
+
+<script>
+import { semesterListQuery, deleteSemester } from "../api";
+import ModifySemester from "../components/ModifySemester";
+
+export default {
+  name: "semester-manage",
+  components: { ModifySemester },
+  data() {
+    return {
+      filter: {},
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      curRow: {},
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size,
+      };
+      const data = await semesterListQuery(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    toAdd() {
+      this.curRow = {};
+      this.$refs.ModifySemester.open();
+    },
+    toEdit(row) {
+      this.curRow = row;
+      this.$refs.ModifySemester.open();
+    },
+    async toDelete(row) {
+      const result = await this.$confirm(
+        `确定要删除学期【${row.name}】吗?`,
+        "提示",
+        {
+          type: "warning",
+        }
+      ).catch(() => {});
+      if (result !== "confirm") return;
+
+      await deleteSemester(row.id);
+      this.$message.success("删除成功!");
+      this.deletePageLastItem();
+    },
+  },
+};
+</script>

+ 162 - 162
src/modules/base/views/TimeTaskManage.vue

@@ -1,162 +1,162 @@
-<template>
-  <div class="time-task-manage">
-    <div class="part-box part-box-filter part-box-flex">
-      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item prop="semesterId" label="学期:">
-          <semester-select v-model="filter.semesterId"></semester-select>
-        </el-form-item>
-        <el-form-item prop="examTypeId" label="考试:">
-          <exam-type-select
-            v-model="filter.examTypeId"
-            :semester-id="filter.semesterId"
-          ></exam-type-select>
-        </el-form-item>
-        <el-form-item label="定时任务时间:">
-          <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="定时任务开始时间"
-            end-placeholder="定时任务结束时间"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="toPage(1)">查询</el-button>
-        </el-form-item>
-      </el-form>
-      <div class="part-box-action">
-        <el-button
-          type="primary"
-          icon="el-icon-circle-plus-outline"
-          @click="toAdd"
-          >新增</el-button
-        >
-      </div>
-    </div>
-    <div class="part-box part-box-pad">
-      <el-table ref="TableList" :data="dataList">
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="schoolName" label="学校"></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examTypeName" label="考试类型"></el-table-column>
-        <el-table-column prop="startTime" label="定时任务开始时间" width="180">
-          <span slot-scope="scope">{{
-            scope.row.startTime | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column prop="endTime" label="定时任务截止时间" width="180">
-          <span slot-scope="scope">{{
-            scope.row.endTime | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column prop="userName" label="操作人"> </el-table-column>
-        <el-table-column prop="createTime" label="操作时间">
-          <span slot-scope="scope">{{
-            scope.row.createTime | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="100">
-          <template slot-scope="scope">
-            <el-button
-              class="btn-primary"
-              type="text"
-              @click="toEdit(scope.row)"
-              >修改</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="total,prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          :page-sizes="[20, 50, 100]"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
-    </div>
-
-    <modify-task
-      ref="ModifyTask"
-      :instance="curRow"
-      @modified="getList"
-    ></modify-task>
-  </div>
-</template>
-
-<script>
-import pickerOptions from "@/constants/datePickerOptions";
-import { timeTaskList } from "../api";
-import ModifyTask from "../components/ModifyTask";
-
-export default {
-  name: "time-task-manage",
-  components: {
-    ModifyTask
-  },
-  data() {
-    return {
-      filter: {
-        semesterId: "",
-        examTypeId: "",
-        startTime: "",
-        endTime: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      dataList: [],
-      curRow: {},
-      // date-picker
-      createTime: [],
-      pickerOptions
-    };
-  },
-  mounted() {
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      if (this.createTime) {
-        datas.startTime = this.createTime[0];
-        datas.endTime = this.createTime[1];
-      }
-
-      const data = await timeTaskList(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toAdd() {
-      this.curRow = {};
-      this.$refs.ModifyTask.open();
-    },
-    toEdit(row) {
-      this.curRow = { ...row };
-      this.$refs.ModifyTask.open();
-    }
-  }
-};
-</script>
+<template>
+  <div class="time-task-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item prop="semesterId" label="学期:">
+          <semester-select v-model="filter.semesterId"></semester-select>
+        </el-form-item>
+        <el-form-item prop="examTypeId" label="考试:">
+          <exam-type-select
+            v-model="filter.examTypeId"
+            :semester-id="filter.semesterId"
+          ></exam-type-select>
+        </el-form-item>
+        <el-form-item label="定时任务时间:">
+          <el-date-picker
+            v-model="createTime"
+            type="datetimerange"
+            :picker-options="pickerOptions"
+            range-separator="至"
+            start-placeholder="定时任务开始时间"
+            end-placeholder="定时任务结束时间"
+            value-format="timestamp"
+            align="right"
+            unlink-panels
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="toPage(1)">查询</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="part-box-action">
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
+          >新增</el-button
+        >
+      </div>
+    </div>
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="dataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="schoolName" label="学校"></el-table-column>
+        <el-table-column prop="semesterName" label="学期"></el-table-column>
+        <el-table-column prop="examTypeName" label="考试类型"></el-table-column>
+        <el-table-column prop="startTime" label="定时任务开始时间" width="180">
+          <span slot-scope="scope">{{
+            scope.row.startTime | timestampFilter
+          }}</span>
+        </el-table-column>
+        <el-table-column prop="endTime" label="定时任务截止时间" width="180">
+          <span slot-scope="scope">{{
+            scope.row.endTime | timestampFilter
+          }}</span>
+        </el-table-column>
+        <el-table-column prop="userName" label="操作人"> </el-table-column>
+        <el-table-column prop="createTime" label="操作时间">
+          <span slot-scope="scope">{{
+            scope.row.createTime | timestampFilter
+          }}</span>
+        </el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="100">
+          <template slot-scope="scope">
+            <el-button
+              class="btn-primary"
+              type="text"
+              @click="toEdit(scope.row)"
+              >修改</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          :page-sizes="[20, 50, 100]"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <modify-task
+      ref="ModifyTask"
+      :instance="curRow"
+      @modified="getList"
+    ></modify-task>
+  </div>
+</template>
+
+<script>
+import pickerOptions from "@/constants/datePickerOptions";
+import { timeTaskList } from "../api";
+import ModifyTask from "../components/ModifyTask";
+
+export default {
+  name: "time-task-manage",
+  components: {
+    ModifyTask,
+  },
+  data() {
+    return {
+      filter: {
+        semesterId: "",
+        examTypeId: "",
+        startTime: "",
+        endTime: "",
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      curRow: {},
+      // date-picker
+      createTime: [],
+      pickerOptions,
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size,
+      };
+      if (this.createTime) {
+        datas.startTime = this.createTime[0];
+        datas.endTime = this.createTime[1];
+      }
+
+      const data = await timeTaskList(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    toAdd() {
+      this.curRow = {};
+      this.$refs.ModifyTask.open();
+    },
+    toEdit(row) {
+      this.curRow = { ...row };
+      this.$refs.ModifyTask.open();
+    },
+  },
+};
+</script>

+ 228 - 228
src/modules/base/views/UserManage.vue

@@ -1,228 +1,228 @@
-<template>
-  <div class="user-manage">
-    <div class="part-box part-box-filter part-box-flex">
-      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="手机号:" label-width="75px">
-          <el-input
-            style="width: 142px;"
-            v-model.trim="filter.loginName"
-            placeholder="手机号"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="姓名:" label-width="75px">
-          <el-input
-            style="width: 142px;"
-            v-model.trim="filter.realName"
-            placeholder="姓名"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="启用/禁用:" label-width="90px">
-          <el-select
-            v-model="filter.enable"
-            style="width: 120px;"
-            placeholder="启用/禁用"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in ABLE_TYPE"
-              :key="key"
-              :value="key * 1"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label-width="0px">
-          <el-button type="primary" @click="toPage(1)">查询</el-button>
-        </el-form-item>
-      </el-form>
-      <div class="part-box-action">
-        <el-button
-          type="primary"
-          icon="el-icon-circle-plus-outline"
-          @click="toAdd"
-          >新增用户</el-button
-        >
-      </div>
-    </div>
-
-    <div class="part-box part-box-pad">
-      <el-table ref="TableList" :data="users">
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="mobileNumber" label="手机号"></el-table-column>
-        <el-table-column prop="realName" label="姓名"></el-table-column>
-        <el-table-column prop="enable" label="状态" width="100">
-          <template slot-scope="scope">
-            {{ scope.row.enable | enableFilter }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="updateTime" label="更新时间" width="180">
-          <template slot-scope="scope">
-            {{ scope.row.updateTime | timestampFilter }}
-          </template>
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="200px">
-          <template slot-scope="scope">
-            <el-button
-              :class="scope.row.enable ? 'btn-danger' : 'btn-primary'"
-              type="text"
-              @click="toEnable(scope.row)"
-              >{{ scope.row.enable ? "禁用" : "启用" }}</el-button
-            >
-            <el-button
-              class="btn-primary"
-              type="text"
-              @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-            <el-button
-              class="btn-danger"
-              type="text"
-              @click="toResetPwd(scope.row)"
-              >重置密码</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="total,prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          :page-sizes="[20, 50, 100]"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
-    </div>
-
-    <!-- ModifyUser -->
-    <modify-user
-      ref="ModifyUser"
-      :instance="curUser"
-      :roles="roles"
-      @modified="getList"
-    ></modify-user>
-  </div>
-</template>
-
-<script>
-import ModifyUser from "../components/ModifyUser";
-import { ABLE_TYPE } from "@/constants/enumerate";
-import { userListPage, ableUser, resetPwd, userRoleListPage } from "../api";
-// import { logout } from "@/modules/login/api";
-
-export default {
-  name: "user-manage",
-  components: { ModifyUser },
-  data() {
-    return {
-      filter: {
-        loginName: "",
-        realName: "",
-        enable: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      visible: false,
-      ABLE_TYPE,
-      roles: [],
-      users: [],
-      curUser: {},
-      loading: false
-    };
-  },
-  mounted() {
-    this.getRoleList();
-    this.getList();
-  },
-  methods: {
-    async getRoleList() {
-      const data = await userRoleListPage();
-      this.roles = data || [];
-      // this.roles = this.roles.filter(item => item.type !== "ADMIN");
-    },
-    async getList() {
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      if (datas.enable !== null && datas.enable !== "")
-        datas.enable = !!datas.enable;
-      const data = await userListPage(datas);
-      this.users = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toEnable(row) {
-      // 自己不可以启用/禁用自己
-      const userId = this.$ls.get("user", { id: "" }).id;
-      if (row.id === userId) {
-        this.$message.error("不可以启用/禁用自己!");
-        return;
-      }
-
-      const action = row.enable ? "禁用" : "启用";
-      this.$confirm(`确定要${action}用户【${row.realName}】吗?`, "提示", {
-        type: "warning"
-      })
-        .then(async () => {
-          const enable = !row.enable;
-          await ableUser({
-            id: row.id,
-            enable
-          });
-          row.enable = enable;
-          this.$message.success("操作成功!");
-        })
-        .catch(() => {});
-    },
-    toEdit(row) {
-      this.curUser = row;
-      this.$refs.ModifyUser.open();
-    },
-    toAdd() {
-      this.curUser = {};
-      this.$refs.ModifyUser.open();
-    },
-    async toResetPwd(row) {
-      const result = await this.$confirm(
-        `确定要重置用户【${row.realName}】密码吗?`,
-        "提示",
-        {
-          type: "warning"
-        }
-      );
-      if (result !== "confirm") return;
-
-      await resetPwd(row.id);
-      this.$message.success("密码重置成功!");
-
-      // 修改自己时,会强制重新登录
-      // const userId = this.$ls.get("user", { id: "" }).id;
-      // if (row.id !== userId) return;
-      // this.toLogout();
-    }
-    // async toLogout() {
-    //   await logout();
-    //   this.$ls.clear();
-    //   this.$router.push({ name: "Login" });
-    //   this.$message.info("您的密码已经变更,请重新登录系统!");
-    // },
-  }
-};
-</script>
+<template>
+  <div class="user-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="手机号:" label-width="75px">
+          <el-input
+            style="width: 142px"
+            v-model.trim="filter.loginName"
+            placeholder="手机号"
+            clearable
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="姓名:" label-width="75px">
+          <el-input
+            style="width: 142px"
+            v-model.trim="filter.realName"
+            placeholder="姓名"
+            clearable
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="启用/禁用:" label-width="90px">
+          <el-select
+            v-model="filter.enable"
+            style="width: 120px"
+            placeholder="启用/禁用"
+            clearable
+          >
+            <el-option
+              v-for="(val, key) in ABLE_TYPE"
+              :key="key"
+              :value="key * 1"
+              :label="val"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label-width="0px">
+          <el-button type="primary" @click="toPage(1)">查询</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="part-box-action">
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
+          >新增用户</el-button
+        >
+      </div>
+    </div>
+
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="users">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="mobileNumber" label="手机号"></el-table-column>
+        <el-table-column prop="realName" label="姓名"></el-table-column>
+        <el-table-column prop="enable" label="状态" width="100">
+          <template slot-scope="scope">
+            {{ scope.row.enable | enableFilter }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="updateTime" label="更新时间" width="180">
+          <template slot-scope="scope">
+            {{ scope.row.updateTime | timestampFilter }}
+          </template>
+        </el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="200px">
+          <template slot-scope="scope">
+            <el-button
+              :class="scope.row.enable ? 'btn-danger' : 'btn-primary'"
+              type="text"
+              @click="toEnable(scope.row)"
+              >{{ scope.row.enable ? "禁用" : "启用" }}</el-button
+            >
+            <el-button
+              class="btn-primary"
+              type="text"
+              @click="toEdit(scope.row)"
+              >编辑</el-button
+            >
+            <el-button
+              class="btn-danger"
+              type="text"
+              @click="toResetPwd(scope.row)"
+              >重置密码</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          :page-sizes="[20, 50, 100]"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <!-- ModifyUser -->
+    <modify-user
+      ref="ModifyUser"
+      :instance="curUser"
+      :roles="roles"
+      @modified="getList"
+    ></modify-user>
+  </div>
+</template>
+
+<script>
+import ModifyUser from "../components/ModifyUser";
+import { ABLE_TYPE } from "@/constants/enumerate";
+import { userListPage, ableUser, resetPwd, userRoleListPage } from "../api";
+// import { logout } from "@/modules/login/api";
+
+export default {
+  name: "user-manage",
+  components: { ModifyUser },
+  data() {
+    return {
+      filter: {
+        loginName: "",
+        realName: "",
+        enable: "",
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      visible: false,
+      ABLE_TYPE,
+      roles: [],
+      users: [],
+      curUser: {},
+      loading: false,
+    };
+  },
+  mounted() {
+    this.getRoleList();
+    this.getList();
+  },
+  methods: {
+    async getRoleList() {
+      const data = await userRoleListPage();
+      this.roles = data || [];
+      // this.roles = this.roles.filter(item => item.type !== "ADMIN");
+    },
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size,
+      };
+      if (datas.enable !== null && datas.enable !== "")
+        datas.enable = !!datas.enable;
+      const data = await userListPage(datas);
+      this.users = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    toEnable(row) {
+      // 自己不可以启用/禁用自己
+      const userId = this.$ls.get("user", { id: "" }).id;
+      if (row.id === userId) {
+        this.$message.error("不可以启用/禁用自己!");
+        return;
+      }
+
+      const action = row.enable ? "禁用" : "启用";
+      this.$confirm(`确定要${action}用户【${row.realName}】吗?`, "提示", {
+        type: "warning",
+      })
+        .then(async () => {
+          const enable = !row.enable;
+          await ableUser({
+            id: row.id,
+            enable,
+          });
+          row.enable = enable;
+          this.$message.success("操作成功!");
+        })
+        .catch(() => {});
+    },
+    toEdit(row) {
+      this.curUser = row;
+      this.$refs.ModifyUser.open();
+    },
+    toAdd() {
+      this.curUser = {};
+      this.$refs.ModifyUser.open();
+    },
+    async toResetPwd(row) {
+      const result = await this.$confirm(
+        `确定要重置用户【${row.realName}】密码吗?`,
+        "提示",
+        {
+          type: "warning",
+        }
+      );
+      if (result !== "confirm") return;
+
+      await resetPwd(row.id);
+      this.$message.success("密码重置成功!");
+
+      // 修改自己时,会强制重新登录
+      // const userId = this.$ls.get("user", { id: "" }).id;
+      // if (row.id !== userId) return;
+      // this.toLogout();
+    },
+    // async toLogout() {
+    //   await logout();
+    //   this.$ls.clear();
+    //   this.$router.push({ name: "Login" });
+    //   this.$message.info("您的密码已经变更,请重新登录系统!");
+    // },
+  },
+};
+</script>

+ 36 - 36
src/modules/login/api.js

@@ -1,36 +1,36 @@
-import { $post, $postParam } from "@/plugins/axios";
-
-export const login = datas => {
-  return $post("/api/common/login", datas);
-};
-export const getSmsCode = datas => {
-  return $post("/api/common/get_verify_code", datas);
-};
-export const getSmsCodeForBind = datas => {
-  return $post("/api/common/get_verify_code", datas);
-};
-export const modifyPwd = datas => {
-  return $post("/api/common/get_system_time", datas);
-};
-
-export const logout = () => {
-  return $post("/api/common/logout", {});
-};
-export const attachmentPreview = id => {
-  return $postParam("/api/common/file/preview", { id });
-};
-export const attachmentDetail = id => {
-  return $postParam("/api/common/file/get_one", { id });
-};
-export const attachmentDownload = ({ id, type }) => {
-  return $postParam("/api/common/file/download", { id, type });
-};
-export const getEnums = type => {
-  return $postParam("/api/common/get_enums", { type });
-};
-export const schoolList = () => {
-  return $postParam("/api/basic_school/list", {});
-};
-export const updatePwd = datas => {
-  return $post("/api/admin/sys/user/update_password", datas);
-};
+import { $post, $postParam } from "@/plugins/axios";
+
+export const login = (datas) => {
+  return $post("/api/common/login", datas);
+};
+export const getSmsCode = (datas) => {
+  return $post("/api/common/get_verify_code", datas);
+};
+export const getSmsCodeForBind = (datas) => {
+  return $post("/api/common/get_verify_code", datas);
+};
+export const modifyPwd = (datas) => {
+  return $post("/api/common/get_system_time", datas);
+};
+
+export const logout = () => {
+  return $post("/api/common/logout", {});
+};
+export const attachmentPreview = (id) => {
+  return $postParam("/api/common/file/preview", { id });
+};
+export const attachmentDetail = (id) => {
+  return $postParam("/api/common/file/get_one", { id });
+};
+export const attachmentDownload = ({ id, type }) => {
+  return $postParam("/api/common/file/download", { id, type });
+};
+export const getEnums = (type) => {
+  return $postParam("/api/common/get_enums", { type });
+};
+export const schoolList = () => {
+  return $postParam("/api/basic_school/list", {});
+};
+export const updatePwd = (datas) => {
+  return $post("/api/admin/sys/user/update_password", datas);
+};

+ 85 - 85
src/modules/login/fetchSmsMixins.js

@@ -1,85 +1,85 @@
-import { getSmsCode } from "./api";
-
-const wstorage = {
-  set(key, value, expire = null) {
-    window.localStorage.setItem(key, JSON.stringify({ value, expire }));
-  },
-  get(key, defaultVal = null) {
-    const lsvalue = JSON.parse(window.localStorage.getItem(key));
-    return lsvalue && (!lsvalue.expire || lsvalue.expire > new Date().getTime())
-      ? lsvalue.value
-      : defaultVal;
-  },
-  remove(key) {
-    window.localStorage.removeItem(key);
-  }
-};
-
-const codeWaitingTime = 60;
-
-export default {
-  data() {
-    return {
-      isFetchingCode: false,
-      codeContent: "获取验证码",
-      codeWaitingTime,
-      time: codeWaitingTime,
-      setT: null
-    };
-  },
-  methods: {
-    setWaitingTime() {
-      let codetime = wstorage.get(this.nameWaitTime);
-      if (codetime) {
-        let num = Math.floor((codetime.expire - new Date().getTime()) / 1000);
-        if (num > 0) {
-          this.time = num;
-          this.isFetchingCode = true;
-          this.changeContent();
-        }
-      }
-    },
-    fetchSmsCode() {
-      this.$refs.modalFormComp.validateField("phone", async valid => {
-        if (valid) return;
-        this.isFetchingCode = true;
-        const data = await getSmsCode(this.modalForm.phone).catch(() => {
-          this.isFetchingCode = false;
-        });
-        if (!data) return;
-        this.changeContent();
-      });
-    },
-    changeContent() {
-      if (!this.isFetchingCode) return;
-      this.codeContent = "倒计时" + this.time + "s";
-      const circleTime = time => {
-        this.setT = setInterval(() => {
-          if (time > 1) {
-            time--;
-            let expire = new Date().getTime() + time * 1000;
-            wstorage.set(
-              this.nameWaitTime,
-              {
-                time,
-                expire
-              },
-              expire
-            );
-            this.codeContent = "倒计时" + time + "s";
-          } else {
-            this.clearSetContent();
-          }
-        }, 1e3);
-      };
-      circleTime(this.time);
-    },
-    clearSetContent() {
-      this.time = this.codeWaitingTime;
-      wstorage.remove(this.nameWaitTime);
-      this.codeContent = "获取验证码";
-      this.isFetchingCode = false;
-      clearInterval(this.setT);
-    }
-  }
-};
+import { getSmsCode } from "./api";
+
+const wstorage = {
+  set(key, value, expire = null) {
+    window.localStorage.setItem(key, JSON.stringify({ value, expire }));
+  },
+  get(key, defaultVal = null) {
+    const lsvalue = JSON.parse(window.localStorage.getItem(key));
+    return lsvalue && (!lsvalue.expire || lsvalue.expire > new Date().getTime())
+      ? lsvalue.value
+      : defaultVal;
+  },
+  remove(key) {
+    window.localStorage.removeItem(key);
+  },
+};
+
+const codeWaitingTime = 60;
+
+export default {
+  data() {
+    return {
+      isFetchingCode: false,
+      codeContent: "获取验证码",
+      codeWaitingTime,
+      time: codeWaitingTime,
+      setT: null,
+    };
+  },
+  methods: {
+    setWaitingTime() {
+      let codetime = wstorage.get(this.nameWaitTime);
+      if (codetime) {
+        let num = Math.floor((codetime.expire - new Date().getTime()) / 1000);
+        if (num > 0) {
+          this.time = num;
+          this.isFetchingCode = true;
+          this.changeContent();
+        }
+      }
+    },
+    fetchSmsCode() {
+      this.$refs.modalFormComp.validateField("phone", async (valid) => {
+        if (valid) return;
+        this.isFetchingCode = true;
+        const data = await getSmsCode(this.modalForm.phone).catch(() => {
+          this.isFetchingCode = false;
+        });
+        if (!data) return;
+        this.changeContent();
+      });
+    },
+    changeContent() {
+      if (!this.isFetchingCode) return;
+      this.codeContent = "倒计时" + this.time + "s";
+      const circleTime = (time) => {
+        this.setT = setInterval(() => {
+          if (time > 1) {
+            time--;
+            let expire = new Date().getTime() + time * 1000;
+            wstorage.set(
+              this.nameWaitTime,
+              {
+                time,
+                expire,
+              },
+              expire
+            );
+            this.codeContent = "倒计时" + time + "s";
+          } else {
+            this.clearSetContent();
+          }
+        }, 1e3);
+      };
+      circleTime(this.time);
+    },
+    clearSetContent() {
+      this.time = this.codeWaitingTime;
+      wstorage.remove(this.nameWaitTime);
+      this.codeContent = "获取验证码";
+      this.isFetchingCode = false;
+      clearInterval(this.setT);
+    },
+  },
+};

+ 38 - 38
src/modules/login/router.js

@@ -1,38 +1,38 @@
-import LoginHome from "./views/LoginHome";
-import Login from "./views/Login";
-import ForgetPwd from "./views/ForgetPwd";
-import SelectSchool from "./views/SelectSchool";
-
-export default {
-  path: "/login-home",
-  component: LoginHome,
-  children: [
-    {
-      path: "/login",
-      name: "Login",
-      component: Login,
-      meta: {
-        title: "登录",
-        noRequire: true
-      }
-    },
-    {
-      path: "/forgetPwd",
-      name: "ForgetPwd",
-      component: ForgetPwd,
-      meta: {
-        title: "忘记密码",
-        noRequire: true
-      }
-    },
-    {
-      path: "/select-school",
-      name: "SelectSchool",
-      component: SelectSchool,
-      meta: {
-        title: "选择学校",
-        noRequire: true
-      }
-    }
-  ]
-};
+import LoginHome from "./views/LoginHome";
+import Login from "./views/Login";
+import ForgetPwd from "./views/ForgetPwd";
+import SelectSchool from "./views/SelectSchool";
+
+export default {
+  path: "/login-home",
+  component: LoginHome,
+  children: [
+    {
+      path: "/login",
+      name: "Login",
+      component: Login,
+      meta: {
+        title: "登录",
+        noRequire: true,
+      },
+    },
+    {
+      path: "/forgetPwd",
+      name: "ForgetPwd",
+      component: ForgetPwd,
+      meta: {
+        title: "忘记密码",
+        noRequire: true,
+      },
+    },
+    {
+      path: "/select-school",
+      name: "SelectSchool",
+      component: SelectSchool,
+      meta: {
+        title: "选择学校",
+        noRequire: true,
+      },
+    },
+  ],
+};

+ 145 - 145
src/modules/login/views/ForgetPwd.vue

@@ -1,145 +1,145 @@
-<template>
-  <div class="forget-pswd login-box">
-    <div class="login-body">
-      <div class="login-title">
-        <h1>忘记密码</h1>
-      </div>
-      <div class="login-form">
-        <el-form
-          ref="modalFormComp"
-          :model="modalForm"
-          :rules="forgetPswdRules"
-        >
-          <el-form-item prop="phone">
-            <el-input
-              v-model.trim="modalForm.phone"
-              prefix-icon="el-icon-phone-outline"
-              placeholder="请输入手机号"
-              clearable
-            ></el-input>
-          </el-form-item>
-          <el-form-item prop="code">
-            <div class="vlcode">
-              <div class="vlcode-right">
-                <el-button
-                  long
-                  :type="isFetchingCode ? 'default' : 'info'"
-                  @click="fetchSmsCode"
-                  :disabled="isFetchingCode"
-                  >{{ codeContent }}</el-button
-                >
-              </div>
-              <div class="vlcode-left">
-                <el-input
-                  v-model.trim="modalForm.code"
-                  prefix-icon="el-icon-message"
-                  placeholder="请输入短信验证码"
-                  clearable
-                ></el-input>
-              </div>
-            </div>
-          </el-form-item>
-          <el-form-item prop="password">
-            <el-input
-              type="password"
-              v-model.trim="modalForm.password"
-              prefix-icon="el-icon-lock"
-              placeholder="请输入新密码"
-              clearable
-            ></el-input>
-          </el-form-item>
-          <el-form-item prop="repassword">
-            <el-input
-              type="password"
-              v-model.trim="modalForm.repassword"
-              prefix-icon="el-icon-lock"
-              placeholder="请确认密码"
-              clearable
-            ></el-input>
-          </el-form-item>
-          <el-form-item></el-form-item>
-          <el-form-item>
-            <el-button
-              class="login-submit-btn"
-              size="large"
-              type="info"
-              :disabled="isSubmit"
-              round
-              @click="submit('modalFormComp')"
-              >确认</el-button
-            >
-            <div class="login-link">
-              <router-link :to="{ name: 'Login' }">返回登陆</router-link>
-            </div>
-          </el-form-item>
-        </el-form>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { phone, password, smscode } from "@/plugins/formRules";
-import { modifyPwd } from "../api";
-import fetchSmsMixins from "../fetchSmsMixins";
-
-const nameWaitTime = "forgetPwd";
-
-export default {
-  name: "forget-pswd",
-  mixins: [fetchSmsMixins],
-  data() {
-    const equalToPswd = (rule, value, callback) => {
-      if (value !== this.modalForm.password) {
-        callback(new Error("两次输入的密码不一致"));
-      } else {
-        callback();
-      }
-    };
-    return {
-      nameWaitTime,
-      modalForm: {
-        phone: "",
-        code: "",
-        password: "",
-        repassword: ""
-      },
-      forgetPswdRules: {
-        phone,
-        code: smscode,
-        password,
-        repassword: [
-          ...password,
-          {
-            validator: equalToPswd,
-            trigger: "blur"
-          }
-        ]
-      },
-      isSubmit: false
-    };
-  },
-  mounted() {
-    this.setWaitingTime();
-  },
-  methods: {
-    async submit(name) {
-      const valid = await this.$refs[name].validate();
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-      const data = await modifyPwd(this.modalForm).catch(() => {
-        this.isSubmit = false;
-      });
-
-      if (!data) return;
-      this.isSubmit = false;
-      this.$message.success("重置密码成功!");
-      this.$router.push({
-        name: "Login"
-      });
-    }
-  }
-};
-</script>
+<template>
+  <div class="forget-pswd login-box">
+    <div class="login-body">
+      <div class="login-title">
+        <h1>忘记密码</h1>
+      </div>
+      <div class="login-form">
+        <el-form
+          ref="modalFormComp"
+          :model="modalForm"
+          :rules="forgetPswdRules"
+        >
+          <el-form-item prop="phone">
+            <el-input
+              v-model.trim="modalForm.phone"
+              prefix-icon="el-icon-phone-outline"
+              placeholder="请输入手机号"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <el-form-item prop="code">
+            <div class="vlcode">
+              <div class="vlcode-right">
+                <el-button
+                  long
+                  :type="isFetchingCode ? 'default' : 'info'"
+                  @click="fetchSmsCode"
+                  :disabled="isFetchingCode"
+                  >{{ codeContent }}</el-button
+                >
+              </div>
+              <div class="vlcode-left">
+                <el-input
+                  v-model.trim="modalForm.code"
+                  prefix-icon="el-icon-message"
+                  placeholder="请输入短信验证码"
+                  clearable
+                ></el-input>
+              </div>
+            </div>
+          </el-form-item>
+          <el-form-item prop="password">
+            <el-input
+              type="password"
+              v-model.trim="modalForm.password"
+              prefix-icon="el-icon-lock"
+              placeholder="请输入新密码"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <el-form-item prop="repassword">
+            <el-input
+              type="password"
+              v-model.trim="modalForm.repassword"
+              prefix-icon="el-icon-lock"
+              placeholder="请确认密码"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <el-form-item></el-form-item>
+          <el-form-item>
+            <el-button
+              class="login-submit-btn"
+              size="large"
+              type="info"
+              :disabled="isSubmit"
+              round
+              @click="submit('modalFormComp')"
+              >确认</el-button
+            >
+            <div class="login-link">
+              <router-link :to="{ name: 'Login' }">返回登陆</router-link>
+            </div>
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { phone, password, smscode } from "@/plugins/formRules";
+import { modifyPwd } from "../api";
+import fetchSmsMixins from "../fetchSmsMixins";
+
+const nameWaitTime = "forgetPwd";
+
+export default {
+  name: "forget-pswd",
+  mixins: [fetchSmsMixins],
+  data() {
+    const equalToPswd = (rule, value, callback) => {
+      if (value !== this.modalForm.password) {
+        callback(new Error("两次输入的密码不一致"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      nameWaitTime,
+      modalForm: {
+        phone: "",
+        code: "",
+        password: "",
+        repassword: "",
+      },
+      forgetPswdRules: {
+        phone,
+        code: smscode,
+        password,
+        repassword: [
+          ...password,
+          {
+            validator: equalToPswd,
+            trigger: "blur",
+          },
+        ],
+      },
+      isSubmit: false,
+    };
+  },
+  mounted() {
+    this.setWaitingTime();
+  },
+  methods: {
+    async submit(name) {
+      const valid = await this.$refs[name].validate();
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+      const data = await modifyPwd(this.modalForm).catch(() => {
+        this.isSubmit = false;
+      });
+
+      if (!data) return;
+      this.isSubmit = false;
+      this.$message.success("重置密码成功!");
+      this.$router.push({
+        name: "Login",
+      });
+    },
+  },
+};
+</script>

+ 118 - 118
src/modules/login/views/Login.vue

@@ -1,118 +1,118 @@
-<template>
-  <div class="login login-box">
-    <div class="login-body" @keyup.enter="submit('loginForm')">
-      <div class="login-title">
-        <img v-if="schoolLogo" :src="schoolLogo" alt="学校logo" />
-        <h1 v-else>教务数据对接系统</h1>
-      </div>
-      <div class="login-form">
-        <el-form ref="loginForm" :model="loginModel" :rules="loginRules">
-          <el-form-item prop="loginName">
-            <el-input
-              v-model.trim="loginModel.loginName"
-              placeholder="请输入手机号"
-              name="username"
-              clearable
-            >
-              <i class="icon icon-phone" slot="prefix"></i>
-            </el-input>
-          </el-form-item>
-          <el-form-item prop="password">
-            <el-input
-              type="password"
-              v-model.trim="loginModel.password"
-              placeholder="请输入密码"
-              clearable
-            >
-              <i class="icon icon-password" slot="prefix"></i>
-            </el-input>
-          </el-form-item>
-          <el-form-item></el-form-item>
-          <el-form-item>
-            <el-button
-              class="login-submit-btn"
-              size="large"
-              type="info"
-              :disabled="isSubmit"
-              round
-              @click="submit('loginForm')"
-              >登录</el-button
-            >
-            <!-- <div class="login-link">
-              <router-link :to="{ name: 'ForgetPwd' }">忘记密码</router-link>
-            </div> -->
-          </el-form-item>
-        </el-form>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { password, phone } from "@/plugins/formRules";
-import { login } from "../api";
-import { Base64 } from "@/plugins/crypto";
-import fetchSmsMixins from "../fetchSmsMixins";
-
-export default {
-  name: "login",
-  mixins: [fetchSmsMixins],
-  data() {
-    return {
-      schoolLogo: "",
-      loginModel: {
-        loginName: "",
-        password: ""
-      },
-      loginRules: {
-        password,
-        loginName: phone
-      },
-      userInfo: {},
-      isSubmit: false
-    };
-  },
-  mounted() {
-    this.$ls.clear();
-  },
-  methods: {
-    async submit(name) {
-      const valid = await this.$refs[name].validate().catch(() => {});
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-      let datas = {
-        loginName: this.loginModel.loginName,
-        password: Base64(this.loginModel.password)
-      };
-      const data = await login(datas).catch(() => {});
-      this.isSubmit = false;
-      if (!data) return;
-
-      if (data.orgInfo)
-        this.$ls.set("orgId", data.orgInfo.id, this.GLOBAL.authTimeout);
-      if (data.schoolInfo) {
-        this.$ls.set("schoolId", data.schoolInfo.id, this.GLOBAL.authTimeout);
-        this.$ls.set(
-          "schoolName",
-          data.schoolInfo.name,
-          this.GLOBAL.authTimeout
-        );
-      }
-      this.$ls.set("user", data, this.GLOBAL.authTimeout);
-      this.$ls.set("token", data.accessToken, this.GLOBAL.authTimeout);
-
-      if (data.roleList && data.roleList.includes("ADMIN")) {
-        this.$router.push({
-          name: "SelectSchool"
-        });
-      } else {
-        this.$router.push({
-          name: "Home"
-        });
-      }
-    }
-  }
-};
-</script>
+<template>
+  <div class="login login-box">
+    <div class="login-body" @keyup.enter="submit('loginForm')">
+      <div class="login-title">
+        <img v-if="schoolLogo" :src="schoolLogo" alt="学校logo" />
+        <h1 v-else>教务数据对接系统</h1>
+      </div>
+      <div class="login-form">
+        <el-form ref="loginForm" :model="loginModel" :rules="loginRules">
+          <el-form-item prop="loginName">
+            <el-input
+              v-model.trim="loginModel.loginName"
+              placeholder="请输入手机号"
+              name="username"
+              clearable
+            >
+              <i class="icon icon-phone" slot="prefix"></i>
+            </el-input>
+          </el-form-item>
+          <el-form-item prop="password">
+            <el-input
+              type="password"
+              v-model.trim="loginModel.password"
+              placeholder="请输入密码"
+              clearable
+            >
+              <i class="icon icon-password" slot="prefix"></i>
+            </el-input>
+          </el-form-item>
+          <el-form-item></el-form-item>
+          <el-form-item>
+            <el-button
+              class="login-submit-btn"
+              size="large"
+              type="info"
+              :disabled="isSubmit"
+              round
+              @click="submit('loginForm')"
+              >登录</el-button
+            >
+            <!-- <div class="login-link">
+              <router-link :to="{ name: 'ForgetPwd' }">忘记密码</router-link>
+            </div> -->
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { password, phone } from "@/plugins/formRules";
+import { login } from "../api";
+import { Base64 } from "@/plugins/crypto";
+import fetchSmsMixins from "../fetchSmsMixins";
+
+export default {
+  name: "login",
+  mixins: [fetchSmsMixins],
+  data() {
+    return {
+      schoolLogo: "",
+      loginModel: {
+        loginName: "",
+        password: "",
+      },
+      loginRules: {
+        password,
+        loginName: phone,
+      },
+      userInfo: {},
+      isSubmit: false,
+    };
+  },
+  mounted() {
+    this.$ls.clear();
+  },
+  methods: {
+    async submit(name) {
+      const valid = await this.$refs[name].validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+      let datas = {
+        loginName: this.loginModel.loginName,
+        password: Base64(this.loginModel.password),
+      };
+      const data = await login(datas).catch(() => {});
+      this.isSubmit = false;
+      if (!data) return;
+
+      if (data.orgInfo)
+        this.$ls.set("orgId", data.orgInfo.id, this.GLOBAL.authTimeout);
+      if (data.schoolInfo) {
+        this.$ls.set("schoolId", data.schoolInfo.id, this.GLOBAL.authTimeout);
+        this.$ls.set(
+          "schoolName",
+          data.schoolInfo.name,
+          this.GLOBAL.authTimeout
+        );
+      }
+      this.$ls.set("user", data, this.GLOBAL.authTimeout);
+      this.$ls.set("token", data.accessToken, this.GLOBAL.authTimeout);
+
+      if (data.roleList && data.roleList.includes("ADMIN")) {
+        this.$router.push({
+          name: "SelectSchool",
+        });
+      } else {
+        this.$router.push({
+          name: "Home",
+        });
+      }
+    },
+  },
+};
+</script>

+ 25 - 25
src/modules/login/views/LoginHome.vue

@@ -1,25 +1,25 @@
-<template>
-  <div class="login-home">
-    <router-view></router-view>
-    <div class="login-footer">
-      <p>
-        <a href="http://www.qmth.com.cn" target="_blank"
-          >Copyright © 2022 启明泰和</a
-        >
-        <a href="https://beian.miit.gov.cn/" target="_blank"
-          >鄂ICP备12000033号-9</a
-        >
-      </p>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "login-home",
-  data() {
-    return {};
-  },
-  methods: {}
-};
-</script>
+<template>
+  <div class="login-home">
+    <router-view></router-view>
+    <div class="login-footer">
+      <p>
+        <a href="http://www.qmth.com.cn" target="_blank"
+          >Copyright © 2022 启明泰和</a
+        >
+        <a href="https://beian.miit.gov.cn/" target="_blank"
+          >鄂ICP备12000033号-9</a
+        >
+      </p>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "login-home",
+  data() {
+    return {};
+  },
+  methods: {},
+};
+</script>

+ 268 - 268
src/modules/login/views/ResetPwd.vue

@@ -1,268 +1,268 @@
-<template>
-  <el-dialog
-    class="reset-pwd"
-    :visible.sync="modalIsShow"
-    :title="title"
-    top="10vh"
-    width="448px"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    @open="visibleChange"
-  >
-    <el-form
-      ref="modalFormComp"
-      :model="modalForm"
-      :rules="resetRules"
-      label-position="top"
-    >
-      <template v-if="needResetPwd">
-        <el-form-item prop="oldPassword" label="旧密码:">
-          <el-input
-            type="password"
-            v-model="modalForm.oldPassword"
-            placeholder="请输入旧密码"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="password" label="新密码:">
-          <el-input
-            type="password"
-            v-model="modalForm.password"
-            placeholder="请输入新密码"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="rePassword" label="再次密码:">
-          <el-input
-            type="password"
-            v-model="modalForm.rePassword"
-            placeholder="请再次输入新密码"
-            clearable
-          ></el-input>
-        </el-form-item>
-      </template>
-      <template v-if="needBindMobile">
-        <el-form-item prop="mobileNumber" label="手机号:">
-          <el-input
-            v-model.trim="modalForm.mobileNumber"
-            placeholder="请输入账号"
-            name="mobileNumber"
-            clearable
-          >
-          </el-input>
-        </el-form-item>
-        <el-form-item prop="code" label="验证码:">
-          <div class="vlcode">
-            <div class="vlcode-right">
-              <el-button
-                style="width:100%;"
-                type="text"
-                @click="fetchSmsCode"
-                :disabled="isFetchingCode"
-                >+{{ codeContent }}</el-button
-              >
-            </div>
-            <div class="vlcode-left">
-              <el-input
-                v-model.trim="modalForm.code"
-                placeholder="请输入手机验证码"
-                name="code"
-                clearable
-              >
-              </el-input>
-            </div>
-          </div>
-        </el-form-item>
-      </template>
-    </el-form>
-    <div slot="footer">
-      <el-button type="primary" :disabled="isSubmit" @click="submit"
-        >确认</el-button
-      >
-      <el-button @click="cancel">取消</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { updatePwd, getSmsCodeForBind } from "../api";
-import { password, phone, smscode } from "@/plugins/formRules";
-import { Base64 } from "@/plugins/crypto";
-import fetchSmsMixins from "@/modules/login/fetchSmsMixins";
-
-const initModalForm = {
-  id: "",
-  oldPassword: "",
-  password: "",
-  rePassword: "",
-  mobileNumber: "",
-  code: ""
-};
-
-export default {
-  name: "reset-pwd",
-  props: {
-    userInfo: {
-      type: Object,
-      default() {
-        return {
-          userId: "",
-          loginName: "",
-          schoolCode: "",
-          password: "",
-          mobileNumber: "",
-          pwdCount: ""
-        };
-      }
-    }
-  },
-  mixins: [fetchSmsMixins],
-  data() {
-    const equalToOldPswd = (rule, value, callback) => {
-      if (value === this.modalForm.oldPassword) {
-        callback(new Error("新旧密码不可以相同"));
-      } else {
-        callback();
-      }
-    };
-    const equalToPswd = (rule, value, callback) => {
-      if (value !== this.modalForm.password) {
-        callback(new Error("两次输入的密码不一致"));
-      } else {
-        callback();
-      }
-    };
-    return {
-      modalIsShow: false,
-      isSubmit: false,
-      nameWaitTime: "resetpwd",
-      isFetchingCode: false,
-      modalForm: { ...initModalForm },
-      resetRules: {
-        code: smscode,
-        mobileNumber: phone,
-        oldPassword: password,
-        password: [
-          ...password,
-          {
-            validator: equalToOldPswd,
-            trigger: "change"
-          }
-        ],
-        rePassword: [
-          ...password,
-          {
-            validator: equalToPswd,
-            trigger: "change"
-          }
-        ]
-      }
-    };
-  },
-  computed: {
-    needBindMobile() {
-      return !this.userInfo.mobileNumber;
-    },
-    needResetPwd() {
-      return !this.userInfo.pwdCount;
-    },
-    title() {
-      if (this.needBindMobile && this.needResetPwd)
-        return "修改密码与绑定手机号";
-      if (this.needBindMobile) return "绑定手机号";
-      if (this.needResetPwd) return "修改密码";
-
-      return "修改密码";
-    }
-  },
-  methods: {
-    initData(val) {
-      this.modalForm = { ...initModalForm };
-      this.modalForm.oldPassword = this.userInfo.password || "";
-      this.modalForm.id = this.userInfo.userId;
-    },
-    visibleChange() {
-      this.initData(this.instance);
-    },
-    cancel() {
-      this.modalIsShow = false;
-    },
-    open() {
-      this.modalIsShow = true;
-    },
-    checkField(field) {
-      return new Promise((resolve, reject) => {
-        this.$refs.modalFormComp.validateField(field, unvalid => {
-          if (unvalid) {
-            reject();
-          } else {
-            resolve();
-          }
-        });
-      });
-    },
-    async fetchSmsCode() {
-      // console.log("111");
-      let result = true;
-      await this.checkField("mobileNumber").catch(() => {
-        result = false;
-      });
-
-      if (!result) return;
-
-      this.isFetchingCode = true;
-      const data = await getSmsCodeForBind({
-        loginName: this.userInfo.loginName,
-        schoolCode: this.userInfo.schoolCode,
-        password: Base64(this.modalForm.oldPassword),
-        mobileNumber: this.modalForm.mobileNumber
-      }).catch(() => {
-        this.isFetchingCode = false;
-      });
-      if (!data) return;
-
-      this.$message.success(
-        `已向手机尾号【${this.modalForm.mobileNumber.slice(
-          -4
-        )}】成功发送短信,请在2分钟内进行验证!`
-      );
-      this.changeContent();
-    },
-    async submit() {
-      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-      let datas = {
-        id: this.modalForm.id,
-        oldPassword: Base64(this.modalForm.oldPassword)
-      };
-      if (this.needBindMobile) {
-        datas = {
-          ...datas,
-          mobileNumber: this.modalForm.mobileNumber,
-          verifyCode: this.modalForm.code
-        };
-      }
-      if (this.needResetPwd) {
-        datas = {
-          ...datas,
-          password: Base64(this.modalForm.password)
-        };
-      }
-      const data = await updatePwd(datas).catch(() => {
-        this.isSubmit = false;
-      });
-
-      if (!data) return;
-
-      this.isSubmit = false;
-      this.$message.success("修改成功!");
-      this.$emit("modified", data);
-      this.cancel();
-    }
-  }
-};
-</script>
+<template>
+  <el-dialog
+    class="reset-pwd"
+    :visible.sync="modalIsShow"
+    :title="title"
+    top="10vh"
+    width="448px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="resetRules"
+      label-position="top"
+    >
+      <template v-if="needResetPwd">
+        <el-form-item prop="oldPassword" label="旧密码:">
+          <el-input
+            type="password"
+            v-model="modalForm.oldPassword"
+            placeholder="请输入旧密码"
+            clearable
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="password" label="新密码:">
+          <el-input
+            type="password"
+            v-model="modalForm.password"
+            placeholder="请输入新密码"
+            clearable
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="rePassword" label="再次密码:">
+          <el-input
+            type="password"
+            v-model="modalForm.rePassword"
+            placeholder="请再次输入新密码"
+            clearable
+          ></el-input>
+        </el-form-item>
+      </template>
+      <template v-if="needBindMobile">
+        <el-form-item prop="mobileNumber" label="手机号:">
+          <el-input
+            v-model.trim="modalForm.mobileNumber"
+            placeholder="请输入账号"
+            name="mobileNumber"
+            clearable
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item prop="code" label="验证码:">
+          <div class="vlcode">
+            <div class="vlcode-right">
+              <el-button
+                style="width: 100%"
+                type="text"
+                @click="fetchSmsCode"
+                :disabled="isFetchingCode"
+                >+{{ codeContent }}</el-button
+              >
+            </div>
+            <div class="vlcode-left">
+              <el-input
+                v-model.trim="modalForm.code"
+                placeholder="请输入手机验证码"
+                name="code"
+                clearable
+              >
+              </el-input>
+            </div>
+          </div>
+        </el-form-item>
+      </template>
+    </el-form>
+    <div slot="footer">
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+      <el-button @click="cancel">取消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { updatePwd, getSmsCodeForBind } from "../api";
+import { password, phone, smscode } from "@/plugins/formRules";
+import { Base64 } from "@/plugins/crypto";
+import fetchSmsMixins from "@/modules/login/fetchSmsMixins";
+
+const initModalForm = {
+  id: "",
+  oldPassword: "",
+  password: "",
+  rePassword: "",
+  mobileNumber: "",
+  code: "",
+};
+
+export default {
+  name: "reset-pwd",
+  props: {
+    userInfo: {
+      type: Object,
+      default() {
+        return {
+          userId: "",
+          loginName: "",
+          schoolCode: "",
+          password: "",
+          mobileNumber: "",
+          pwdCount: "",
+        };
+      },
+    },
+  },
+  mixins: [fetchSmsMixins],
+  data() {
+    const equalToOldPswd = (rule, value, callback) => {
+      if (value === this.modalForm.oldPassword) {
+        callback(new Error("新旧密码不可以相同"));
+      } else {
+        callback();
+      }
+    };
+    const equalToPswd = (rule, value, callback) => {
+      if (value !== this.modalForm.password) {
+        callback(new Error("两次输入的密码不一致"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      modalIsShow: false,
+      isSubmit: false,
+      nameWaitTime: "resetpwd",
+      isFetchingCode: false,
+      modalForm: { ...initModalForm },
+      resetRules: {
+        code: smscode,
+        mobileNumber: phone,
+        oldPassword: password,
+        password: [
+          ...password,
+          {
+            validator: equalToOldPswd,
+            trigger: "change",
+          },
+        ],
+        rePassword: [
+          ...password,
+          {
+            validator: equalToPswd,
+            trigger: "change",
+          },
+        ],
+      },
+    };
+  },
+  computed: {
+    needBindMobile() {
+      return !this.userInfo.mobileNumber;
+    },
+    needResetPwd() {
+      return !this.userInfo.pwdCount;
+    },
+    title() {
+      if (this.needBindMobile && this.needResetPwd)
+        return "修改密码与绑定手机号";
+      if (this.needBindMobile) return "绑定手机号";
+      if (this.needResetPwd) return "修改密码";
+
+      return "修改密码";
+    },
+  },
+  methods: {
+    initData(val) {
+      this.modalForm = { ...initModalForm };
+      this.modalForm.oldPassword = this.userInfo.password || "";
+      this.modalForm.id = this.userInfo.userId;
+    },
+    visibleChange() {
+      this.initData(this.instance);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    checkField(field) {
+      return new Promise((resolve, reject) => {
+        this.$refs.modalFormComp.validateField(field, (unvalid) => {
+          if (unvalid) {
+            reject();
+          } else {
+            resolve();
+          }
+        });
+      });
+    },
+    async fetchSmsCode() {
+      // console.log("111");
+      let result = true;
+      await this.checkField("mobileNumber").catch(() => {
+        result = false;
+      });
+
+      if (!result) return;
+
+      this.isFetchingCode = true;
+      const data = await getSmsCodeForBind({
+        loginName: this.userInfo.loginName,
+        schoolCode: this.userInfo.schoolCode,
+        password: Base64(this.modalForm.oldPassword),
+        mobileNumber: this.modalForm.mobileNumber,
+      }).catch(() => {
+        this.isFetchingCode = false;
+      });
+      if (!data) return;
+
+      this.$message.success(
+        `已向手机尾号【${this.modalForm.mobileNumber.slice(
+          -4
+        )}】成功发送短信,请在2分钟内进行验证!`
+      );
+      this.changeContent();
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+      let datas = {
+        id: this.modalForm.id,
+        oldPassword: Base64(this.modalForm.oldPassword),
+      };
+      if (this.needBindMobile) {
+        datas = {
+          ...datas,
+          mobileNumber: this.modalForm.mobileNumber,
+          verifyCode: this.modalForm.code,
+        };
+      }
+      if (this.needResetPwd) {
+        datas = {
+          ...datas,
+          password: Base64(this.modalForm.password),
+        };
+      }
+      const data = await updatePwd(datas).catch(() => {
+        this.isSubmit = false;
+      });
+
+      if (!data) return;
+
+      this.isSubmit = false;
+      this.$message.success("修改成功!");
+      this.$emit("modified", data);
+      this.cancel();
+    },
+  },
+};
+</script>

+ 10 - 8
src/modules/login/views/SelectSchool.vue

@@ -10,17 +10,17 @@
           <el-form-item prop="schoolId">
             <school-select
               v-model="modalForm.schoolId"
-              style="width:100%;"
+              style="width: 100%"
               @change="schoolChange"
             ></school-select>
           </el-form-item>
           <el-form-item>
-            <el-button style="width:100%;" type="primary" @click="confirm"
+            <el-button style="width: 100%" type="primary" @click="confirm"
               >进入学校</el-button
             >
           </el-form-item>
           <el-form-item>
-            <el-button style="width:100%;" type="warning" @click="toAdmin"
+            <el-button style="width: 100%" type="warning" @click="toAdmin"
               >进入超管中心<i class="el-icon-arrow-right"></i
             ></el-button>
           </el-form-item>
@@ -39,8 +39,10 @@ export default {
       modalForm: { schoolId: "" },
       curSchool: {},
       rules: {
-        schoolId: [{ required: true, message: "请选择学校", trigger: "change" }]
-      }
+        schoolId: [
+          { required: true, message: "请选择学校", trigger: "change" },
+        ],
+      },
     };
   },
   created() {
@@ -68,9 +70,9 @@ export default {
       this.$ls.set("schoolLogo", this.curSchool.logo, this.GLOBAL.authTimeout);
 
       this.$router.push({
-        name: "Home"
+        name: "Home",
       });
-    }
-  }
+    },
+  },
 };
 </script>

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff