Your Name 1 month ago
commit
5cbc475ac4
100 changed files with 40718 additions and 0 deletions
  1. 8 0
      .env.dev.js
  2. 23 0
      .gitignore
  3. 24 0
      .hbuilderx/launch.json
  4. 19 0
      README.md
  5. 63 0
      babel.config.js
  6. 8 0
      env.prd.js
  7. 17194 0
      package-lock.json
  8. 111 0
      package.json
  9. 22 0
      postcss.config.js
  10. 29 0
      public/index.html
  11. 61 0
      src/App.vue
  12. 289 0
      src/common/api.ts
  13. 36 0
      src/common/constants.ts
  14. 41 0
      src/common/error.ts
  15. 21 0
      src/common/http/config.ts
  16. 158 0
      src/common/http/http.ts
  17. 17 0
      src/common/http/index.ts
  18. 5379 0
      src/common/jsencrypt.js
  19. 390 0
      src/common/mixins/canvasMixin.ts
  20. 42 0
      src/common/mixins/loginMixin.ts
  21. 0 0
      src/common/qqmap-wx-jssdk.min.js
  22. 181 0
      src/common/store/base/index.ts
  23. 45 0
      src/common/store/canvas/index.ts
  24. 29 0
      src/common/store/index.ts
  25. 48 0
      src/common/store/types.ts
  26. 143 0
      src/common/utils.ts
  27. 4 0
      src/common/weapp.qrcode.min.js
  28. 209 0
      src/components/AddressPopup/AddressPopup.vue
  29. 162 0
      src/components/AppShare/AppShare.vue
  30. 98 0
      src/components/BottomPopup/BottomPopup.vue
  31. 172 0
      src/components/GoodItem/GoodItem.vue
  32. 207 0
      src/components/GoodsShare/GoodsShare.vue
  33. 42 0
      src/components/IconText/IconText.vue
  34. 539 0
      src/components/IconText/demo.css
  35. 1499 0
      src/components/IconText/demo_index.html
  36. 243 0
      src/components/IconText/iconfont.css
  37. 0 0
      src/components/IconText/iconfont.js
  38. 408 0
      src/components/IconText/iconfont.json
  39. BIN
      src/components/IconText/iconfont.ttf
  40. BIN
      src/components/IconText/iconfont.woff
  41. BIN
      src/components/IconText/iconfont.woff2
  42. 190 0
      src/components/ImgUpload/ImgUpload.vue
  43. 355 0
      src/components/MiniSpec/MiniSpec.vue
  44. 193 0
      src/components/MulImgUpload/MulImgUpload.vue
  45. 173 0
      src/components/MulVideoUpload/MulVideoUpload.vue
  46. 235 0
      src/components/Navbar/Navbar.vue
  47. 94 0
      src/components/NoData/NoData.vue
  48. 165 0
      src/components/OrderItem/OrderItem.vue
  49. 225 0
      src/components/Password/Password.vue
  50. 157 0
      src/components/SearchBox/SearchBox.vue
  51. 162 0
      src/components/ShopShare/ShopShare.vue
  52. 141 0
      src/components/ShowModal/ShowModal.vue
  53. 464 0
      src/components/SpecPopup/SpecPopup.vue
  54. 171 0
      src/components/Stepper/Stepper.vue
  55. 59 0
      src/components/SwiperBanner/SwiperBanner.md
  56. 255 0
      src/components/SwiperBanner/SwiperBanner.vue
  57. 246 0
      src/components/SwiperBanner1/SwiperBanner1.vue
  58. 101 0
      src/components/TabBar/TabBar.vue
  59. 192 0
      src/components/Tabs/Tabs.vue
  60. 28 0
      src/components/gaoyia-parse/components/wxParseAudio.vue
  61. 94 0
      src/components/gaoyia-parse/components/wxParseImg.vue
  62. 55 0
      src/components/gaoyia-parse/components/wxParseTable.vue
  63. 98 0
      src/components/gaoyia-parse/components/wxParseTemplate0.vue
  64. 88 0
      src/components/gaoyia-parse/components/wxParseTemplate1.vue
  65. 88 0
      src/components/gaoyia-parse/components/wxParseTemplate10.vue
  66. 86 0
      src/components/gaoyia-parse/components/wxParseTemplate11.vue
  67. 88 0
      src/components/gaoyia-parse/components/wxParseTemplate2.vue
  68. 88 0
      src/components/gaoyia-parse/components/wxParseTemplate3.vue
  69. 88 0
      src/components/gaoyia-parse/components/wxParseTemplate4.vue
  70. 88 0
      src/components/gaoyia-parse/components/wxParseTemplate5.vue
  71. 88 0
      src/components/gaoyia-parse/components/wxParseTemplate6.vue
  72. 88 0
      src/components/gaoyia-parse/components/wxParseTemplate7.vue
  73. 88 0
      src/components/gaoyia-parse/components/wxParseTemplate8.vue
  74. 88 0
      src/components/gaoyia-parse/components/wxParseTemplate9.vue
  75. 15 0
      src/components/gaoyia-parse/components/wxParseVideo.vue
  76. 261 0
      src/components/gaoyia-parse/libs/html2json.js
  77. 156 0
      src/components/gaoyia-parse/libs/htmlparser.js
  78. 209 0
      src/components/gaoyia-parse/libs/wxDiscode.js
  79. 258 0
      src/components/gaoyia-parse/parse.css
  80. 228 0
      src/components/gaoyia-parse/parse.vue
  81. 21 0
      src/main.ts
  82. 157 0
      src/manifest.json
  83. 33 0
      src/packages/authorization/agreement.ts
  84. 221 0
      src/packages/authorization/authorization.vue
  85. 110 0
      src/packages/goods/add-detail.vue
  86. 500 0
      src/packages/goods/add-good.vue
  87. 35 0
      src/packages/goods/area.vue
  88. 594 0
      src/packages/goods/attrs-setting.vue
  89. 253 0
      src/packages/goods/category.vue
  90. 753 0
      src/packages/goods/good-detail.vue
  91. 252 0
      src/packages/goods/goods-examine.vue
  92. 501 0
      src/packages/goods/goods-manage.vue
  93. 469 0
      src/packages/goods/search.vue
  94. 376 0
      src/packages/order/address-detail.vue
  95. 278 0
      src/packages/order/address-manage.vue
  96. 629 0
      src/packages/order/after-sale-detail.vue
  97. 234 0
      src/packages/order/after-sale.vue
  98. 955 0
      src/packages/order/create-order.vue
  99. 184 0
      src/packages/order/deliver-goods.vue
  100. 253 0
      src/packages/order/logistics.vue

+ 8 - 0
.env.dev.js

@@ -0,0 +1,8 @@
+module.exports = {
+  VUE_APP_USER_NAME: 'xsd',
+  VUE_APP_REMOTE_HOST: 'xsd-api-dev-go.datounet.com',
+  // VUE_H5_REMOTE_HOST: 'https://xsd-pay-dev.datounet.com',
+  // VUE_APP_REMOTE_HOST: 'xsd-api.datouit.com',
+  
+  // wx341bf6f59be2ab12
+}

+ 23 - 0
.gitignore

@@ -0,0 +1,23 @@
+.DS_Store
+node_modules/
+unpackage/
+dist/
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.project
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw*

+ 24 - 0
.hbuilderx/launch.json

@@ -0,0 +1,24 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"app-plus" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"h5" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 19 - 0
README.md

@@ -0,0 +1,19 @@
+# uni-app-base
+
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).

+ 63 - 0
babel.config.js

@@ -0,0 +1,63 @@
+const plugins = []
+
+if (process.env.UNI_OPT_TREESHAKINGNG) {
+  plugins.push(require('@dcloudio/vue-cli-plugin-uni-optimize/packages/babel-plugin-uni-api/index.js'))
+}
+
+if (
+  (
+    process.env.UNI_PLATFORM === 'app-plus' &&
+    process.env.UNI_USING_V8
+  ) ||
+  (
+    process.env.UNI_PLATFORM === 'h5' &&
+    process.env.UNI_H5_BROWSER === 'builtin'
+  )
+) {
+  const path = require('path')
+
+  const isWin = /^win/.test(process.platform)
+
+  const normalizePath = path => (isWin ? path.replace(/\\/g, '/') : path)
+
+  const input = normalizePath(process.env.UNI_INPUT_DIR)
+  try {
+    plugins.push([
+      require('@dcloudio/vue-cli-plugin-hbuilderx/packages/babel-plugin-console'),
+      {
+        file (file) {
+          file = normalizePath(file)
+          if (file.indexOf(input) === 0) {
+            return path.relative(input, file)
+          }
+          return false
+        }
+      }
+    ])
+  } catch (e) {}
+}
+
+process.UNI_LIBRARIES = process.UNI_LIBRARIES || ['@dcloudio/uni-ui']
+process.UNI_LIBRARIES.forEach(libraryName => {
+  plugins.push([
+    'import',
+    {
+      'libraryName': libraryName,
+      'customName': (name) => {
+        return `${libraryName}/lib/${name}/${name}`
+      }
+    }
+  ])
+})
+module.exports = {
+  presets: [
+    [
+      '@vue/app',
+      {
+        modules: 'commonjs',
+        useBuiltIns: process.env.UNI_PLATFORM === 'h5' ? 'usage' : 'entry'
+      }
+    ]
+  ],
+  plugins
+}

+ 8 - 0
env.prd.js

@@ -0,0 +1,8 @@
+module.exports = {
+  VUE_APP_USER_NAME: 'xsd',
+  // VUE_APP_REMOTE_HOST: 'xsd-api-dev-go.datounet.com',
+  // VUE_H5_REMOTE_HOST: 'https://pay.timesweb.cc',
+  VUE_APP_REMOTE_HOST: 'api.timesweb.cc',
+  
+  // appid wxd015215876dc4f4d
+}

+ 17194 - 0
package-lock.json

@@ -0,0 +1,17194 @@
+{
+  "name": "uni-app",
+  "version": "0.1.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@babel/code-frame": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.14.5.tgz?cache=0&sync_timestamp=1623280355998&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.14.5.tgz",
+      "integrity": "sha1-I7CNdA6D9JxeWZRfvxtD6Au/Tts=",
+      "requires": {
+        "@babel/highlight": "^7.14.5"
+      }
+    },
+    "@babel/compat-data": {
+      "version": "7.15.0",
+      "resolved": "https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.15.0.tgz",
+      "integrity": "sha1-Lbr4uFM0eWyvuw9Xk6kKL8AQsXY="
+    },
+    "@babel/core": {
+      "version": "7.15.5",
+      "resolved": "https://registry.nlark.com/@babel/core/download/@babel/core-7.15.5.tgz",
+      "integrity": "sha1-+O2aznMHIlRGCfkMm7SRYtw79bk=",
+      "requires": {
+        "@babel/code-frame": "^7.14.5",
+        "@babel/generator": "^7.15.4",
+        "@babel/helper-compilation-targets": "^7.15.4",
+        "@babel/helper-module-transforms": "^7.15.4",
+        "@babel/helpers": "^7.15.4",
+        "@babel/parser": "^7.15.5",
+        "@babel/template": "^7.15.4",
+        "@babel/traverse": "^7.15.4",
+        "@babel/types": "^7.15.4",
+        "convert-source-map": "^1.7.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.1.2",
+        "semver": "^6.3.0",
+        "source-map": "^0.5.0"
+      },
+      "dependencies": {
+        "json5": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.2.0.tgz",
+          "integrity": "sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM=",
+          "requires": {
+            "minimist": "^1.2.5"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0="
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+        }
+      }
+    },
+    "@babel/generator": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.15.4.tgz?cache=0&sync_timestamp=1630618812112&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.4.tgz",
+      "integrity": "sha1-hayxWaJnymMk+Xk5hpke4gIqBbA=",
+      "requires": {
+        "@babel/types": "^7.15.4",
+        "jsesc": "^2.5.1",
+        "source-map": "^0.5.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+        }
+      }
+    },
+    "@babel/helper-annotate-as-pure": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.15.4.tgz?cache=0&sync_timestamp=1630618813039&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.15.4.tgz",
+      "integrity": "sha1-PQ5DsAxeSf22xX5CFgGnpljV+DU=",
+      "requires": {
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz?cache=0&sync_timestamp=1630618814111&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor%2Fdownload%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor-7.15.4.tgz",
+      "integrity": "sha1-Ia2BX2CbhO4OMFhnbDPPbRZwUl8=",
+      "requires": {
+        "@babel/helper-explode-assignable-expression": "^7.15.4",
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-compilation-targets": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.15.4.tgz?cache=0&sync_timestamp=1630618809411&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.15.4.tgz",
+      "integrity": "sha1-z22U8w++/BORI+J91rAvZa7tt7k=",
+      "requires": {
+        "@babel/compat-data": "^7.15.0",
+        "@babel/helper-validator-option": "^7.14.5",
+        "browserslist": "^4.16.6",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0="
+        }
+      }
+    },
+    "@babel/helper-create-class-features-plugin": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.15.4.tgz?cache=0&sync_timestamp=1630618827775&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-create-class-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-class-features-plugin-7.15.4.tgz",
+      "integrity": "sha1-f5d8F70SpfujY8sZvqCQOUvzfS4=",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.15.4",
+        "@babel/helper-function-name": "^7.15.4",
+        "@babel/helper-member-expression-to-functions": "^7.15.4",
+        "@babel/helper-optimise-call-expression": "^7.15.4",
+        "@babel/helper-replace-supers": "^7.15.4",
+        "@babel/helper-split-export-declaration": "^7.15.4"
+      }
+    },
+    "@babel/helper-create-regexp-features-plugin": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.14.5.tgz?cache=0&sync_timestamp=1623280375996&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-create-regexp-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-regexp-features-plugin-7.14.5.tgz",
+      "integrity": "sha1-x9WsXpz2IcJgV3Ivt6ikxYiTWMQ=",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.14.5",
+        "regexpu-core": "^4.7.1"
+      }
+    },
+    "@babel/helper-define-polyfill-provider": {
+      "version": "0.2.3",
+      "resolved": "https://registry.nlark.com/@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.2.3.tgz?cache=0&sync_timestamp=1622025430652&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-define-polyfill-provider%2Fdownload%2F%40babel%2Fhelper-define-polyfill-provider-0.2.3.tgz",
+      "integrity": "sha1-BSXt7FCUZTooJojTTYRuTHXpwLY=",
+      "requires": {
+        "@babel/helper-compilation-targets": "^7.13.0",
+        "@babel/helper-module-imports": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/traverse": "^7.13.0",
+        "debug": "^4.1.1",
+        "lodash.debounce": "^4.0.8",
+        "resolve": "^1.14.2",
+        "semver": "^6.1.2"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0="
+        }
+      }
+    },
+    "@babel/helper-explode-assignable-expression": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.15.4.tgz?cache=0&sync_timestamp=1630618813272&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-explode-assignable-expression%2Fdownload%2F%40babel%2Fhelper-explode-assignable-expression-7.15.4.tgz",
+      "integrity": "sha1-+a7J0hnycer5K59WFZjKayaCYAw=",
+      "requires": {
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-function-name": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-function-name/download/@babel/helper-function-name-7.15.4.tgz?cache=0&sync_timestamp=1630618814391&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.15.4.tgz",
+      "integrity": "sha1-hFdE2vxDgaSl+2r6bD02+Yp4frw=",
+      "requires": {
+        "@babel/helper-get-function-arity": "^7.15.4",
+        "@babel/template": "^7.15.4",
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-get-function-arity": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.15.4.tgz?cache=0&sync_timestamp=1630618811593&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.15.4.tgz",
+      "integrity": "sha1-CYgYk0oTf854tTaj4BWGS+Hih5s=",
+      "requires": {
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-hoist-variables": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.15.4.tgz?cache=0&sync_timestamp=1630618812572&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-hoist-variables%2Fdownload%2F%40babel%2Fhelper-hoist-variables-7.15.4.tgz",
+      "integrity": "sha1-CZk6MlnA6Rj5nRBCYd/fwDPxeN8=",
+      "requires": {
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-member-expression-to-functions": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.15.4.tgz?cache=0&sync_timestamp=1630618813495&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.15.4.tgz",
+      "integrity": "sha1-v9NNybupgkpGWLAxfsL9VxpR5u8=",
+      "requires": {
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-module-imports": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.15.4.tgz?cache=0&sync_timestamp=1630618812291&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.15.4.tgz",
+      "integrity": "sha1-4YAH0jBjLeoZtHhTuYRHbntOED8=",
+      "requires": {
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-module-transforms": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.15.4.tgz?cache=0&sync_timestamp=1630618812266&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.15.4.tgz",
+      "integrity": "sha1-lizGKaf3+aCC3WLQMH+nX+h4jXw=",
+      "requires": {
+        "@babel/helper-module-imports": "^7.15.4",
+        "@babel/helper-replace-supers": "^7.15.4",
+        "@babel/helper-simple-access": "^7.15.4",
+        "@babel/helper-split-export-declaration": "^7.15.4",
+        "@babel/helper-validator-identifier": "^7.14.9",
+        "@babel/template": "^7.15.4",
+        "@babel/traverse": "^7.15.4",
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-optimise-call-expression": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.15.4.tgz?cache=0&sync_timestamp=1630618812766&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.15.4.tgz",
+      "integrity": "sha1-8xClEho7nMUtmrGRIr1ymCLe4XE=",
+      "requires": {
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-plugin-utils": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.14.5.tgz",
+      "integrity": "sha1-WsgizpfuxGdBq3ClF5ceRDpwxak="
+    },
+    "@babel/helper-remap-async-to-generator": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.15.4.tgz?cache=0&sync_timestamp=1630618818480&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.15.4.tgz",
+      "integrity": "sha1-JjfAcx5MkPv1isWLULK1oZL8lw8=",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.15.4",
+        "@babel/helper-wrap-function": "^7.15.4",
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-replace-supers": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.15.4.tgz?cache=0&sync_timestamp=1630618814840&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.15.4.tgz",
+      "integrity": "sha1-UqirJrqRjH9t7ihiiwcHGse3NHo=",
+      "requires": {
+        "@babel/helper-member-expression-to-functions": "^7.15.4",
+        "@babel/helper-optimise-call-expression": "^7.15.4",
+        "@babel/traverse": "^7.15.4",
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-simple-access": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-simple-access/download/@babel/helper-simple-access-7.15.4.tgz?cache=0&sync_timestamp=1630618813217&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.15.4.tgz",
+      "integrity": "sha1-rDaJBavx3o6XgUNLY12PhnS8wTs=",
+      "requires": {
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.15.4.tgz?cache=0&sync_timestamp=1630618813661&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-skip-transparent-expression-wrappers%2Fdownload%2F%40babel%2Fhelper-skip-transparent-expression-wrappers-7.15.4.tgz",
+      "integrity": "sha1-cH29uh9K0Po0+RFPyBl67H1dous=",
+      "requires": {
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-split-export-declaration": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.15.4.tgz?cache=0&sync_timestamp=1630618813944&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.15.4.tgz",
+      "integrity": "sha1-rsq5Lc2+9qEKo7YqsgSwhfd24lc=",
+      "requires": {
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helper-validator-identifier": {
+      "version": "7.14.9",
+      "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.14.9.tgz?cache=0&sync_timestamp=1627804495811&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.14.9.tgz",
+      "integrity": "sha1-ZlTRcbICT22O4VG/JQlpmRkTHUg="
+    },
+    "@babel/helper-validator-option": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.14.5.tgz",
+      "integrity": "sha1-bnKh//GNXfy4eOHmLxoCHEty1aM="
+    },
+    "@babel/helper-wrap-function": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.15.4.tgz?cache=0&sync_timestamp=1630618815324&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.15.4.tgz",
+      "integrity": "sha1-b3VLJEbPrz1hJSPmq415wnw6Pec=",
+      "requires": {
+        "@babel/helper-function-name": "^7.15.4",
+        "@babel/template": "^7.15.4",
+        "@babel/traverse": "^7.15.4",
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/helpers": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/helpers/download/@babel/helpers-7.15.4.tgz?cache=0&sync_timestamp=1630618815077&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.15.4.tgz",
+      "integrity": "sha1-X0DwIFCjAnEho89I1JfAXFVer0M=",
+      "requires": {
+        "@babel/template": "^7.15.4",
+        "@babel/traverse": "^7.15.4",
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/highlight/download/@babel/highlight-7.14.5.tgz",
+      "integrity": "sha1-aGGlLwOWZAUAH2qlNKAaJNmejNk=",
+      "requires": {
+        "@babel/helper-validator-identifier": "^7.14.5",
+        "chalk": "^2.0.0",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.15.5",
+      "resolved": "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.15.5.tgz",
+      "integrity": "sha1-0zpYymn6zAWyat/kq+v+1WwcLaw="
+    },
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz?cache=0&sync_timestamp=1630618814180&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-bugfix-v8-spread-parameters-in-optional-chaining%2Fdownload%2F%40babel%2Fplugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz",
+      "integrity": "sha1-296rsegPYi2fC1g++ymZYF4KVn4=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4",
+        "@babel/plugin-proposal-optional-chaining": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-async-generator-functions": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.15.4.tgz?cache=0&sync_timestamp=1630618820334&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-async-generator-functions%2Fdownload%2F%40babel%2Fplugin-proposal-async-generator-functions-7.15.4.tgz",
+      "integrity": "sha1-+Cqr6WwTXSzqqRf+ufX8oxY1J34=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-remap-async-to-generator": "^7.15.4",
+        "@babel/plugin-syntax-async-generators": "^7.8.4"
+      }
+    },
+    "@babel/plugin-proposal-class-properties": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.14.5.tgz?cache=0&sync_timestamp=1623280991885&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.14.5.tgz",
+      "integrity": "sha1-QNHuFAxbHjGjUPT17tlFCWVZtC4=",
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-class-static-block": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.15.4.tgz?cache=0&sync_timestamp=1630618819444&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-class-static-block%2Fdownload%2F%40babel%2Fplugin-proposal-class-static-block-7.15.4.tgz",
+      "integrity": "sha1-PnymEoRTwInotHepn5cMY/wcuNc=",
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.15.4",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-decorators": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.15.4.tgz?cache=0&sync_timestamp=1630618871699&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-decorators%2Fdownload%2F%40babel%2Fplugin-proposal-decorators-7.15.4.tgz",
+      "integrity": "sha1-+1VEK8g6tNRd2na5GUlwa/IogdI=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.15.4",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-decorators": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-dynamic-import": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.14.5.tgz",
+      "integrity": "sha1-DGYX30YcDB+P/ztHzVl3I2AQHSw=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-export-namespace-from": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.14.5.tgz",
+      "integrity": "sha1-260kQxDObM0IMHIWfYzqg6Uvr3Y=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-json-strings": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.14.5.tgz",
+      "integrity": "sha1-ON5g2zYug6PYyUSshY3fnwwiOes=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-json-strings": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-logical-assignment-operators": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.14.5.tgz",
+      "integrity": "sha1-bmIpwqmbAqspFfglceDMZGpAxzg=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+      }
+    },
+    "@babel/plugin-proposal-nullish-coalescing-operator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz",
+      "integrity": "sha1-7jhYnOAOLMWbKZ7D6kBvzToP2vY=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-numeric-separator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.14.5.tgz",
+      "integrity": "sha1-g2Mb8z2aUd8YTCECoGmsDFjAXxg=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+      }
+    },
+    "@babel/plugin-proposal-object-rest-spread": {
+      "version": "7.14.7",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.14.7.tgz",
+      "integrity": "sha1-WSCis99/eQHfAgWXTAZBsT/Z02M=",
+      "requires": {
+        "@babel/compat-data": "^7.14.7",
+        "@babel/helper-compilation-targets": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-transform-parameters": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-optional-catch-binding": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.14.5.tgz",
+      "integrity": "sha1-k53W7d7/Omf997PwRLU0cmJZjDw=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-optional-chaining": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.14.5.tgz?cache=0&sync_timestamp=1623280381280&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-optional-chaining%2Fdownload%2F%40babel%2Fplugin-proposal-optional-chaining-7.14.5.tgz",
+      "integrity": "sha1-+oNlHmCjYOPxN5fu8AuNUZaVtgM=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-private-methods": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.14.5.tgz?cache=0&sync_timestamp=1623281841960&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-private-methods%2Fdownload%2F%40babel%2Fplugin-proposal-private-methods-7.14.5.tgz",
+      "integrity": "sha1-N0RklZlrKUXzD1vltg1eKqT1eS0=",
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-private-property-in-object": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.15.4.tgz?cache=0&sync_timestamp=1630618820812&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-private-property-in-object%2Fdownload%2F%40babel%2Fplugin-proposal-private-property-in-object-7.15.4.tgz",
+      "integrity": "sha1-VcXjtNAmH9RP5jfj9iTPsPSE4+U=",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.15.4",
+        "@babel/helper-create-class-features-plugin": "^7.15.4",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-unicode-property-regex": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.14.5.tgz",
+      "integrity": "sha1-D5XuDnV6XWR/N42qDsp+k/qou+g=",
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-async-generators": {
+      "version": "7.8.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz",
+      "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-bigint": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-bigint/download/@babel/plugin-syntax-bigint-7.8.3.tgz",
+      "integrity": "sha1-TJpvZp9dDN8bkKFnHpoUa+UwDOo=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-class-properties": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz?cache=0&sync_timestamp=1612314829085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-class-properties%2Fdownload%2F%40babel%2Fplugin-syntax-class-properties-7.12.13.tgz",
+      "integrity": "sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-syntax-class-static-block": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.14.5.tgz",
+      "integrity": "sha1-GV34mxRrS3izv4l/16JXyEZZ1AY=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-decorators": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.14.5.tgz",
+      "integrity": "sha1-6vucDL4JyK/rlkujp7vWOUWnLyA=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-dynamic-import": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz",
+      "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-export-namespace-from": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz",
+      "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.3"
+      }
+    },
+    "@babel/plugin-syntax-import-meta": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-import-meta/download/@babel/plugin-syntax-import-meta-7.10.4.tgz?cache=0&sync_timestamp=1593524789921&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-import-meta%2Fdownload%2F%40babel%2Fplugin-syntax-import-meta-7.10.4.tgz",
+      "integrity": "sha1-7mATSMNw+jNNIge+FYd3SWUh/VE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-json-strings": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz",
+      "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-jsx": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.14.5.tgz",
+      "integrity": "sha1-AA4uJdhnPM5JMAUXo+2kTCY+QgE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-logical-assignment-operators": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+      "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-nullish-coalescing-operator": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+      "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-numeric-separator": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz",
+      "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-object-rest-spread": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz",
+      "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-catch-binding": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+      "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-chaining": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz",
+      "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-private-property-in-object": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.5.tgz",
+      "integrity": "sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-top-level-await": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz",
+      "integrity": "sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-typescript": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.14.5.tgz",
+      "integrity": "sha1-uCxs5HGxZbXOQgz5KRTW+0YiVxY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-arrow-functions": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.14.5.tgz",
+      "integrity": "sha1-9xh9lYinaN0IC/TJ/+EX6mL3hio=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-async-to-generator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.14.5.tgz?cache=0&sync_timestamp=1623280991702&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.14.5.tgz",
+      "integrity": "sha1-cseJCE2PIJSsuUVjOUPvhEPTnmc=",
+      "requires": {
+        "@babel/helper-module-imports": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-remap-async-to-generator": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.14.5.tgz",
+      "integrity": "sha1-5IZB2ZnUvBV6Z+8zautUvET9OtQ=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-block-scoping": {
+      "version": "7.15.3",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.15.3.tgz",
+      "integrity": "sha1-lMgabi/CMLzObvU3rJah5NKzr68=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-classes": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.15.4.tgz?cache=0&sync_timestamp=1630618822856&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.15.4.tgz",
+      "integrity": "sha1-UK7heq9/MyrkTjvOTC4QU01dO/E=",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.15.4",
+        "@babel/helper-function-name": "^7.15.4",
+        "@babel/helper-optimise-call-expression": "^7.15.4",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-replace-supers": "^7.15.4",
+        "@babel/helper-split-export-declaration": "^7.15.4",
+        "globals": "^11.1.0"
+      }
+    },
+    "@babel/plugin-transform-computed-properties": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.14.5.tgz",
+      "integrity": "sha1-G514mHQg0RIj1BGVRhzEO5dLIE8=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-destructuring": {
+      "version": "7.14.7",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.14.7.tgz",
+      "integrity": "sha1-CtWO034j4iCE0QnxhSYINeVVdXY=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-dotall-regex": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.14.5.tgz",
+      "integrity": "sha1-L2v3bka9+AQ7Tn4WzyRTJim6DHo=",
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-duplicate-keys": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.14.5.tgz",
+      "integrity": "sha1-NlpIRIgb3xUB46nwJw5/D5EXeVQ=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.14.5.tgz?cache=0&sync_timestamp=1623280991210&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-exponentiation-operator%2Fdownload%2F%40babel%2Fplugin-transform-exponentiation-operator-7.14.5.tgz",
+      "integrity": "sha1-UVS43Wo9/m2Qkj1hckvT3uuQtJM=",
+      "requires": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-for-of": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.15.4.tgz",
+      "integrity": "sha1-JcYszicYz7KXFfQW511SY/s2qMI=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-function-name": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.14.5.tgz?cache=0&sync_timestamp=1623280995218&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-function-name%2Fdownload%2F%40babel%2Fplugin-transform-function-name-7.14.5.tgz",
+      "integrity": "sha1-6Bxl7LkAdG1/MYAva+0fUtkV1vI=",
+      "requires": {
+        "@babel/helper-function-name": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-literals": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.14.5.tgz",
+      "integrity": "sha1-QdBsf/XU0J489Fh70+zzkwxzD3g=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-member-expression-literals": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.14.5.tgz",
+      "integrity": "sha1-s5zVISor8jWmF9Mg7CtIvMCRuKc=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-modules-amd": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.14.5.tgz?cache=0&sync_timestamp=1623280992176&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.14.5.tgz",
+      "integrity": "sha1-T9nOfjQRy4uDhISAtwQdgwBIWPc=",
+      "requires": {
+        "@babel/helper-module-transforms": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
+      }
+    },
+    "@babel/plugin-transform-modules-commonjs": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.15.4.tgz?cache=0&sync_timestamp=1630618823916&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-commonjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-commonjs-7.15.4.tgz",
+      "integrity": "sha1-ggEQEkDqu1p2wI72GylU92e2tME=",
+      "requires": {
+        "@babel/helper-module-transforms": "^7.15.4",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-simple-access": "^7.15.4",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
+      }
+    },
+    "@babel/plugin-transform-modules-systemjs": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.15.4.tgz?cache=0&sync_timestamp=1630618823971&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.15.4.tgz",
+      "integrity": "sha1-tCiQxzSaeMgncZ8dLQzTjH0mgTI=",
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.15.4",
+        "@babel/helper-module-transforms": "^7.15.4",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-validator-identifier": "^7.14.9",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
+      }
+    },
+    "@babel/plugin-transform-modules-umd": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.14.5.tgz?cache=0&sync_timestamp=1623280991598&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.14.5.tgz",
+      "integrity": "sha1-+2Yt/uaXzOJ0p82lJRkKeQlqpuA=",
+      "requires": {
+        "@babel/helper-module-transforms": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.14.9",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.14.9.tgz",
+      "integrity": "sha1-xo9cXRLS66ujdi5XwsT2NHpG57I=",
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-new-target": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.14.5.tgz",
+      "integrity": "sha1-Mb2ui5JdyEB26/zSqZQBQ67X2/g=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-object-super": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.14.5.tgz",
+      "integrity": "sha1-0LX66snphZehYanPeMUn7ZNM3EU=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-replace-supers": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-parameters": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.15.4.tgz?cache=0&sync_timestamp=1630618810842&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.15.4.tgz",
+      "integrity": "sha1-XyKFzDFgv0jIUCQycWtIUE0p7WI=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-property-literals": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.14.5.tgz",
+      "integrity": "sha1-DduqH4PbNgbxzfSEb6HftHNFizQ=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-regenerator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.14.5.tgz",
+      "integrity": "sha1-lnb9VwftKPUicnxbPAqoVERAsE8=",
+      "requires": {
+        "regenerator-transform": "^0.14.2"
+      }
+    },
+    "@babel/plugin-transform-reserved-words": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.14.5.tgz",
+      "integrity": "sha1-xEWJtmHP2++NQwDcx0ad/6kvgwQ=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-runtime": {
+      "version": "7.15.0",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.15.0.tgz?cache=0&sync_timestamp=1628117564879&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-runtime%2Fdownload%2F%40babel%2Fplugin-transform-runtime-7.15.0.tgz",
+      "integrity": "sha1-06plDRFnjKds4pQHH9pT14BBg7M=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "babel-plugin-polyfill-corejs2": "^0.2.2",
+        "babel-plugin-polyfill-corejs3": "^0.2.2",
+        "babel-plugin-polyfill-regenerator": "^0.2.2",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        }
+      }
+    },
+    "@babel/plugin-transform-shorthand-properties": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.14.5.tgz",
+      "integrity": "sha1-l/E4VfFAkzjYyty6ymcK154JGlg=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-spread": {
+      "version": "7.14.6",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.14.6.tgz?cache=0&sync_timestamp=1623708900905&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-spread%2Fdownload%2F%40babel%2Fplugin-transform-spread-7.14.6.tgz",
+      "integrity": "sha1-a9QOV/596UqpBIUZY7VhZlL3MUQ=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-sticky-regex": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.14.5.tgz",
+      "integrity": "sha1-W2F1Qmdei3dhKUOB88KMYz9Arrk=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-template-literals": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.14.5.tgz",
+      "integrity": "sha1-pfK8Izk32EU4hdxza92Nn/q/PZM=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-typeof-symbol": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.14.5.tgz",
+      "integrity": "sha1-Oa8nOemJor0pG/a1PxaYFCPUV9Q=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-unicode-escapes": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.14.5.tgz",
+      "integrity": "sha1-nUvSpoHjxdes9PV/qeURddkdDGs=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-unicode-regex": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.14.5.tgz?cache=0&sync_timestamp=1623280996214&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-unicode-regex%2Fdownload%2F%40babel%2Fplugin-transform-unicode-regex-7.14.5.tgz",
+      "integrity": "sha1-TNCbbIQl3YElXHzrP7GDbnQUOC4=",
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/preset-env": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/preset-env/download/@babel/preset-env-7.15.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.15.4.tgz",
+      "integrity": "sha1-GX5/madVxIjwr0Ea8XnL0Q3m6BU=",
+      "requires": {
+        "@babel/compat-data": "^7.15.0",
+        "@babel/helper-compilation-targets": "^7.15.4",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-validator-option": "^7.14.5",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4",
+        "@babel/plugin-proposal-async-generator-functions": "^7.15.4",
+        "@babel/plugin-proposal-class-properties": "^7.14.5",
+        "@babel/plugin-proposal-class-static-block": "^7.15.4",
+        "@babel/plugin-proposal-dynamic-import": "^7.14.5",
+        "@babel/plugin-proposal-export-namespace-from": "^7.14.5",
+        "@babel/plugin-proposal-json-strings": "^7.14.5",
+        "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5",
+        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5",
+        "@babel/plugin-proposal-numeric-separator": "^7.14.5",
+        "@babel/plugin-proposal-object-rest-spread": "^7.14.7",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.14.5",
+        "@babel/plugin-proposal-optional-chaining": "^7.14.5",
+        "@babel/plugin-proposal-private-methods": "^7.14.5",
+        "@babel/plugin-proposal-private-property-in-object": "^7.15.4",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.14.5",
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-class-properties": "^7.12.13",
+        "@babel/plugin-syntax-class-static-block": "^7.14.5",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+        "@babel/plugin-syntax-json-strings": "^7.8.3",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+        "@babel/plugin-syntax-top-level-await": "^7.14.5",
+        "@babel/plugin-transform-arrow-functions": "^7.14.5",
+        "@babel/plugin-transform-async-to-generator": "^7.14.5",
+        "@babel/plugin-transform-block-scoped-functions": "^7.14.5",
+        "@babel/plugin-transform-block-scoping": "^7.15.3",
+        "@babel/plugin-transform-classes": "^7.15.4",
+        "@babel/plugin-transform-computed-properties": "^7.14.5",
+        "@babel/plugin-transform-destructuring": "^7.14.7",
+        "@babel/plugin-transform-dotall-regex": "^7.14.5",
+        "@babel/plugin-transform-duplicate-keys": "^7.14.5",
+        "@babel/plugin-transform-exponentiation-operator": "^7.14.5",
+        "@babel/plugin-transform-for-of": "^7.15.4",
+        "@babel/plugin-transform-function-name": "^7.14.5",
+        "@babel/plugin-transform-literals": "^7.14.5",
+        "@babel/plugin-transform-member-expression-literals": "^7.14.5",
+        "@babel/plugin-transform-modules-amd": "^7.14.5",
+        "@babel/plugin-transform-modules-commonjs": "^7.15.4",
+        "@babel/plugin-transform-modules-systemjs": "^7.15.4",
+        "@babel/plugin-transform-modules-umd": "^7.14.5",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9",
+        "@babel/plugin-transform-new-target": "^7.14.5",
+        "@babel/plugin-transform-object-super": "^7.14.5",
+        "@babel/plugin-transform-parameters": "^7.15.4",
+        "@babel/plugin-transform-property-literals": "^7.14.5",
+        "@babel/plugin-transform-regenerator": "^7.14.5",
+        "@babel/plugin-transform-reserved-words": "^7.14.5",
+        "@babel/plugin-transform-shorthand-properties": "^7.14.5",
+        "@babel/plugin-transform-spread": "^7.14.6",
+        "@babel/plugin-transform-sticky-regex": "^7.14.5",
+        "@babel/plugin-transform-template-literals": "^7.14.5",
+        "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+        "@babel/plugin-transform-unicode-escapes": "^7.14.5",
+        "@babel/plugin-transform-unicode-regex": "^7.14.5",
+        "@babel/preset-modules": "^0.1.4",
+        "@babel/types": "^7.15.4",
+        "babel-plugin-polyfill-corejs2": "^0.2.2",
+        "babel-plugin-polyfill-corejs3": "^0.2.2",
+        "babel-plugin-polyfill-regenerator": "^0.2.2",
+        "core-js-compat": "^3.16.0",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0="
+        }
+      }
+    },
+    "@babel/preset-modules": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/preset-modules/download/@babel/preset-modules-0.1.4.tgz",
+      "integrity": "sha1-Ni8raMZihClw/bXiVP/I/BwuQV4=",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+        "@babel/plugin-transform-dotall-regex": "^7.4.4",
+        "@babel/types": "^7.4.4",
+        "esutils": "^2.0.2"
+      }
+    },
+    "@babel/register": {
+      "version": "7.15.3",
+      "resolved": "https://registry.nlark.com/@babel/register/download/@babel/register-7.15.3.tgz",
+      "integrity": "sha1-a0ClSeBuwGyIWy7ELD3XEfVf51I=",
+      "requires": {
+        "clone-deep": "^4.0.1",
+        "find-cache-dir": "^2.0.0",
+        "make-dir": "^2.1.0",
+        "pirates": "^4.0.0",
+        "source-map-support": "^0.5.16"
+      }
+    },
+    "@babel/runtime": {
+      "version": "7.12.18",
+      "resolved": "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.12.18.tgz?cache=0&sync_timestamp=1630618785994&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.12.18.tgz",
+      "integrity": "sha1-rxN71+fZcFpBKzyq+ZH+aqqXgxs=",
+      "requires": {
+        "regenerator-runtime": "^0.13.4"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.13.9",
+          "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&sync_timestamp=1626993001371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz",
+          "integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I="
+        }
+      }
+    },
+    "@babel/template": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/template/download/@babel/template-7.15.4.tgz?cache=0&sync_timestamp=1630618813723&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.15.4.tgz",
+      "integrity": "sha1-UYmNNdzz+qZwxO5q/P1RfuE58ZQ=",
+      "requires": {
+        "@babel/code-frame": "^7.14.5",
+        "@babel/parser": "^7.15.4",
+        "@babel/types": "^7.15.4"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/traverse/download/@babel/traverse-7.15.4.tgz?cache=0&sync_timestamp=1630618814685&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.15.4.tgz",
+      "integrity": "sha1-/4UQNnoUS/v/VS2eGOKPPiiJwi0=",
+      "requires": {
+        "@babel/code-frame": "^7.14.5",
+        "@babel/generator": "^7.15.4",
+        "@babel/helper-function-name": "^7.15.4",
+        "@babel/helper-hoist-variables": "^7.15.4",
+        "@babel/helper-split-export-declaration": "^7.15.4",
+        "@babel/parser": "^7.15.4",
+        "@babel/types": "^7.15.4",
+        "debug": "^4.1.0",
+        "globals": "^11.1.0"
+      }
+    },
+    "@babel/types": {
+      "version": "7.15.4",
+      "resolved": "https://registry.nlark.com/@babel/types/download/@babel/types-7.15.4.tgz?cache=0&sync_timestamp=1630618811069&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.15.4.tgz",
+      "integrity": "sha1-dO64bb1nSNJ0E5ZVe5hg5X/OCg0=",
+      "requires": {
+        "@babel/helper-validator-identifier": "^7.14.9",
+        "to-fast-properties": "^2.0.0"
+      }
+    },
+    "@bcoe/v8-coverage": {
+      "version": "0.2.3",
+      "resolved": "https://registry.nlark.com/@bcoe/v8-coverage/download/@bcoe/v8-coverage-0.2.3.tgz",
+      "integrity": "sha1-daLotRy3WKdVPWgEpZMteqznXDk=",
+      "dev": true
+    },
+    "@cnakazawa/watch": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/@cnakazawa/watch/download/@cnakazawa/watch-1.0.4.tgz",
+      "integrity": "sha1-+GSuhQBND8q29QvpFBxNo2jRZWo=",
+      "dev": true,
+      "requires": {
+        "exec-sh": "^0.3.2",
+        "minimist": "^1.2.0"
+      }
+    },
+    "@dcloudio/types": {
+      "version": "2.5.6",
+      "resolved": "https://registry.nlark.com/@dcloudio/types/download/@dcloudio/types-2.5.6.tgz",
+      "integrity": "sha1-+6kMwEIOEj6rCeiV1brOsLc+uyE=",
+      "dev": true
+    },
+    "@dcloudio/uni-app-plus": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-app-plus/download/@dcloudio/uni-app-plus-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409487758&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Funi-app-plus%2Fdownload%2F%40dcloudio%2Funi-app-plus-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-qQ29OnqiXTQa1T12ViSMJaljJjI="
+    },
+    "@dcloudio/uni-automator": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-automator/download/@dcloudio/uni-automator-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-e8YzUFbLnpO59YNmQSliLcAVK7I=",
+      "dev": true,
+      "requires": {
+        "address": "^1.1.2",
+        "debug": "^4.1.1",
+        "default-gateway": "^6.0.0",
+        "kill-port": "^1.6.0",
+        "licia": "^1.21.0",
+        "postcss-selector-parser": "^6.0.2",
+        "qrcode-reader": "^1.0.4",
+        "qrcode-terminal": "^0.12.0",
+        "ws": "^7.2.3"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz",
+          "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "cssesc": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
+          "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
+          "dev": true
+        },
+        "default-gateway": {
+          "version": "6.0.3",
+          "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-6.0.3.tgz?cache=0&sync_timestamp=1610365816953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-6.0.3.tgz",
+          "integrity": "sha1-gZSUyIgFO9t0PtvzQ9bN9/KUOnE=",
+          "dev": true,
+          "requires": {
+            "execa": "^5.0.0"
+          }
+        },
+        "execa": {
+          "version": "5.1.1",
+          "resolved": "https://registry.nlark.com/execa/download/execa-5.1.1.tgz",
+          "integrity": "sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^7.0.3",
+            "get-stream": "^6.0.0",
+            "human-signals": "^2.1.0",
+            "is-stream": "^2.0.0",
+            "merge-stream": "^2.0.0",
+            "npm-run-path": "^4.0.1",
+            "onetime": "^5.1.2",
+            "signal-exit": "^3.0.3",
+            "strip-final-newline": "^2.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-6.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-6.0.1.tgz",
+          "integrity": "sha1-omLY7vZ6ztV8KFKtYWdSakPL97c=",
+          "dev": true
+        },
+        "human-signals": {
+          "version": "2.1.0",
+          "resolved": "https://registry.nlark.com/human-signals/download/human-signals-2.1.0.tgz",
+          "integrity": "sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=",
+          "dev": true
+        },
+        "is-stream": {
+          "version": "2.0.1",
+          "resolved": "https://registry.nlark.com/is-stream/download/is-stream-2.0.1.tgz",
+          "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=",
+          "dev": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1617823824094&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz",
+          "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+          "dev": true
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz",
+          "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1617889786861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz",
+          "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz",
+          "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
+          "dev": true
+        },
+        "postcss-selector-parser": {
+          "version": "6.0.6",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz?cache=0&sync_timestamp=1620752924836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.6.tgz",
+          "integrity": "sha1-LFu6gXSsL2mBq2MaQqsO5UrzMuo=",
+          "dev": true,
+          "requires": {
+            "cssesc": "^3.0.0",
+            "util-deprecate": "^1.0.2"
+          }
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz",
+          "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896304371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz",
+          "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
+          "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
+          "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        },
+        "ws": {
+          "version": "7.5.4",
+          "resolved": "https://registry.nlark.com/ws/download/ws-7.5.4.tgz?cache=0&sync_timestamp=1630167206236&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-7.5.4.tgz",
+          "integrity": "sha1-Vr+iCxZ0J+E4p3ld5o0TT+kuIfk=",
+          "dev": true
+        }
+      }
+    },
+    "@dcloudio/uni-cli-shared": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-cli-shared/download/@dcloudio/uni-cli-shared-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409488673&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Funi-cli-shared%2Fdownload%2F%40dcloudio%2Funi-cli-shared-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-dR60IEgQZv9NI/+2hu3EvrZaH6M=",
+      "dev": true,
+      "requires": {
+        "hash-sum": "^1.0.2",
+        "postcss-urlrewrite": "^0.2.2",
+        "strip-json-comments": "^2.0.1"
+      }
+    },
+    "@dcloudio/uni-h5": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-h5/download/@dcloudio/uni-h5-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409489510&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Funi-h5%2Fdownload%2F%40dcloudio%2Funi-h5-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-XlPTUiORr2mqWA4c8R6pJf8r1fk=",
+      "requires": {
+        "base64-arraybuffer": "^0.2.0",
+        "intersection-observer": "^0.7.0",
+        "pako": "^1.0.11",
+        "safe-area-insets": "^1.4.1"
+      }
+    },
+    "@dcloudio/uni-helper-json": {
+      "version": "1.0.13",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-helper-json/download/@dcloudio/uni-helper-json-1.0.13.tgz",
+      "integrity": "sha1-ToqgYtqu+zDZiXPANaewq2KDKcc="
+    },
+    "@dcloudio/uni-i18n": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-i18n/download/@dcloudio/uni-i18n-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409490120&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Funi-i18n%2Fdownload%2F%40dcloudio%2Funi-i18n-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-bWKNKKQV4+nXptIC3JPBG17Zgtk="
+    },
+    "@dcloudio/uni-migration": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-migration/download/@dcloudio/uni-migration-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-/KViUpA4bWR7haklfwTrb+Eukhg=",
+      "dev": true,
+      "requires": {
+        "commander": "^4.0.1",
+        "fs-extra": "^8.1.0",
+        "mustache": "^3.1.0",
+        "recast": "*",
+        "stricter-htmlparser2": "^3.9.6"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "4.1.1",
+          "resolved": "https://registry.nlark.com/commander/download/commander-4.1.1.tgz?cache=0&sync_timestamp=1627358254258&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-4.1.1.tgz",
+          "integrity": "sha1-n9YCvZNilOnp70aj9NaWQESxgGg=",
+          "dev": true
+        },
+        "fs-extra": {
+          "version": "8.1.0",
+          "resolved": "https://registry.nlark.com/fs-extra/download/fs-extra-8.1.0.tgz",
+          "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.2.0",
+            "jsonfile": "^4.0.0",
+            "universalify": "^0.1.0"
+          }
+        }
+      }
+    },
+    "@dcloudio/uni-mp-360": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-mp-360/download/@dcloudio/uni-mp-360-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409924298&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Funi-mp-360%2Fdownload%2F%40dcloudio%2Funi-mp-360-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-paecBRG7b+dthhUgPs7ayY7TAm4="
+    },
+    "@dcloudio/uni-mp-alipay": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-mp-alipay/download/@dcloudio/uni-mp-alipay-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409928479&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Funi-mp-alipay%2Fdownload%2F%40dcloudio%2Funi-mp-alipay-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-0kUqFq1QQe2GQ7LYo27rJaj2HIE="
+    },
+    "@dcloudio/uni-mp-baidu": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-mp-baidu/download/@dcloudio/uni-mp-baidu-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-9i0mIgcOdP4cK0jIvmg5sNPXPpk="
+    },
+    "@dcloudio/uni-mp-kuaishou": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-mp-kuaishou/download/@dcloudio/uni-mp-kuaishou-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-6Df8I3IuNM9n85xDnAc0v40mYB8="
+    },
+    "@dcloudio/uni-mp-qq": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-mp-qq/download/@dcloudio/uni-mp-qq-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-Yg8sb4VBz3V+rjE3Q+dbvvJlY6I="
+    },
+    "@dcloudio/uni-mp-toutiao": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-mp-toutiao/download/@dcloudio/uni-mp-toutiao-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-s/Zt4NJB0o1zSEHlthFYL+gFxD8="
+    },
+    "@dcloudio/uni-mp-vue": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-mp-vue/download/@dcloudio/uni-mp-vue-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-xLPz/hbiCtG1Pjk6tf5WSwltyKo="
+    },
+    "@dcloudio/uni-mp-weixin": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-mp-weixin/download/@dcloudio/uni-mp-weixin-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409930871&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Funi-mp-weixin%2Fdownload%2F%40dcloudio%2Funi-mp-weixin-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-w+bHGsrEWxWeJDgdlgARv7u97bE="
+    },
+    "@dcloudio/uni-quickapp-native": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-quickapp-native/download/@dcloudio/uni-quickapp-native-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-YzUqNaH3A955dxr+eEXvY6FLVRY=",
+      "requires": {
+        "@hap-toolkit/dsl-vue": "0.6.13",
+        "@hap-toolkit/packager": "0.6.13",
+        "@hap-toolkit/server": "0.6.13",
+        "module-alias": "^2.1.0"
+      }
+    },
+    "@dcloudio/uni-quickapp-webview": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-quickapp-webview/download/@dcloudio/uni-quickapp-webview-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409932485&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Funi-quickapp-webview%2Fdownload%2F%40dcloudio%2Funi-quickapp-webview-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-O8w9onxV8O6jQq5QAcGhS2LzZzQ="
+    },
+    "@dcloudio/uni-stat": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-stat/download/@dcloudio/uni-stat-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-PIomAywvkPd62goUZeipucEHiC8="
+    },
+    "@dcloudio/uni-template-compiler": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/uni-template-compiler/download/@dcloudio/uni-template-compiler-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409935024&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Funi-template-compiler%2Fdownload%2F%40dcloudio%2Funi-template-compiler-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-bz9SjLhZspjnf8jQf6VqNZzUmwc=",
+      "dev": true,
+      "requires": {
+        "@babel/parser": "^7.3.3",
+        "@babel/traverse": "^7.3.3",
+        "@babel/types": "^7.3.3",
+        "vue-template-compiler": "^2.6.10"
+      }
+    },
+    "@dcloudio/vue-cli-plugin-hbuilderx": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/vue-cli-plugin-hbuilderx/download/@dcloudio/vue-cli-plugin-hbuilderx-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409936539&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Fvue-cli-plugin-hbuilderx%2Fdownload%2F%40dcloudio%2Fvue-cli-plugin-hbuilderx-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-5pBCdbomOD8ShXeJYlDOnumeho0=",
+      "dev": true,
+      "requires": {
+        "acorn": "^5.2.1",
+        "css": "~2.2.1",
+        "escodegen": "^1.8.1"
+      }
+    },
+    "@dcloudio/vue-cli-plugin-uni": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/vue-cli-plugin-uni/download/@dcloudio/vue-cli-plugin-uni-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-q6DyH+jb0Hy4qh1GqCYtwnnMxDo=",
+      "dev": true,
+      "requires": {
+        "@dcloudio/uni-stat": "^2.0.0-32220210818002",
+        "buffer-json": "^2.0.0",
+        "copy-webpack-plugin": "^5.1.1",
+        "cross-env": "^5.2.0",
+        "envinfo": "^6.0.1",
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.1.0",
+        "lru-cache": "^4.1.2",
+        "mkdirp": "^0.5.1",
+        "module-alias": "^2.1.0",
+        "postcss": "^7.0.7",
+        "postcss-import": "^12.0.1",
+        "postcss-selector-parser": "^5.0.0",
+        "postcss-value-parser": "^3.3.1",
+        "strip-json-comments": "^2.0.1",
+        "update-check": "^1.5.3",
+        "webpack-merge": "^4.1.4",
+        "wrap-loader": "^0.2.0",
+        "xregexp": "4.0.0"
+      },
+      "dependencies": {
+        "cross-env": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npm.taobao.org/cross-env/download/cross-env-5.2.1.tgz",
+          "integrity": "sha1-ssdsHKet1m3IdNEXmEZglPVRs00=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^6.0.5"
+          }
+        }
+      }
+    },
+    "@dcloudio/vue-cli-plugin-uni-optimize": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/vue-cli-plugin-uni-optimize/download/@dcloudio/vue-cli-plugin-uni-optimize-2.0.0-32220210818002.tgz?cache=0&sync_timestamp=1630409938136&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40dcloudio%2Fvue-cli-plugin-uni-optimize%2Fdownload%2F%40dcloudio%2Fvue-cli-plugin-uni-optimize-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-L3v0DtsvlQdT+EDp55hvMX7epkQ=",
+      "dev": true
+    },
+    "@dcloudio/webpack-uni-mp-loader": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/webpack-uni-mp-loader/download/@dcloudio/webpack-uni-mp-loader-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-E2QyG68PIgCu7I06Z6ajdzsasao=",
+      "dev": true
+    },
+    "@dcloudio/webpack-uni-pages-loader": {
+      "version": "2.0.0-32220210818002",
+      "resolved": "https://registry.nlark.com/@dcloudio/webpack-uni-pages-loader/download/@dcloudio/webpack-uni-pages-loader-2.0.0-32220210818002.tgz",
+      "integrity": "sha1-GwQwXCDn9LdXNXbmJJIiEvBreZs=",
+      "dev": true,
+      "requires": {
+        "merge": "^1.2.1",
+        "strip-json-comments": "^2.0.1"
+      }
+    },
+    "@hap-toolkit/compiler": {
+      "version": "0.6.15",
+      "resolved": "https://registry.nlark.com/@hap-toolkit/compiler/download/@hap-toolkit/compiler-0.6.15.tgz",
+      "integrity": "sha1-2OKhby7Kj5Gy7K/+y3gSrG0brIQ=",
+      "requires": {
+        "@babel/core": "^7.3.4",
+        "@babel/plugin-transform-template-literals": "^7.2.0",
+        "@hap-toolkit/shared-utils": "0.6.15",
+        "css": "^2.2.4",
+        "css-what": "^2.1.3",
+        "escodegen": "^1.11.1",
+        "esprima": "^4.0.1",
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.2.3",
+        "parse5": "^3.0.3",
+        "source-map": "^0.7.3",
+        "webpack": "^4.29.5"
+      },
+      "dependencies": {
+        "css-what": {
+          "version": "2.1.3",
+          "resolved": "https://registry.nlark.com/css-what/download/css-what-2.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-2.1.3.tgz",
+          "integrity": "sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI="
+        },
+        "parse5": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-3.0.3.tgz",
+          "integrity": "sha1-BC95L/3TaFFVHPTp4Gazh0q0W1w=",
+          "requires": {
+            "@types/node": "*"
+          }
+        },
+        "source-map": {
+          "version": "0.7.3",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz",
+          "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M="
+        }
+      }
+    },
+    "@hap-toolkit/debugger": {
+      "version": "0.6.15",
+      "resolved": "https://registry.nlark.com/@hap-toolkit/debugger/download/@hap-toolkit/debugger-0.6.15.tgz",
+      "integrity": "sha1-UeGiB40KK8AxQSrOKMmsVQXUAOM=",
+      "requires": {
+        "@hap-toolkit/shared-utils": "0.6.15",
+        "adb-commander": "^0.1.8",
+        "adb-devices-emitter": "^0.1.8",
+        "chrome-simple-launcher": "0.1.3",
+        "koa": "^2.7.0",
+        "koa-body": "^4.0.8",
+        "koa-router": "^7.4.0",
+        "koa-static": "^5.0.0",
+        "qr-image": "^3.2.0",
+        "socket.io": "^2.2.0"
+      }
+    },
+    "@hap-toolkit/dsl-vue": {
+      "version": "0.6.13",
+      "resolved": "https://registry.nlark.com/@hap-toolkit/dsl-vue/download/@hap-toolkit/dsl-vue-0.6.13.tgz",
+      "integrity": "sha1-mJ2tXDc4PZ4PCrn7opMle7t38Fk=",
+      "requires": {
+        "@hap-toolkit/compiler": "^0.6.13",
+        "@hap-toolkit/packager": "^0.6.13",
+        "@hap-toolkit/shared-utils": "^0.6.13",
+        "css-loader": "^2.1.1",
+        "md5": "^2.2.1",
+        "mini-css-extract-plugin": "^0.5.0",
+        "url-loader": "^2.1.0",
+        "vue-loader": "^15.6.4",
+        "vue-template-compiler": "^2.6.7",
+        "webpack-sources": "^1.3.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA="
+        },
+        "css-loader": {
+          "version": "2.1.1",
+          "resolved": "https://registry.nlark.com/css-loader/download/css-loader-2.1.1.tgz?cache=0&sync_timestamp=1626725891008&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-loader%2Fdownload%2Fcss-loader-2.1.1.tgz",
+          "integrity": "sha1-2CVPcuQSuyI4u0TdZ0/770lzM+o=",
+          "requires": {
+            "camelcase": "^5.2.0",
+            "icss-utils": "^4.1.0",
+            "loader-utils": "^1.2.3",
+            "normalize-path": "^3.0.0",
+            "postcss": "^7.0.14",
+            "postcss-modules-extract-imports": "^2.0.0",
+            "postcss-modules-local-by-default": "^2.0.6",
+            "postcss-modules-scope": "^2.1.0",
+            "postcss-modules-values": "^2.0.0",
+            "postcss-value-parser": "^3.3.0",
+            "schema-utils": "^1.0.0"
+          }
+        },
+        "cssesc": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
+          "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4="
+        },
+        "mini-css-extract-plugin": {
+          "version": "0.5.0",
+          "resolved": "https://registry.nlark.com/mini-css-extract-plugin/download/mini-css-extract-plugin-0.5.0.tgz?cache=0&sync_timestamp=1630516348758&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.5.0.tgz",
+          "integrity": "sha1-rABZsCuWklFaY3EVsMyf7To1x7A=",
+          "requires": {
+            "loader-utils": "^1.1.0",
+            "schema-utils": "^1.0.0",
+            "webpack-sources": "^1.1.0"
+          }
+        },
+        "postcss-modules-local-by-default": {
+          "version": "2.0.6",
+          "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-2.0.6.tgz?cache=0&sync_timestamp=1602587625149&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-2.0.6.tgz",
+          "integrity": "sha1-3ZlT9t1Ha1/R7y2IMMiSl2C1bmM=",
+          "requires": {
+            "postcss": "^7.0.6",
+            "postcss-selector-parser": "^6.0.0",
+            "postcss-value-parser": "^3.3.1"
+          }
+        },
+        "postcss-modules-values": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-2.0.0.tgz?cache=0&sync_timestamp=1602586215124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-2.0.0.tgz",
+          "integrity": "sha1-R5tG3Axco9x/pScIUYNrnscVL2Q=",
+          "requires": {
+            "icss-replace-symbols": "^1.1.0",
+            "postcss": "^7.0.6"
+          }
+        },
+        "postcss-selector-parser": {
+          "version": "6.0.6",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz?cache=0&sync_timestamp=1620752924836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.6.tgz",
+          "integrity": "sha1-LFu6gXSsL2mBq2MaQqsO5UrzMuo=",
+          "requires": {
+            "cssesc": "^3.0.0",
+            "util-deprecate": "^1.0.2"
+          }
+        }
+      }
+    },
+    "@hap-toolkit/packager": {
+      "version": "0.6.13",
+      "resolved": "https://registry.nlark.com/@hap-toolkit/packager/download/@hap-toolkit/packager-0.6.13.tgz",
+      "integrity": "sha1-1JMCf99j9aMKLw+mLX1DgW2lbEo=",
+      "requires": {
+        "@babel/core": "^7.3.3",
+        "@babel/preset-env": "^7.3.1",
+        "@babel/register": "^7.0.0",
+        "@babel/runtime": "^7.3.1",
+        "@hap-toolkit/compiler": "^0.6.13",
+        "@hap-toolkit/shared-utils": "^0.6.13",
+        "aaptjs": "^1.3.1",
+        "babel-loader": "^8.0.5",
+        "fs-extra": "^7.0.1",
+        "hash-sum": "^1.0.2",
+        "jsrsasign": "^7.2.2",
+        "jszip": "^3.1.5",
+        "koa-bodyparser": "^4.2.1",
+        "koa-router": "^7.4.0",
+        "loader-utils": "^1.2.3",
+        "moment": "^2.24.0",
+        "qr-image": "^3.2.0",
+        "webpack": "^4.29.5"
+      }
+    },
+    "@hap-toolkit/server": {
+      "version": "0.6.13",
+      "resolved": "https://registry.nlark.com/@hap-toolkit/server/download/@hap-toolkit/server-0.6.13.tgz",
+      "integrity": "sha1-zIOktE30RWvb1BpLkl8GKi1OVDQ=",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "@hap-toolkit/debugger": "^0.6.13",
+        "@hap-toolkit/packager": "^0.6.13",
+        "@hap-toolkit/shared-utils": "^0.6.13",
+        "jszip": "^3.2.0",
+        "koa": "^2.7.0",
+        "koa-body": "^4.0.8",
+        "koa-mount": "^4.0.0",
+        "koa-router": "^7.4.0",
+        "koa-send": "^5.0.0",
+        "koa-static": "^5.0.0",
+        "opn": "^5.4.0",
+        "portfinder": "^1.0.20",
+        "qr-image": "^3.2.0"
+      }
+    },
+    "@hap-toolkit/shared-utils": {
+      "version": "0.6.15",
+      "resolved": "https://registry.nlark.com/@hap-toolkit/shared-utils/download/@hap-toolkit/shared-utils-0.6.15.tgz",
+      "integrity": "sha1-QIVwJnpzBHxGytay9xYgNhrfteA=",
+      "requires": {
+        "chalk": "^2.4.2",
+        "qrcode-terminal": "^0.12.0"
+      }
+    },
+    "@hapi/address": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz?cache=0&sync_timestamp=1603524710662&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Faddress%2Fdownload%2F%40hapi%2Faddress-2.1.4.tgz",
+      "integrity": "sha1-XWftQ/P9QaadS5/3tW58DR0KgeU=",
+      "dev": true
+    },
+    "@hapi/bourne": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz",
+      "integrity": "sha1-CnCVreoGckPOMoPhtWuKj0U7JCo=",
+      "dev": true
+    },
+    "@hapi/hoek": {
+      "version": "8.5.1",
+      "resolved": "https://registry.npm.taobao.org/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz?cache=0&sync_timestamp=1618694423634&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Fhoek%2Fdownload%2F%40hapi%2Fhoek-8.5.1.tgz",
+      "integrity": "sha1-/elgZMpEbeyMVajC8TCVewcMbgY=",
+      "dev": true
+    },
+    "@hapi/joi": {
+      "version": "15.1.1",
+      "resolved": "https://registry.npm.taobao.org/@hapi/joi/download/@hapi/joi-15.1.1.tgz",
+      "integrity": "sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc=",
+      "dev": true,
+      "requires": {
+        "@hapi/address": "2.x.x",
+        "@hapi/bourne": "1.x.x",
+        "@hapi/hoek": "8.x.x",
+        "@hapi/topo": "3.x.x"
+      }
+    },
+    "@hapi/topo": {
+      "version": "3.1.6",
+      "resolved": "https://registry.nlark.com/@hapi/topo/download/@hapi/topo-3.1.6.tgz",
+      "integrity": "sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck=",
+      "dev": true,
+      "requires": {
+        "@hapi/hoek": "^8.3.0"
+      }
+    },
+    "@icon-park/vue": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/@icon-park/vue/-/vue-1.4.1.tgz",
+      "integrity": "sha512-W2QNcxCSX+itah2oRL0xecLcinyFnqo4OqJWxklpncBuN0VDkOYNPivOZY6Nb615pYOLGdKxiv0cyYus3AZjyA==",
+      "requires": {
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+        "csstype": "^3.0.3"
+      }
+    },
+    "@intervolga/optimize-cssnano-plugin": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz",
+      "integrity": "sha1-vnx4RhKLiPapsdEmGgrQbrXA/fg=",
+      "dev": true,
+      "requires": {
+        "cssnano": "^4.0.0",
+        "cssnano-preset-default": "^4.0.0",
+        "postcss": "^7.0.0"
+      }
+    },
+    "@istanbuljs/load-nyc-config": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/@istanbuljs/load-nyc-config/download/@istanbuljs/load-nyc-config-1.1.0.tgz",
+      "integrity": "sha1-/T2x1Z7PfPEh6AZQu4ZxL5tV7O0=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^5.3.1",
+        "find-up": "^4.1.0",
+        "get-package-type": "^0.1.0",
+        "js-yaml": "^3.13.1",
+        "resolve-from": "^5.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        },
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
+          "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz",
+          "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz",
+          "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-4.0.0.tgz",
+          "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+          "dev": true
+        },
+        "resolve-from": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-5.0.0.tgz",
+          "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=",
+          "dev": true
+        }
+      }
+    },
+    "@istanbuljs/schema": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npm.taobao.org/@istanbuljs/schema/download/@istanbuljs/schema-0.1.3.tgz",
+      "integrity": "sha1-5F44TkuOwWvOL9kDr3hFD2v37Jg=",
+      "dev": true
+    },
+    "@jest/console": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/@jest/console/download/@jest/console-25.5.0.tgz",
+      "integrity": "sha1-dwgAeZ1RDzcynFCKnt0Le0R9mrs=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "chalk": "^3.0.0",
+        "jest-message-util": "^25.5.0",
+        "jest-util": "^25.5.0",
+        "slash": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+          "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "@jest/core": {
+      "version": "25.5.4",
+      "resolved": "https://registry.nlark.com/@jest/core/download/@jest/core-25.5.4.tgz?cache=0&sync_timestamp=1630058522502&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40jest%2Fcore%2Fdownload%2F%40jest%2Fcore-25.5.4.tgz",
+      "integrity": "sha1-PvdBL3M5IQ8APN82ZGu8p4bv57Q=",
+      "dev": true,
+      "requires": {
+        "@jest/console": "^25.5.0",
+        "@jest/reporters": "^25.5.1",
+        "@jest/test-result": "^25.5.0",
+        "@jest/transform": "^25.5.1",
+        "@jest/types": "^25.5.0",
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^3.0.0",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.2.4",
+        "jest-changed-files": "^25.5.0",
+        "jest-config": "^25.5.4",
+        "jest-haste-map": "^25.5.1",
+        "jest-message-util": "^25.5.0",
+        "jest-regex-util": "^25.2.6",
+        "jest-resolve": "^25.5.1",
+        "jest-resolve-dependencies": "^25.5.4",
+        "jest-runner": "^25.5.4",
+        "jest-runtime": "^25.5.4",
+        "jest-snapshot": "^25.5.1",
+        "jest-util": "^25.5.0",
+        "jest-validate": "^25.5.0",
+        "jest-watcher": "^25.5.0",
+        "micromatch": "^4.0.2",
+        "p-each-series": "^2.1.0",
+        "realpath-native": "^2.0.0",
+        "rimraf": "^3.0.0",
+        "slash": "^3.0.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.4",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054885525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz",
+          "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.1",
+            "picomatch": "^2.2.3"
+          }
+        },
+        "rimraf": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz",
+          "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+          "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "@jest/environment": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/@jest/environment/download/@jest/environment-25.5.0.tgz?cache=0&sync_timestamp=1630058517913&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40jest%2Fenvironment%2Fdownload%2F%40jest%2Fenvironment-25.5.0.tgz",
+      "integrity": "sha1-qjOwwhpxbGVoZjjn74FsDjoMezc=",
+      "dev": true,
+      "requires": {
+        "@jest/fake-timers": "^25.5.0",
+        "@jest/types": "^25.5.0",
+        "jest-mock": "^25.5.0"
+      }
+    },
+    "@jest/fake-timers": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/@jest/fake-timers/download/@jest/fake-timers-25.5.0.tgz",
+      "integrity": "sha1-RjUuAFM8AkyQwrwq2fKVn38RQYU=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "jest-message-util": "^25.5.0",
+        "jest-mock": "^25.5.0",
+        "jest-util": "^25.5.0",
+        "lolex": "^5.0.0"
+      }
+    },
+    "@jest/globals": {
+      "version": "25.5.2",
+      "resolved": "https://registry.nlark.com/@jest/globals/download/@jest/globals-25.5.2.tgz",
+      "integrity": "sha1-XkXp3o0ihxavMlfus5kcwuFiyog=",
+      "dev": true,
+      "requires": {
+        "@jest/environment": "^25.5.0",
+        "@jest/types": "^25.5.0",
+        "expect": "^25.5.0"
+      }
+    },
+    "@jest/reporters": {
+      "version": "25.5.1",
+      "resolved": "https://registry.nlark.com/@jest/reporters/download/@jest/reporters-25.5.1.tgz",
+      "integrity": "sha1-y2hrzGgPZkwtuvfthz6TqmgRU4s=",
+      "dev": true,
+      "requires": {
+        "@bcoe/v8-coverage": "^0.2.3",
+        "@jest/console": "^25.5.0",
+        "@jest/test-result": "^25.5.0",
+        "@jest/transform": "^25.5.1",
+        "@jest/types": "^25.5.0",
+        "chalk": "^3.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "exit": "^0.1.2",
+        "glob": "^7.1.2",
+        "graceful-fs": "^4.2.4",
+        "istanbul-lib-coverage": "^3.0.0",
+        "istanbul-lib-instrument": "^4.0.0",
+        "istanbul-lib-report": "^3.0.0",
+        "istanbul-lib-source-maps": "^4.0.0",
+        "istanbul-reports": "^3.0.2",
+        "jest-haste-map": "^25.5.1",
+        "jest-resolve": "^25.5.1",
+        "jest-util": "^25.5.0",
+        "jest-worker": "^25.5.0",
+        "node-notifier": "^6.0.0",
+        "slash": "^3.0.0",
+        "source-map": "^0.6.0",
+        "string-length": "^3.1.0",
+        "terminal-link": "^2.0.0",
+        "v8-to-istanbul": "^4.1.3"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+          "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "@jest/source-map": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/@jest/source-map/download/@jest/source-map-25.5.0.tgz?cache=0&sync_timestamp=1624900517464&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40jest%2Fsource-map%2Fdownload%2F%40jest%2Fsource-map-25.5.0.tgz",
+      "integrity": "sha1-31wg1gUKopLCxtPw0sdgavMVvRs=",
+      "dev": true,
+      "requires": {
+        "callsites": "^3.0.0",
+        "graceful-fs": "^4.2.4",
+        "source-map": "^0.6.0"
+      },
+      "dependencies": {
+        "callsites": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/callsites/download/callsites-3.1.0.tgz",
+          "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=",
+          "dev": true
+        }
+      }
+    },
+    "@jest/test-result": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/@jest/test-result/download/@jest/test-result-25.5.0.tgz",
+      "integrity": "sha1-E5oEMjDN7/6botg0Gyfy78d86Hw=",
+      "dev": true,
+      "requires": {
+        "@jest/console": "^25.5.0",
+        "@jest/types": "^25.5.0",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "collect-v8-coverage": "^1.0.0"
+      }
+    },
+    "@jest/test-sequencer": {
+      "version": "25.5.4",
+      "resolved": "https://registry.nlark.com/@jest/test-sequencer/download/@jest/test-sequencer-25.5.4.tgz",
+      "integrity": "sha1-m05oWzaVTDjQ8FLlltKBYb3Itzc=",
+      "dev": true,
+      "requires": {
+        "@jest/test-result": "^25.5.0",
+        "graceful-fs": "^4.2.4",
+        "jest-haste-map": "^25.5.1",
+        "jest-runner": "^25.5.4",
+        "jest-runtime": "^25.5.4"
+      }
+    },
+    "@jest/transform": {
+      "version": "25.5.1",
+      "resolved": "https://registry.nlark.com/@jest/transform/download/@jest/transform-25.5.1.tgz",
+      "integrity": "sha1-BGndwXaZ3Sv5hdtV+g+5MJ9cLbM=",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.1.0",
+        "@jest/types": "^25.5.0",
+        "babel-plugin-istanbul": "^6.0.0",
+        "chalk": "^3.0.0",
+        "convert-source-map": "^1.4.0",
+        "fast-json-stable-stringify": "^2.0.0",
+        "graceful-fs": "^4.2.4",
+        "jest-haste-map": "^25.5.1",
+        "jest-regex-util": "^25.2.6",
+        "jest-util": "^25.5.0",
+        "micromatch": "^4.0.2",
+        "pirates": "^4.0.1",
+        "realpath-native": "^2.0.0",
+        "slash": "^3.0.0",
+        "source-map": "^0.6.1",
+        "write-file-atomic": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.4",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054885525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz",
+          "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.1",
+            "picomatch": "^2.2.3"
+          }
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+          "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "@jest/types": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/@jest/types/download/@jest/types-25.5.0.tgz",
+      "integrity": "sha1-TWpHk/e5WZ/DaAh3uFapfbzPKp0=",
+      "dev": true,
+      "requires": {
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^1.1.1",
+        "@types/yargs": "^15.0.0",
+        "chalk": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "@mrmlnc/readdir-enhanced": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz",
+      "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=",
+      "dev": true,
+      "requires": {
+        "call-me-maybe": "^1.0.1",
+        "glob-to-regexp": "^0.3.0"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "1.1.3",
+      "resolved": "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&sync_timestamp=1622792772584&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz",
+      "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=",
+      "dev": true
+    },
+    "@sinonjs/commons": {
+      "version": "1.8.3",
+      "resolved": "https://registry.nlark.com/@sinonjs/commons/download/@sinonjs/commons-1.8.3.tgz",
+      "integrity": "sha1-OALd0hpQqUm2ch3dcto25n5/Gy0=",
+      "dev": true,
+      "requires": {
+        "type-detect": "4.0.8"
+      }
+    },
+    "@soda/friendly-errors-webpack-plugin": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.0.tgz?cache=0&sync_timestamp=1607927401282&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Ffriendly-errors-webpack-plugin%2Fdownload%2F%40soda%2Ffriendly-errors-webpack-plugin-1.8.0.tgz",
+      "integrity": "sha1-hHUdgqkwGdXJLAzw5FrFkIfNIkA=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "error-stack-parser": "^2.0.2",
+        "string-width": "^2.0.0",
+        "strip-ansi": "^5"
+      },
+      "dependencies": {
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
+      }
+    },
+    "@soda/get-current-script": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/@soda/get-current-script/download/@soda/get-current-script-1.0.2.tgz",
+      "integrity": "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=",
+      "dev": true
+    },
+    "@types/babel__core": {
+      "version": "7.1.16",
+      "resolved": "https://registry.nlark.com/@types/babel__core/download/@types/babel__core-7.1.16.tgz",
+      "integrity": "sha1-vBLHS31l6C0ph2tdC69cYlrFhwI=",
+      "dev": true,
+      "requires": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0",
+        "@types/babel__generator": "*",
+        "@types/babel__template": "*",
+        "@types/babel__traverse": "*"
+      }
+    },
+    "@types/babel__generator": {
+      "version": "7.6.3",
+      "resolved": "https://registry.nlark.com/@types/babel__generator/download/@types/babel__generator-7.6.3.tgz",
+      "integrity": "sha1-9Fa0ss55E392iqEw0kI9LwzPq6U=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@types/babel__template": {
+      "version": "7.4.1",
+      "resolved": "https://registry.nlark.com/@types/babel__template/download/@types/babel__template-7.4.1.tgz?cache=0&sync_timestamp=1629706734879&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fbabel__template%2Fdownload%2F%40types%2Fbabel__template-7.4.1.tgz",
+      "integrity": "sha1-PRpI/Z1sDt/Vby/1eNrtSPNsiWk=",
+      "dev": true,
+      "requires": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@types/babel__traverse": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@types/babel__traverse/download/@types/babel__traverse-7.14.2.tgz?cache=0&sync_timestamp=1629706733915&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fbabel__traverse%2Fdownload%2F%40types%2Fbabel__traverse-7.14.2.tgz",
+      "integrity": "sha1-/81HC7s/i/MEgWePtVAieMqDOkM=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.3.0"
+      }
+    },
+    "@types/body-parser": {
+      "version": "1.19.1",
+      "resolved": "https://registry.nlark.com/@types/body-parser/download/@types/body-parser-1.19.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fbody-parser%2Fdownload%2F%40types%2Fbody-parser-1.19.1.tgz",
+      "integrity": "sha1-DAF0xCp9AXuBgwPUtdlpywt1kpw=",
+      "dev": true,
+      "requires": {
+        "@types/connect": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/connect": {
+      "version": "3.4.35",
+      "resolved": "https://registry.nlark.com/@types/connect/download/@types/connect-3.4.35.tgz",
+      "integrity": "sha1-X89q5EXkAh0fwiGaSHPMc6O7KtE=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/connect-history-api-fallback": {
+      "version": "1.3.5",
+      "resolved": "https://registry.nlark.com/@types/connect-history-api-fallback/download/@types/connect-history-api-fallback-1.3.5.tgz?cache=0&sync_timestamp=1629707001404&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fconnect-history-api-fallback%2Fdownload%2F%40types%2Fconnect-history-api-fallback-1.3.5.tgz",
+      "integrity": "sha1-0feooJ0O1aV67lrpwYq5uAMgXa4=",
+      "dev": true,
+      "requires": {
+        "@types/express-serve-static-core": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/express": {
+      "version": "4.17.13",
+      "resolved": "https://registry.nlark.com/@types/express/download/@types/express-4.17.13.tgz?cache=0&sync_timestamp=1629707695416&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fexpress%2Fdownload%2F%40types%2Fexpress-4.17.13.tgz",
+      "integrity": "sha1-p24plXKJmbq1GjP6vOHXBaNwkDQ=",
+      "dev": true,
+      "requires": {
+        "@types/body-parser": "*",
+        "@types/express-serve-static-core": "^4.17.18",
+        "@types/qs": "*",
+        "@types/serve-static": "*"
+      }
+    },
+    "@types/express-serve-static-core": {
+      "version": "4.17.24",
+      "resolved": "https://registry.nlark.com/@types/express-serve-static-core/download/@types/express-serve-static-core-4.17.24.tgz",
+      "integrity": "sha1-6kH5O/fg1ZzVp2ZlBo7WqraBXAc=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*"
+      }
+    },
+    "@types/formidable": {
+      "version": "1.2.3",
+      "resolved": "https://registry.nlark.com/@types/formidable/download/@types/formidable-1.2.3.tgz",
+      "integrity": "sha1-me5f1Or7qpVEjItnDl6OOJ8q84A=",
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/glob": {
+      "version": "7.1.4",
+      "resolved": "https://registry.nlark.com/@types/glob/download/@types/glob-7.1.4.tgz",
+      "integrity": "sha1-6lniHS7lxReRTLS8jkFTuZ5WZnI=",
+      "dev": true,
+      "requires": {
+        "@types/minimatch": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/graceful-fs": {
+      "version": "4.1.5",
+      "resolved": "https://registry.nlark.com/@types/graceful-fs/download/@types/graceful-fs-4.1.5.tgz?cache=0&sync_timestamp=1629708002127&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fgraceful-fs%2Fdownload%2F%40types%2Fgraceful-fs-4.1.5.tgz",
+      "integrity": "sha1-If+6DZjaQ1DbZIkfkqnl2zzbThU=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/http-proxy": {
+      "version": "1.17.7",
+      "resolved": "https://registry.nlark.com/@types/http-proxy/download/@types/http-proxy-1.17.7.tgz",
+      "integrity": "sha1-MOqFzCyGg2g1Kjfw0NNYHiSDTG8=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/istanbul-lib-coverage": {
+      "version": "2.0.3",
+      "resolved": "https://registry.nlark.com/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.3.tgz",
+      "integrity": "sha1-S6jdtyAiH0MuRDvV+RF/0iz9R2I=",
+      "dev": true
+    },
+    "@types/istanbul-lib-report": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/@types/istanbul-lib-report/download/@types/istanbul-lib-report-3.0.0.tgz",
+      "integrity": "sha1-wUwk8Y6oGQwRjudWK3/5mjZVJoY=",
+      "dev": true,
+      "requires": {
+        "@types/istanbul-lib-coverage": "*"
+      }
+    },
+    "@types/istanbul-reports": {
+      "version": "1.1.2",
+      "resolved": "https://registry.nlark.com/@types/istanbul-reports/download/@types/istanbul-reports-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fistanbul-reports%2Fdownload%2F%40types%2Fistanbul-reports-1.1.2.tgz",
+      "integrity": "sha1-6HXMaJ5HvOVJ7IHz315vbxHPrrI=",
+      "dev": true,
+      "requires": {
+        "@types/istanbul-lib-coverage": "*",
+        "@types/istanbul-lib-report": "*"
+      }
+    },
+    "@types/json-schema": {
+      "version": "7.0.9",
+      "resolved": "https://registry.nlark.com/@types/json-schema/download/@types/json-schema-7.0.9.tgz",
+      "integrity": "sha1-l+3JA36gw4WFMgsolk3eOznkZg0="
+    },
+    "@types/lodash": {
+      "version": "4.14.172",
+      "resolved": "https://registry.nlark.com/@types/lodash/download/@types/lodash-4.14.172.tgz?cache=0&sync_timestamp=1629708216703&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.172.tgz",
+      "integrity": "sha1-qtd0wo57/Xpn3iVAjgPuWow9Aoo="
+    },
+    "@types/mime": {
+      "version": "1.3.2",
+      "resolved": "https://registry.nlark.com/@types/mime/download/@types/mime-1.3.2.tgz?cache=0&sync_timestamp=1629708403517&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fmime%2Fdownload%2F%40types%2Fmime-1.3.2.tgz",
+      "integrity": "sha1-k+Jb+e51/g/YC1lLxP6w6GIRG1o=",
+      "dev": true
+    },
+    "@types/minimatch": {
+      "version": "3.0.5",
+      "resolved": "https://registry.nlark.com/@types/minimatch/download/@types/minimatch-3.0.5.tgz?cache=0&sync_timestamp=1629708337307&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.5.tgz",
+      "integrity": "sha1-EAHMXmo3BLg8I2An538vWOoBD0A=",
+      "dev": true
+    },
+    "@types/minimist": {
+      "version": "1.2.2",
+      "resolved": "https://registry.nlark.com/@types/minimist/download/@types/minimist-1.2.2.tgz?cache=0&sync_timestamp=1629708337116&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fminimist%2Fdownload%2F%40types%2Fminimist-1.2.2.tgz",
+      "integrity": "sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w=",
+      "dev": true
+    },
+    "@types/node": {
+      "version": "16.7.11",
+      "resolved": "https://registry.nlark.com/@types/node/download/@types/node-16.7.11.tgz?cache=0&sync_timestamp=1630966509413&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-16.7.11.tgz",
+      "integrity": "sha1-WHezqzWa8lH9QTUXvi1CZbf+qak="
+    },
+    "@types/normalize-package-data": {
+      "version": "2.4.1",
+      "resolved": "https://registry.nlark.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz?cache=0&sync_timestamp=1629708441689&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.1.tgz",
+      "integrity": "sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE=",
+      "dev": true
+    },
+    "@types/parse-json": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+      "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
+      "dev": true,
+      "optional": true
+    },
+    "@types/prettier": {
+      "version": "1.19.1",
+      "resolved": "https://registry.nlark.com/@types/prettier/download/@types/prettier-1.19.1.tgz",
+      "integrity": "sha1-M1CYSfjmeeSt0ViVn9sIZEDpVT8=",
+      "dev": true
+    },
+    "@types/q": {
+      "version": "1.5.5",
+      "resolved": "https://registry.nlark.com/@types/q/download/@types/q-1.5.5.tgz?cache=0&sync_timestamp=1629708761534&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.5.tgz",
+      "integrity": "sha1-daKo59irSyMEFFBdkjNdHctTpt8=",
+      "dev": true
+    },
+    "@types/qs": {
+      "version": "6.9.7",
+      "resolved": "https://registry.nlark.com/@types/qs/download/@types/qs-6.9.7.tgz?cache=0&sync_timestamp=1629708766601&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fqs%2Fdownload%2F%40types%2Fqs-6.9.7.tgz",
+      "integrity": "sha1-Y7t9Bn2xB8weRXwwO8JdUR/r9ss=",
+      "dev": true
+    },
+    "@types/range-parser": {
+      "version": "1.2.4",
+      "resolved": "https://registry.nlark.com/@types/range-parser/download/@types/range-parser-1.2.4.tgz?cache=0&sync_timestamp=1629708894355&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Frange-parser%2Fdownload%2F%40types%2Frange-parser-1.2.4.tgz",
+      "integrity": "sha1-zWZ7z90CUhOq+3ylkVqTJZCs3Nw=",
+      "dev": true
+    },
+    "@types/serve-static": {
+      "version": "1.13.10",
+      "resolved": "https://registry.nlark.com/@types/serve-static/download/@types/serve-static-1.13.10.tgz?cache=0&sync_timestamp=1629709282856&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fserve-static%2Fdownload%2F%40types%2Fserve-static-1.13.10.tgz",
+      "integrity": "sha1-9eDOh5fS18xevtpIpSyWxPpHqNk=",
+      "dev": true,
+      "requires": {
+        "@types/mime": "^1",
+        "@types/node": "*"
+      }
+    },
+    "@types/source-list-map": {
+      "version": "0.1.2",
+      "resolved": "https://registry.nlark.com/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz?cache=0&sync_timestamp=1629709261080&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fsource-list-map%2Fdownload%2F%40types%2Fsource-list-map-0.1.2.tgz",
+      "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=",
+      "dev": true
+    },
+    "@types/stack-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz",
+      "integrity": "sha1-CoUdO9lkmPolwzq3J47TvWXwbD4=",
+      "dev": true
+    },
+    "@types/tapable": {
+      "version": "1.0.8",
+      "resolved": "https://registry.nlark.com/@types/tapable/download/@types/tapable-1.0.8.tgz?cache=0&sync_timestamp=1629709441343&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Ftapable%2Fdownload%2F%40types%2Ftapable-1.0.8.tgz",
+      "integrity": "sha1-uUpDkchWZse3Mpn9OtedT6pDUxA=",
+      "dev": true
+    },
+    "@types/uglify-js": {
+      "version": "3.13.1",
+      "resolved": "https://registry.nlark.com/@types/uglify-js/download/@types/uglify-js-3.13.1.tgz",
+      "integrity": "sha1-XoienoHpQkXHW2RQYA4cXqKHiuo=",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.6.1"
+      }
+    },
+    "@types/webpack": {
+      "version": "4.41.30",
+      "resolved": "https://registry.nlark.com/@types/webpack/download/@types/webpack-4.41.30.tgz?cache=0&sync_timestamp=1629709718163&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fwebpack%2Fdownload%2F%40types%2Fwebpack-4.41.30.tgz",
+      "integrity": "sha1-/T220NQeFFqO7q/NPEp8zekGjdw=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/tapable": "^1",
+        "@types/uglify-js": "*",
+        "@types/webpack-sources": "*",
+        "anymatch": "^3.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "@types/webpack-dev-server": {
+      "version": "3.11.6",
+      "resolved": "https://registry.nlark.com/@types/webpack-dev-server/download/@types/webpack-dev-server-3.11.6.tgz?cache=0&sync_timestamp=1630452240230&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fwebpack-dev-server%2Fdownload%2F%40types%2Fwebpack-dev-server-3.11.6.tgz",
+      "integrity": "sha1-2IiM/S8GMCA+E9PteDOk0RuKNNw=",
+      "dev": true,
+      "requires": {
+        "@types/connect-history-api-fallback": "*",
+        "@types/express": "*",
+        "@types/serve-static": "*",
+        "@types/webpack": "^4",
+        "http-proxy-middleware": "^1.0.0"
+      }
+    },
+    "@types/webpack-env": {
+      "version": "1.16.2",
+      "resolved": "https://registry.nlark.com/@types/webpack-env/download/@types/webpack-env-1.16.2.tgz",
+      "integrity": "sha1-jbUUsFnBsq4Uzp17syUpbeapoPo=",
+      "dev": true
+    },
+    "@types/webpack-sources": {
+      "version": "3.2.0",
+      "resolved": "https://registry.nlark.com/@types/webpack-sources/download/@types/webpack-sources-3.2.0.tgz?cache=0&sync_timestamp=1629709756861&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fwebpack-sources%2Fdownload%2F%40types%2Fwebpack-sources-3.2.0.tgz",
+      "integrity": "sha1-FtdZuglsKJA0smVT0t8b9FJI04s=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/source-list-map": "*",
+        "source-map": "^0.7.3"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.7.3",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz",
+          "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=",
+          "dev": true
+        }
+      }
+    },
+    "@types/yargs": {
+      "version": "15.0.14",
+      "resolved": "https://registry.nlark.com/@types/yargs/download/@types/yargs-15.0.14.tgz?cache=0&sync_timestamp=1629709792352&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fyargs%2Fdownload%2F%40types%2Fyargs-15.0.14.tgz",
+      "integrity": "sha1-Jtgh3biecEkhYLZtEKDrbfj2+wY=",
+      "dev": true,
+      "requires": {
+        "@types/yargs-parser": "*"
+      }
+    },
+    "@types/yargs-parser": {
+      "version": "20.2.1",
+      "resolved": "https://registry.nlark.com/@types/yargs-parser/download/@types/yargs-parser-20.2.1.tgz?cache=0&sync_timestamp=1629709781719&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fyargs-parser%2Fdownload%2F%40types%2Fyargs-parser-20.2.1.tgz",
+      "integrity": "sha1-O5ziSJkZ2eT+pDm3aRarw0st8Sk=",
+      "dev": true
+    },
+    "@vue/babel-helper-vue-jsx-merge-props": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
+      "integrity": "sha1-MWJKelBfsU2h1YAjclpMXycOaoE="
+    },
+    "@vue/babel-helper-vue-transform-on": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-transform-on/download/@vue/babel-helper-vue-transform-on-1.0.2.tgz?cache=0&sync_timestamp=1610812436327&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-transform-on%2Fdownload%2F%40vue%2Fbabel-helper-vue-transform-on-1.0.2.tgz",
+      "integrity": "sha1-m5xpHNBvyFUiGiR1w8yDHXdLx9w=",
+      "dev": true
+    },
+    "@vue/babel-plugin-jsx": {
+      "version": "1.0.7",
+      "resolved": "https://registry.nlark.com/@vue/babel-plugin-jsx/download/@vue/babel-plugin-jsx-1.0.7.tgz",
+      "integrity": "sha1-ItbITvjbWsE9uXFHalXMUhWQIWg=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.0.0",
+        "@babel/template": "^7.0.0",
+        "@babel/traverse": "^7.0.0",
+        "@babel/types": "^7.0.0",
+        "@vue/babel-helper-vue-transform-on": "^1.0.2",
+        "camelcase": "^6.0.0",
+        "html-tags": "^3.1.0",
+        "svg-tags": "^1.0.0"
+      }
+    },
+    "@vue/babel-plugin-transform-vue-jsx": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-plugin-transform-vue-jsx/download/@vue/babel-plugin-transform-vue-jsx-1.2.1.tgz?cache=0&sync_timestamp=1602851123835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-plugin-transform-vue-jsx%2Fdownload%2F%40vue%2Fbabel-plugin-transform-vue-jsx-1.2.1.tgz",
+      "integrity": "sha1-ZGBGxlLC8CQnJ/NFGdkXsGQEHtc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "html-tags": "^2.0.0",
+        "lodash.kebabcase": "^4.1.1",
+        "svg-tags": "^1.0.0"
+      },
+      "dependencies": {
+        "html-tags": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz",
+          "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/babel-preset-app": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/babel-preset-app/download/@vue/babel-preset-app-4.5.13.tgz?cache=0&sync_timestamp=1628579324855&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fbabel-preset-app%2Fdownload%2F%40vue%2Fbabel-preset-app-4.5.13.tgz",
+      "integrity": "sha1-y0dTIeTHP38RDawppIwqnLgK/rY=",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.11.0",
+        "@babel/helper-compilation-targets": "^7.9.6",
+        "@babel/helper-module-imports": "^7.8.3",
+        "@babel/plugin-proposal-class-properties": "^7.8.3",
+        "@babel/plugin-proposal-decorators": "^7.8.3",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+        "@babel/plugin-syntax-jsx": "^7.8.3",
+        "@babel/plugin-transform-runtime": "^7.11.0",
+        "@babel/preset-env": "^7.11.0",
+        "@babel/runtime": "^7.11.0",
+        "@vue/babel-plugin-jsx": "^1.0.3",
+        "@vue/babel-preset-jsx": "^1.2.4",
+        "babel-plugin-dynamic-import-node": "^2.3.3",
+        "core-js": "^3.6.5",
+        "core-js-compat": "^3.6.5",
+        "semver": "^6.1.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/babel-preset-jsx": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-jsx/download/@vue/babel-preset-jsx-1.2.4.tgz?cache=0&sync_timestamp=1603806765718&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-preset-jsx%2Fdownload%2F%40vue%2Fbabel-preset-jsx-1.2.4.tgz",
+      "integrity": "sha1-kv6nnbbxOwHoDToAmeKSS9y+Toc=",
+      "dev": true,
+      "requires": {
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+        "@vue/babel-sugar-composition-api-inject-h": "^1.2.1",
+        "@vue/babel-sugar-composition-api-render-instance": "^1.2.4",
+        "@vue/babel-sugar-functional-vue": "^1.2.2",
+        "@vue/babel-sugar-inject-h": "^1.2.2",
+        "@vue/babel-sugar-v-model": "^1.2.3",
+        "@vue/babel-sugar-v-on": "^1.2.3"
+      }
+    },
+    "@vue/babel-sugar-composition-api-inject-h": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-composition-api-inject-h/download/@vue/babel-sugar-composition-api-inject-h-1.2.1.tgz?cache=0&sync_timestamp=1602851168666&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-composition-api-inject-h%2Fdownload%2F%40vue%2Fbabel-sugar-composition-api-inject-h-1.2.1.tgz",
+      "integrity": "sha1-BdbgxDJxDjdYKyvppgSbaJtvA+s=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-composition-api-render-instance": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-composition-api-render-instance/download/@vue/babel-sugar-composition-api-render-instance-1.2.4.tgz?cache=0&sync_timestamp=1603806931432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-composition-api-render-instance%2Fdownload%2F%40vue%2Fbabel-sugar-composition-api-render-instance-1.2.4.tgz",
+      "integrity": "sha1-5MvGmXw0T6wnF4WteikyXFHWjRk=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-functional-vue": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-functional-vue/download/@vue/babel-sugar-functional-vue-1.2.2.tgz?cache=0&sync_timestamp=1602929625505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-functional-vue%2Fdownload%2F%40vue%2Fbabel-sugar-functional-vue-1.2.2.tgz",
+      "integrity": "sha1-JnqayNeHyW7b8Dzj85LEnam9Jlg=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-inject-h": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.2.2.tgz?cache=0&sync_timestamp=1602929625678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-inject-h%2Fdownload%2F%40vue%2Fbabel-sugar-inject-h-1.2.2.tgz",
+      "integrity": "sha1-1zjTyJM2fshJHcu2abAAkZKT46o=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-v-model": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.2.3.tgz?cache=0&sync_timestamp=1603184320789&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-v-model%2Fdownload%2F%40vue%2Fbabel-sugar-v-model-1.2.3.tgz",
+      "integrity": "sha1-+h8pulHr8KoabDX6ZtU5vEWaGPI=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+        "camelcase": "^5.0.0",
+        "html-tags": "^2.0.0",
+        "svg-tags": "^1.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        },
+        "html-tags": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz",
+          "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/babel-sugar-v-on": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-on/download/@vue/babel-sugar-v-on-1.2.3.tgz?cache=0&sync_timestamp=1603181880042&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-v-on%2Fdownload%2F%40vue%2Fbabel-sugar-v-on-1.2.3.tgz",
+      "integrity": "sha1-NCNnF4WGpp85LwS/ujICHQKROto=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+        "camelcase": "^5.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/cli-overlay": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-overlay/download/@vue/cli-overlay-4.5.13.tgz?cache=0&sync_timestamp=1628579301004&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-overlay%2Fdownload%2F%40vue%2Fcli-overlay-4.5.13.tgz",
+      "integrity": "sha1-Tx/SFhvo9p1suoB58/DX3E3uR6c=",
+      "dev": true
+    },
+    "@vue/cli-plugin-babel": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-4.5.13.tgz?cache=0&sync_timestamp=1628579326004&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-plugin-babel%2Fdownload%2F%40vue%2Fcli-plugin-babel-4.5.13.tgz",
+      "integrity": "sha1-qJxILtzE6h0TVkXOxQKn9f1MMOc=",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.11.0",
+        "@vue/babel-preset-app": "^4.5.13",
+        "@vue/cli-shared-utils": "^4.5.13",
+        "babel-loader": "^8.1.0",
+        "cache-loader": "^4.1.0",
+        "thread-loader": "^2.1.3",
+        "webpack": "^4.0.0"
+      }
+    },
+    "@vue/cli-plugin-router": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-router/download/@vue/cli-plugin-router-4.5.13.tgz",
+      "integrity": "sha1-C2fIiYor8TKUGRmiouXzqsvZ/74=",
+      "dev": true,
+      "requires": {
+        "@vue/cli-shared-utils": "^4.5.13"
+      }
+    },
+    "@vue/cli-plugin-typescript": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-typescript/download/@vue/cli-plugin-typescript-4.5.13.tgz?cache=0&sync_timestamp=1628579630974&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-plugin-typescript%2Fdownload%2F%40vue%2Fcli-plugin-typescript-4.5.13.tgz",
+      "integrity": "sha1-9RT2YeFvkJaompym5potdixthGQ=",
+      "dev": true,
+      "requires": {
+        "@types/webpack-env": "^1.15.2",
+        "@vue/cli-shared-utils": "^4.5.13",
+        "cache-loader": "^4.1.0",
+        "fork-ts-checker-webpack-plugin": "^3.1.1",
+        "fork-ts-checker-webpack-plugin-v5": "npm:fork-ts-checker-webpack-plugin@^5.0.11",
+        "globby": "^9.2.0",
+        "thread-loader": "^2.1.3",
+        "ts-loader": "^6.2.2",
+        "tslint": "^5.20.1",
+        "webpack": "^4.0.0",
+        "yorkie": "^2.0.0"
+      },
+      "dependencies": {
+        "globby": {
+          "version": "9.2.0",
+          "resolved": "https://registry.nlark.com/globby/download/globby-9.2.0.tgz",
+          "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=",
+          "dev": true,
+          "requires": {
+            "@types/glob": "^7.1.1",
+            "array-union": "^1.0.2",
+            "dir-glob": "^2.2.2",
+            "fast-glob": "^2.2.6",
+            "glob": "^7.1.3",
+            "ignore": "^4.0.3",
+            "pify": "^4.0.1",
+            "slash": "^2.0.0"
+          }
+        },
+        "ignore": {
+          "version": "4.0.6",
+          "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz",
+          "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+          "dev": true
+        },
+        "slash": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz",
+          "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/cli-plugin-vuex": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.13.tgz",
+      "integrity": "sha1-mGRti8HmnPbGpsui/tPqzgNWw2A=",
+      "dev": true
+    },
+    "@vue/cli-service": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-service/download/@vue/cli-service-4.5.13.tgz?cache=0&sync_timestamp=1628579326809&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-service%2Fdownload%2F%40vue%2Fcli-service-4.5.13.tgz",
+      "integrity": "sha1-oJ5oSoAWhLbiTlQUrTBlCXDuye0=",
+      "dev": true,
+      "requires": {
+        "@intervolga/optimize-cssnano-plugin": "^1.0.5",
+        "@soda/friendly-errors-webpack-plugin": "^1.7.1",
+        "@soda/get-current-script": "^1.0.0",
+        "@types/minimist": "^1.2.0",
+        "@types/webpack": "^4.0.0",
+        "@types/webpack-dev-server": "^3.11.0",
+        "@vue/cli-overlay": "^4.5.13",
+        "@vue/cli-plugin-router": "^4.5.13",
+        "@vue/cli-plugin-vuex": "^4.5.13",
+        "@vue/cli-shared-utils": "^4.5.13",
+        "@vue/component-compiler-utils": "^3.1.2",
+        "@vue/preload-webpack-plugin": "^1.1.0",
+        "@vue/web-component-wrapper": "^1.2.0",
+        "acorn": "^7.4.0",
+        "acorn-walk": "^7.1.1",
+        "address": "^1.1.2",
+        "autoprefixer": "^9.8.6",
+        "browserslist": "^4.12.0",
+        "cache-loader": "^4.1.0",
+        "case-sensitive-paths-webpack-plugin": "^2.3.0",
+        "cli-highlight": "^2.1.4",
+        "clipboardy": "^2.3.0",
+        "cliui": "^6.0.0",
+        "copy-webpack-plugin": "^5.1.1",
+        "css-loader": "^3.5.3",
+        "cssnano": "^4.1.10",
+        "debug": "^4.1.1",
+        "default-gateway": "^5.0.5",
+        "dotenv": "^8.2.0",
+        "dotenv-expand": "^5.1.0",
+        "file-loader": "^4.2.0",
+        "fs-extra": "^7.0.1",
+        "globby": "^9.2.0",
+        "hash-sum": "^2.0.0",
+        "html-webpack-plugin": "^3.2.0",
+        "launch-editor-middleware": "^2.2.1",
+        "lodash.defaultsdeep": "^4.6.1",
+        "lodash.mapvalues": "^4.6.0",
+        "lodash.transform": "^4.6.0",
+        "mini-css-extract-plugin": "^0.9.0",
+        "minimist": "^1.2.5",
+        "pnp-webpack-plugin": "^1.6.4",
+        "portfinder": "^1.0.26",
+        "postcss-loader": "^3.0.0",
+        "ssri": "^8.0.1",
+        "terser-webpack-plugin": "^1.4.4",
+        "thread-loader": "^2.1.3",
+        "url-loader": "^2.2.0",
+        "vue-loader": "^15.9.2",
+        "vue-loader-v16": "npm:vue-loader@^16.1.0",
+        "vue-style-loader": "^4.1.2",
+        "webpack": "^4.0.0",
+        "webpack-bundle-analyzer": "^3.8.0",
+        "webpack-chain": "^6.4.0",
+        "webpack-dev-server": "^3.11.0",
+        "webpack-merge": "^4.2.2"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "7.4.1",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz",
+          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+          "dev": true
+        },
+        "globby": {
+          "version": "9.2.0",
+          "resolved": "https://registry.nlark.com/globby/download/globby-9.2.0.tgz",
+          "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=",
+          "dev": true,
+          "requires": {
+            "@types/glob": "^7.1.1",
+            "array-union": "^1.0.2",
+            "dir-glob": "^2.2.2",
+            "fast-glob": "^2.2.6",
+            "glob": "^7.1.3",
+            "ignore": "^4.0.3",
+            "pify": "^4.0.1",
+            "slash": "^2.0.0"
+          }
+        },
+        "hash-sum": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz",
+          "integrity": "sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo=",
+          "dev": true
+        },
+        "ignore": {
+          "version": "4.0.6",
+          "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz",
+          "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+          "dev": true
+        },
+        "slash": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz",
+          "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=",
+          "dev": true
+        },
+        "ssri": {
+          "version": "8.0.1",
+          "resolved": "https://registry.nlark.com/ssri/download/ssri-8.0.1.tgz",
+          "integrity": "sha1-Y45OQ54v+9LNKJd21cpFfE9Roq8=",
+          "dev": true,
+          "requires": {
+            "minipass": "^3.1.1"
+          }
+        }
+      }
+    },
+    "@vue/cli-shared-utils": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-shared-utils/download/@vue/cli-shared-utils-4.5.13.tgz?cache=0&sync_timestamp=1628579279194&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-shared-utils%2Fdownload%2F%40vue%2Fcli-shared-utils-4.5.13.tgz",
+      "integrity": "sha1-rNQPMbR5DxY0KSvapfypXcHg/1A=",
+      "dev": true,
+      "requires": {
+        "@hapi/joi": "^15.0.1",
+        "chalk": "^2.4.2",
+        "execa": "^1.0.0",
+        "launch-editor": "^2.2.1",
+        "lru-cache": "^5.1.1",
+        "node-ipc": "^9.1.1",
+        "open": "^6.3.0",
+        "ora": "^3.4.0",
+        "read-pkg": "^5.1.1",
+        "request": "^2.88.2",
+        "semver": "^6.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz",
+          "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
+          "dev": true,
+          "requires": {
+            "yallist": "^3.0.2"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/component-compiler-utils": {
+      "version": "3.2.2",
+      "resolved": "https://registry.nlark.com/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.2.2.tgz?cache=0&sync_timestamp=1623744211654&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcomponent-compiler-utils%2Fdownload%2F%40vue%2Fcomponent-compiler-utils-3.2.2.tgz",
+      "integrity": "sha1-L37V/u2C/38ChKzBHVJe5+/yJGA=",
+      "requires": {
+        "consolidate": "^0.15.1",
+        "hash-sum": "^1.0.2",
+        "lru-cache": "^4.1.2",
+        "merge-source-map": "^1.1.0",
+        "postcss": "^7.0.36",
+        "postcss-selector-parser": "^6.0.2",
+        "prettier": "^1.18.2",
+        "source-map": "~0.6.1",
+        "vue-template-es2015-compiler": "^1.9.0"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
+          "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4="
+        },
+        "postcss-selector-parser": {
+          "version": "6.0.6",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz?cache=0&sync_timestamp=1620752924836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.6.tgz",
+          "integrity": "sha1-LFu6gXSsL2mBq2MaQqsO5UrzMuo=",
+          "requires": {
+            "cssesc": "^3.0.0",
+            "util-deprecate": "^1.0.2"
+          }
+        }
+      }
+    },
+    "@vue/preload-webpack-plugin": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz?cache=0&sync_timestamp=1613215133431&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fpreload-webpack-plugin%2Fdownload%2F%40vue%2Fpreload-webpack-plugin-1.1.2.tgz",
+      "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=",
+      "dev": true
+    },
+    "@vue/shared": {
+      "version": "3.2.9",
+      "resolved": "https://registry.nlark.com/@vue/shared/download/@vue/shared-3.2.9.tgz",
+      "integrity": "sha1-RORNvYKBmZfxkvt9vbkK9XFdv1I="
+    },
+    "@vue/web-component-wrapper": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.3.0.tgz?cache=0&sync_timestamp=1613216912643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fweb-component-wrapper%2Fdownload%2F%40vue%2Fweb-component-wrapper-1.3.0.tgz",
+      "integrity": "sha1-trQKdiVCnSvXwigd26YB7QXcfxo=",
+      "dev": true
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz",
+      "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=",
+      "requires": {
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz",
+      "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q="
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz?cache=0&sync_timestamp=1625473346773&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.9.0.tgz",
+      "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI="
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz",
+      "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA="
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz?cache=0&sync_timestamp=1625473466896&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-code-frame%2Fdownload%2F%40webassemblyjs%2Fhelper-code-frame-1.9.0.tgz",
+      "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=",
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.9.0"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz",
+      "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg="
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz",
+      "integrity": "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0"
+      }
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz",
+      "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A="
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz?cache=0&sync_timestamp=1625473466570&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.9.0.tgz",
+      "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz",
+      "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=",
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz",
+      "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=",
+      "requires": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz",
+      "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas="
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz?cache=0&sync_timestamp=1625473422937&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.9.0.tgz",
+      "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/helper-wasm-section": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-opt": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "@webassemblyjs/wast-printer": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz?cache=0&sync_timestamp=1625473464969&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.9.0.tgz",
+      "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz?cache=0&sync_timestamp=1625473467198&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-opt%2Fdownload%2F%40webassemblyjs%2Fwasm-opt-1.9.0.tgz",
+      "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz",
+      "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz?cache=0&sync_timestamp=1625473467847&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwast-parser%2Fdownload%2F%40webassemblyjs%2Fwast-parser-1.9.0.tgz",
+      "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-code-frame": "1.9.0",
+        "@webassemblyjs/helper-fsm": "1.9.0",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz",
+      "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz",
+      "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A="
+    },
+    "@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz",
+      "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0="
+    },
+    "aaptjs": {
+      "version": "1.3.1",
+      "resolved": "https://registry.nlark.com/aaptjs/download/aaptjs-1.3.1.tgz",
+      "integrity": "sha1-xA48CkPunQZ8xixKg7Z6YZUCArU=",
+      "requires": {
+        "shelljs": "^0.8.1"
+      }
+    },
+    "abab": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/abab/download/abab-2.0.5.tgz",
+      "integrity": "sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o=",
+      "dev": true
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz",
+      "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg="
+    },
+    "accepts": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
+      "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
+      "requires": {
+        "mime-types": "~2.1.24",
+        "negotiator": "0.6.2"
+      }
+    },
+    "acorn": {
+      "version": "5.7.4",
+      "resolved": "https://registry.nlark.com/acorn/download/acorn-5.7.4.tgz",
+      "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=",
+      "dev": true
+    },
+    "acorn-globals": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.3.4.tgz",
+      "integrity": "sha1-n6GSat3BHJcwjE5m163Q1Awycuc=",
+      "dev": true,
+      "requires": {
+        "acorn": "^6.0.1",
+        "acorn-walk": "^6.0.1"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.4.2",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz",
+          "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=",
+          "dev": true
+        },
+        "acorn-walk": {
+          "version": "6.2.0",
+          "resolved": "https://registry.nlark.com/acorn-walk/download/acorn-walk-6.2.0.tgz?cache=0&sync_timestamp=1630916608758&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-walk%2Fdownload%2Facorn-walk-6.2.0.tgz",
+          "integrity": "sha1-Ejy487hMIXHx9/slJhWxx4prGow=",
+          "dev": true
+        }
+      }
+    },
+    "acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.nlark.com/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1630916608758&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz",
+      "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=",
+      "dev": true
+    },
+    "adb-commander": {
+      "version": "0.1.9",
+      "resolved": "https://registry.npm.taobao.org/adb-commander/download/adb-commander-0.1.9.tgz",
+      "integrity": "sha1-EDd49ttJY6X4+JyR+vidNkn1kgI=",
+      "requires": {
+        "adb-driver": "^0.1.8"
+      }
+    },
+    "adb-devices-emitter": {
+      "version": "0.1.9",
+      "resolved": "https://registry.npm.taobao.org/adb-devices-emitter/download/adb-devices-emitter-0.1.9.tgz",
+      "integrity": "sha1-D4QlN2NHcLWEzby8AzP077SguGA=",
+      "requires": {
+        "adb-commander": "^0.1.9"
+      }
+    },
+    "adb-driver": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npm.taobao.org/adb-driver/download/adb-driver-0.1.8.tgz",
+      "integrity": "sha1-9KZWy6BryFcE5h7koV54ll7vqvQ=",
+      "requires": {
+        "which": "^1.3.1"
+      }
+    },
+    "address": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz",
+      "integrity": "sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=",
+      "dev": true
+    },
+    "after": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npm.taobao.org/after/download/after-0.8.2.tgz",
+      "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
+    },
+    "ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1626380096383&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+      "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+      "requires": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      }
+    },
+    "ajv-errors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz",
+      "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0="
+    },
+    "ajv-keywords": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1616882441894&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz",
+      "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0="
+    },
+    "alphanum-sort": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz",
+      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+      "dev": true
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+    },
+    "ansi-colors": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz?cache=0&sync_timestamp=1594334943016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-colors%2Fdownload%2Fansi-colors-3.2.4.tgz",
+      "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=",
+      "dev": true
+    },
+    "ansi-escapes": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.2.tgz",
+      "integrity": "sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4=",
+      "dev": true,
+      "requires": {
+        "type-fest": "^0.21.3"
+      },
+      "dependencies": {
+        "type-fest": {
+          "version": "0.21.3",
+          "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.21.3.tgz?cache=0&sync_timestamp=1630842470843&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.21.3.tgz",
+          "integrity": "sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=",
+          "dev": true
+        }
+      }
+    },
+    "ansi-html": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz",
+      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+      "dev": true
+    },
+    "ansi-regex": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+      "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc="
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+      "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz",
+      "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
+    },
+    "anymatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz",
+      "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=",
+      "requires": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz",
+      "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo="
+    },
+    "arch": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/arch/download/arch-2.2.0.tgz",
+      "integrity": "sha1-G8R4GPMFdk8jqzMGsL/AhsWinRE=",
+      "dev": true
+    },
+    "are-we-there-yet": {
+      "version": "1.1.7",
+      "resolved": "https://registry.nlark.com/are-we-there-yet/download/are-we-there-yet-1.1.7.tgz",
+      "integrity": "sha1-sVR0qTKtq0/4pQ2a36fk6SbyEUY=",
+      "requires": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
+      }
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz",
+      "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz",
+      "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE="
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+    },
+    "array-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz",
+      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
+      "dev": true
+    },
+    "array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz",
+      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
+    },
+    "array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz",
+      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+      "dev": true
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "dev": true,
+      "requires": {
+        "array-uniq": "^1.0.1"
+      }
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/array-uniq/download/array-uniq-1.0.3.tgz?cache=0&sync_timestamp=1620042045402&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farray-uniq%2Fdownload%2Farray-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "dev": true
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+    },
+    "arraybuffer.slice": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.7.tgz",
+      "integrity": "sha1-O7xCdd1YTMGxCAm4nU6LY6aednU="
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz",
+      "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "asn1.js": {
+      "version": "5.4.1",
+      "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz",
+      "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=",
+      "requires": {
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0",
+        "safer-buffer": "^2.1.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og="
+        }
+      }
+    },
+    "assert": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz",
+      "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=",
+      "requires": {
+        "object-assign": "^4.1.1",
+        "util": "0.10.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz",
+          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+        },
+        "util": {
+          "version": "0.10.3",
+          "resolved": "https://registry.nlark.com/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1622212943994&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.10.3.tgz",
+          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+          "requires": {
+            "inherits": "2.0.1"
+          }
+        }
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+    },
+    "ast-types": {
+      "version": "0.14.2",
+      "resolved": "https://registry.npm.taobao.org/ast-types/download/ast-types-0.14.2.tgz",
+      "integrity": "sha1-YAuILfhYPjzU8t9fog+oN1nUvf0=",
+      "dev": true,
+      "requires": {
+        "tslib": "^2.0.1"
+      }
+    },
+    "astral-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz",
+      "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=",
+      "dev": true
+    },
+    "async": {
+      "version": "2.6.3",
+      "resolved": "https://registry.nlark.com/async/download/async-2.6.3.tgz?cache=0&sync_timestamp=1628206303171&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fasync%2Fdownload%2Fasync-2.6.3.tgz",
+      "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=",
+      "requires": {
+        "lodash": "^4.17.14"
+      }
+    },
+    "async-each": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz",
+      "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8="
+    },
+    "async-foreach": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npm.taobao.org/async-foreach/download/async-foreach-0.1.3.tgz",
+      "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI="
+    },
+    "async-limiter": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz",
+      "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=",
+      "dev": true
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+    },
+    "at-least-node": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+      "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+      "dev": true,
+      "optional": true
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz",
+      "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k="
+    },
+    "autoprefixer": {
+      "version": "9.8.6",
+      "resolved": "https://registry.nlark.com/autoprefixer/download/autoprefixer-9.8.6.tgz?cache=0&sync_timestamp=1630618912073&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.6.tgz",
+      "integrity": "sha1-O3NZTKG/kmYyDFrPFYjXTep0IQ8=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.12.0",
+        "caniuse-lite": "^1.0.30001109",
+        "colorette": "^1.2.1",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^7.0.32",
+        "postcss-value-parser": "^4.1.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz",
+          "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=",
+          "dev": true
+        }
+      }
+    },
+    "aws-sign2": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz",
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+    },
+    "aws4": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101244098&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz",
+      "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk="
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "js-tokens": {
+          "version": "3.0.2",
+          "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-3.0.2.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-3.0.2.tgz",
+          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "babel-jest": {
+      "version": "25.5.1",
+      "resolved": "https://registry.nlark.com/babel-jest/download/babel-jest-25.5.1.tgz?cache=0&sync_timestamp=1630058476451&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-jest%2Fdownload%2Fbabel-jest-25.5.1.tgz",
+      "integrity": "sha1-vC5hAfhJ1vauwJcg/8e8UzLmKFM=",
+      "dev": true,
+      "requires": {
+        "@jest/transform": "^25.5.1",
+        "@jest/types": "^25.5.0",
+        "@types/babel__core": "^7.1.7",
+        "babel-plugin-istanbul": "^6.0.0",
+        "babel-preset-jest": "^25.5.0",
+        "chalk": "^3.0.0",
+        "graceful-fs": "^4.2.4",
+        "slash": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+          "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "babel-loader": {
+      "version": "8.2.2",
+      "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.2.2.tgz?cache=0&sync_timestamp=1606489470588&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.2.2.tgz",
+      "integrity": "sha1-k2POhMEMmkDmx1N0jhRBtgyKC4E=",
+      "requires": {
+        "find-cache-dir": "^3.3.1",
+        "loader-utils": "^1.4.0",
+        "make-dir": "^3.1.0",
+        "schema-utils": "^2.6.5"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "3.3.2",
+          "resolved": "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-3.3.2.tgz?cache=0&sync_timestamp=1630260035189&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-3.3.2.tgz",
+          "integrity": "sha1-swxbbv8HMHMa6pu9nb7L2AJW1ks=",
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^3.0.2",
+            "pkg-dir": "^4.1.0"
+          }
+        },
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
+          "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz",
+          "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "make-dir": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz",
+          "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
+          "requires": {
+            "semver": "^6.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz",
+          "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-4.0.0.tgz",
+          "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM="
+        },
+        "pkg-dir": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1602858957553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz",
+          "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=",
+          "requires": {
+            "find-up": "^4.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "2.7.1",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz",
+          "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
+          "requires": {
+            "@types/json-schema": "^7.0.5",
+            "ajv": "^6.12.4",
+            "ajv-keywords": "^3.5.2"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0="
+        }
+      }
+    },
+    "babel-plugin-dynamic-import-node": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz",
+      "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=",
+      "requires": {
+        "object.assign": "^4.1.0"
+      }
+    },
+    "babel-plugin-import": {
+      "version": "1.13.3",
+      "resolved": "https://registry.npm.taobao.org/babel-plugin-import/download/babel-plugin-import-1.13.3.tgz?cache=0&sync_timestamp=1606209853373&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-import%2Fdownload%2Fbabel-plugin-import-1.13.3.tgz",
+      "integrity": "sha1-nbu6fRrHK9QSkXqDDUReAJQdJtc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/runtime": "^7.0.0"
+      }
+    },
+    "babel-plugin-istanbul": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-6.0.0.tgz",
+      "integrity": "sha1-4VnM3Jr5XgtXDHW0Vzt8NNZx12U=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@istanbuljs/load-nyc-config": "^1.0.0",
+        "@istanbuljs/schema": "^0.1.2",
+        "istanbul-lib-instrument": "^4.0.0",
+        "test-exclude": "^6.0.0"
+      }
+    },
+    "babel-plugin-jest-hoist": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-25.5.0.tgz?cache=0&sync_timestamp=1624900517723&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-jest-hoist%2Fdownload%2Fbabel-plugin-jest-hoist-25.5.0.tgz",
+      "integrity": "sha1-EpyAulx/x1uvOkW5Pi43LVfKJnc=",
+      "dev": true,
+      "requires": {
+        "@babel/template": "^7.3.3",
+        "@babel/types": "^7.3.3",
+        "@types/babel__traverse": "^7.0.6"
+      }
+    },
+    "babel-plugin-polyfill-corejs2": {
+      "version": "0.2.2",
+      "resolved": "https://registry.nlark.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.2.tgz?cache=0&sync_timestamp=1622023848590&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-polyfill-corejs2%2Fdownload%2Fbabel-plugin-polyfill-corejs2-0.2.2.tgz",
+      "integrity": "sha1-6RJHheb9lPlLYYp5VOVpMFO/Uyc=",
+      "requires": {
+        "@babel/compat-data": "^7.13.11",
+        "@babel/helper-define-polyfill-provider": "^0.2.2",
+        "semver": "^6.1.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0="
+        }
+      }
+    },
+    "babel-plugin-polyfill-corejs3": {
+      "version": "0.2.4",
+      "resolved": "https://registry.nlark.com/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.2.4.tgz",
+      "integrity": "sha1-aMuBMWsOjZ1yGpLgAJ7G7NTNLKk=",
+      "requires": {
+        "@babel/helper-define-polyfill-provider": "^0.2.2",
+        "core-js-compat": "^3.14.0"
+      }
+    },
+    "babel-plugin-polyfill-regenerator": {
+      "version": "0.2.2",
+      "resolved": "https://registry.nlark.com/babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.2.2.tgz",
+      "integrity": "sha1-sxDI1kKsraNIwfo7Pmzg6FG+4Hc=",
+      "requires": {
+        "@babel/helper-define-polyfill-provider": "^0.2.2"
+      }
+    },
+    "babel-preset-current-node-syntax": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/babel-preset-current-node-syntax/download/babel-preset-current-node-syntax-0.1.4.tgz?cache=0&sync_timestamp=1608036113241&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-preset-current-node-syntax%2Fdownload%2Fbabel-preset-current-node-syntax-0.1.4.tgz",
+      "integrity": "sha1-gm8fjnJFrVNHFLoAH4T36QbDthU=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-bigint": "^7.8.3",
+        "@babel/plugin-syntax-class-properties": "^7.8.3",
+        "@babel/plugin-syntax-import-meta": "^7.8.3",
+        "@babel/plugin-syntax-json-strings": "^7.8.3",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+        "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+      }
+    },
+    "babel-preset-jest": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/babel-preset-jest/download/babel-preset-jest-25.5.0.tgz?cache=0&sync_timestamp=1624900517622&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-preset-jest%2Fdownload%2Fbabel-preset-jest-25.5.0.tgz",
+      "integrity": "sha1-wdfxkYKUh6kHdkxlMH+qDmZZC0k=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-jest-hoist": "^25.5.0",
+        "babel-preset-current-node-syntax": "^0.1.2"
+      }
+    },
+    "backo2": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz",
+      "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
+    },
+    "balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&sync_timestamp=1617714298273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz",
+      "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4="
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz",
+      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "base64-arraybuffer": {
+      "version": "0.2.0",
+      "resolved": "https://registry.nlark.com/base64-arraybuffer/download/base64-arraybuffer-0.2.0.tgz?cache=0&sync_timestamp=1628588823959&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbase64-arraybuffer%2Fdownload%2Fbase64-arraybuffer-0.2.0.tgz",
+      "integrity": "sha1-S5RPrAGRqlkHr+LYyZnMxXzoD0U="
+    },
+    "base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.5.1.tgz",
+      "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo="
+    },
+    "base64id": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/base64id/download/base64id-2.0.0.tgz",
+      "integrity": "sha1-J3Csa8R9MSr5eov5pjQ0LgzSXLY="
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "bfj": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz",
+      "integrity": "sha1-MlyGGoIryzWKQceKM7jm4ght3n8=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.5",
+        "check-types": "^8.0.3",
+        "hoopy": "^0.1.4",
+        "tryer": "^1.0.1"
+      }
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.nlark.com/big.js/download/big.js-5.2.2.tgz",
+      "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg="
+    },
+    "binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299322955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz",
+      "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0="
+    },
+    "bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz",
+      "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=",
+      "optional": true,
+      "requires": {
+        "file-uri-to-path": "1.0.0"
+      }
+    },
+    "blob": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npm.taobao.org/blob/download/blob-0.0.5.tgz",
+      "integrity": "sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM="
+    },
+    "block-stream": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npm.taobao.org/block-stream/download/block-stream-0.0.9.tgz",
+      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+      "requires": {
+        "inherits": "~2.0.0"
+      }
+    },
+    "bluebird": {
+      "version": "3.7.2",
+      "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz?cache=0&sync_timestamp=1602657218976&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz",
+      "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28="
+    },
+    "bmaplib.curveline": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/bmaplib.curveline/-/bmaplib.curveline-1.0.0.tgz",
+      "integrity": "sha512-9wcFMVhiYxNPqpvsLDAADn3qDhNzXp2mA6VyHSHg2XOAgSooC7ZiujdFhy0sp+0QYjTfJ/MjmLuNoUg2HHxH4Q=="
+    },
+    "bmaplib.heatmap": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/bmaplib.heatmap/-/bmaplib.heatmap-1.0.4.tgz",
+      "integrity": "sha512-rmhqUARBpUSJ9jXzUI2j7dIOqnc38bqubkx/8a349U2qtw/ulLUwyzRD535OrA8G7w5cz4aPKm6/rNvUAarg/Q=="
+    },
+    "bmaplib.lushu": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/bmaplib.lushu/-/bmaplib.lushu-1.0.7.tgz",
+      "integrity": "sha512-LVvgpESPii6xGxyjnQjq8u+ic4NjvhdCPV/RiSS/PGTUdZKeTDS7prSpleJLZH3ES0+oc0gYn8bw0LtPYUSz2w=="
+    },
+    "bmaplib.markerclusterer": {
+      "version": "1.0.13",
+      "resolved": "https://registry.npmjs.org/bmaplib.markerclusterer/-/bmaplib.markerclusterer-1.0.13.tgz",
+      "integrity": "sha512-VrLyWSiuDEVNi0yUfwOhFQ6z1oEEHS4w36GNu3iASu6p52QIx9uAXMUkuSCHReNR0bj2Cp9SA1dSx5RpojXajQ==",
+      "requires": {
+        "bmaplib.texticonoverlay": "^1.0.2"
+      }
+    },
+    "bmaplib.texticonoverlay": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bmaplib.texticonoverlay/-/bmaplib.texticonoverlay-1.0.2.tgz",
+      "integrity": "sha512-4ZTWr4ZP3B6qEWput5Tut16CfZgII38YwM3bpyb4gFTQyORlKYryFp9WHWrwZZaHlOyYDAXG9SX0hka43jTADg=="
+    },
+    "bn.js": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.2.0.tgz",
+      "integrity": "sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI="
+    },
+    "body-parser": {
+      "version": "1.19.0",
+      "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz",
+      "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=",
+      "dev": true,
+      "requires": {
+        "bytes": "3.1.0",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "on-finished": "~2.3.0",
+        "qs": "6.7.0",
+        "raw-body": "2.4.0",
+        "type-is": "~1.6.17"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz?cache=0&sync_timestamp=1616385328325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.7.0.tgz",
+          "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=",
+          "dev": true
+        }
+      }
+    },
+    "bonjour": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz",
+      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "dev": true,
+      "requires": {
+        "array-flatten": "^2.1.0",
+        "deep-equal": "^1.0.1",
+        "dns-equal": "^1.0.0",
+        "dns-txt": "^2.0.2",
+        "multicast-dns": "^6.0.1",
+        "multicast-dns-service-types": "^1.1.0"
+      },
+      "dependencies": {
+        "array-flatten": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz",
+          "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=",
+          "dev": true
+        }
+      }
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+      "dev": true
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1614010785257&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz",
+      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
+      "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
+      "requires": {
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "extend-shallow": "^2.0.1",
+        "fill-range": "^4.0.0",
+        "isobject": "^3.0.1",
+        "repeat-element": "^1.1.2",
+        "snapdragon": "^0.8.1",
+        "snapdragon-node": "^2.0.1",
+        "split-string": "^3.0.2",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz",
+      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+    },
+    "browser-process-hrtime": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz",
+      "integrity": "sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY=",
+      "dev": true
+    },
+    "browser-resolve": {
+      "version": "1.11.3",
+      "resolved": "https://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz",
+      "integrity": "sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY=",
+      "dev": true,
+      "requires": {
+        "resolve": "1.1.7"
+      },
+      "dependencies": {
+        "resolve": {
+          "version": "1.1.7",
+          "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz?cache=0&sync_timestamp=1613055183799&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.1.7.tgz",
+          "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+          "dev": true
+        }
+      }
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz",
+      "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
+      "requires": {
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.3",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "browserify-cipher": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
+      "requires": {
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
+      }
+    },
+    "browserify-des": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz",
+      "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "browserify-rsa": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.1.0.tgz?cache=0&sync_timestamp=1605194257215&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-rsa%2Fdownload%2Fbrowserify-rsa-4.1.0.tgz",
+      "integrity": "sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0=",
+      "requires": {
+        "bn.js": "^5.0.0",
+        "randombytes": "^2.0.1"
+      }
+    },
+    "browserify-sign": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.1.tgz?cache=0&sync_timestamp=1596557809886&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-sign%2Fdownload%2Fbrowserify-sign-4.2.1.tgz",
+      "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=",
+      "requires": {
+        "bn.js": "^5.1.1",
+        "browserify-rsa": "^4.0.1",
+        "create-hash": "^1.2.0",
+        "create-hmac": "^1.1.7",
+        "elliptic": "^6.5.3",
+        "inherits": "^2.0.4",
+        "parse-asn1": "^5.1.5",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
+          "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY="
+        }
+      }
+    },
+    "browserify-zlib": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz",
+      "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+      "requires": {
+        "pako": "~1.0.5"
+      }
+    },
+    "browserslist": {
+      "version": "4.17.0",
+      "resolved": "https://registry.nlark.com/browserslist/download/browserslist-4.17.0.tgz?cache=0&sync_timestamp=1630836528153&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.17.0.tgz",
+      "integrity": "sha1-H82B7HW0HW1JlPsIMbkqwYwBZJw=",
+      "requires": {
+        "caniuse-lite": "^1.0.30001254",
+        "colorette": "^1.3.0",
+        "electron-to-chromium": "^1.3.830",
+        "escalade": "^3.1.1",
+        "node-releases": "^1.1.75"
+      }
+    },
+    "bser": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/bser/download/bser-2.1.1.tgz",
+      "integrity": "sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU=",
+      "dev": true,
+      "requires": {
+        "node-int64": "^0.4.0"
+      }
+    },
+    "buffer": {
+      "version": "4.9.2",
+      "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz?cache=0&sync_timestamp=1606098175437&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-4.9.2.tgz",
+      "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=",
+      "requires": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
+      }
+    },
+    "buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.nlark.com/buffer-from/download/buffer-from-1.1.2.tgz?cache=0&sync_timestamp=1627578710888&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbuffer-from%2Fdownload%2Fbuffer-from-1.1.2.tgz",
+      "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U="
+    },
+    "buffer-indexof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz",
+      "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=",
+      "dev": true
+    },
+    "buffer-json": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/buffer-json/download/buffer-json-2.0.0.tgz",
+      "integrity": "sha1-9z4TseQvGW/i/WfQAcfXEH7dfCM=",
+      "dev": true
+    },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz",
+      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+    },
+    "builtin-modules": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz",
+      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+      "dev": true
+    },
+    "builtin-status-codes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz",
+      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+    },
+    "bytes": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz",
+      "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY="
+    },
+    "cacache": {
+      "version": "12.0.4",
+      "resolved": "https://registry.nlark.com/cacache/download/cacache-12.0.4.tgz",
+      "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=",
+      "requires": {
+        "bluebird": "^3.5.5",
+        "chownr": "^1.1.1",
+        "figgy-pudding": "^3.5.1",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.1.15",
+        "infer-owner": "^1.0.3",
+        "lru-cache": "^5.1.1",
+        "mississippi": "^3.0.0",
+        "mkdirp": "^0.5.1",
+        "move-concurrently": "^1.0.1",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^2.6.3",
+        "ssri": "^6.0.1",
+        "unique-filename": "^1.1.1",
+        "y18n": "^4.0.0"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz",
+          "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
+          "requires": {
+            "yallist": "^3.0.2"
+          }
+        }
+      }
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz",
+      "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
+      "requires": {
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.2.1",
+        "get-value": "^2.0.6",
+        "has-value": "^1.0.0",
+        "isobject": "^3.0.1",
+        "set-value": "^2.0.0",
+        "to-object-path": "^0.3.0",
+        "union-value": "^1.0.0",
+        "unset-value": "^1.0.0"
+      }
+    },
+    "cache-content-type": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/cache-content-type/download/cache-content-type-1.0.1.tgz",
+      "integrity": "sha1-A1zeKwjuISn0qDFeqPAKANuhRTw=",
+      "requires": {
+        "mime-types": "^2.1.18",
+        "ylru": "^1.2.0"
+      }
+    },
+    "cache-loader": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/cache-loader/download/cache-loader-4.1.0.tgz",
+      "integrity": "sha1-mUjK41OuwKH8ser9ojAIFuyFOH4=",
+      "dev": true,
+      "requires": {
+        "buffer-json": "^2.0.0",
+        "find-cache-dir": "^3.0.0",
+        "loader-utils": "^1.2.3",
+        "mkdirp": "^0.5.1",
+        "neo-async": "^2.6.1",
+        "schema-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "3.3.2",
+          "resolved": "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-3.3.2.tgz?cache=0&sync_timestamp=1630260035189&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-3.3.2.tgz",
+          "integrity": "sha1-swxbbv8HMHMa6pu9nb7L2AJW1ks=",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^3.0.2",
+            "pkg-dir": "^4.1.0"
+          }
+        },
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
+          "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz",
+          "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "make-dir": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz",
+          "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
+          "dev": true,
+          "requires": {
+            "semver": "^6.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz",
+          "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-4.0.0.tgz",
+          "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1602858957553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz",
+          "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^4.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "2.7.1",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz",
+          "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
+          "dev": true,
+          "requires": {
+            "@types/json-schema": "^7.0.5",
+            "ajv": "^6.12.4",
+            "ajv-keywords": "^3.5.2"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        }
+      }
+    },
+    "call-bind": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.2.tgz?cache=0&sync_timestamp=1610403007655&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.2.tgz",
+      "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
+      "requires": {
+        "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.0.2"
+      }
+    },
+    "call-me-maybe": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz",
+      "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+      "dev": true
+    },
+    "caller-callsite": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz",
+      "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+      "dev": true,
+      "requires": {
+        "callsites": "^2.0.0"
+      }
+    },
+    "caller-path": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz",
+      "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+      "dev": true,
+      "requires": {
+        "caller-callsite": "^2.0.0"
+      }
+    },
+    "callsites": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/callsites/download/callsites-2.0.0.tgz",
+      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+      "dev": true
+    },
+    "camel-case": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1606867311564&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz",
+      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0",
+        "upper-case": "^1.1.1"
+      }
+    },
+    "camelcase": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.2.0.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-6.2.0.tgz",
+      "integrity": "sha1-kkr4gcnVJaydh/QNlk5c6pgqGAk=",
+      "dev": true
+    },
+    "camelcase-keys": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/camelcase-keys/download/camelcase-keys-2.1.0.tgz?cache=0&sync_timestamp=1624608993530&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcamelcase-keys%2Fdownload%2Fcamelcase-keys-2.1.0.tgz",
+      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "requires": {
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-2.1.1.tgz",
+          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+        }
+      }
+    },
+    "caniuse-api": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz",
+      "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-lite": "^1.0.0",
+        "lodash.memoize": "^4.1.2",
+        "lodash.uniq": "^4.5.0"
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30001255",
+      "resolved": "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001255.tgz",
+      "integrity": "sha1-87CbWatS4551GlaVI2GPR8QpjKA="
+    },
+    "capture-exit": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/capture-exit/download/capture-exit-2.0.0.tgz",
+      "integrity": "sha1-+5U7+uvreB9iiYI52rtCbQilCaQ=",
+      "dev": true,
+      "requires": {
+        "rsvp": "^4.8.4"
+      }
+    },
+    "case-sensitive-paths-webpack-plugin": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npm.taobao.org/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.4.0.tgz?cache=0&sync_timestamp=1614018570698&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcase-sensitive-paths-webpack-plugin%2Fdownload%2Fcase-sensitive-paths-webpack-plugin-2.4.0.tgz",
+      "integrity": "sha1-22QGbGQi7tLgjMFLmGykN5bbxtQ=",
+      "dev": true
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+    },
+    "chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz",
+      "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "dependencies": {
+        "supports-color": {
+          "version": "5.5.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
+          "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "charenc": {
+      "version": "0.0.2",
+      "resolved": "https://registry.nlark.com/charenc/download/charenc-0.0.2.tgz",
+      "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
+    },
+    "check-types": {
+      "version": "8.0.3",
+      "resolved": "https://registry.npm.taobao.org/check-types/download/check-types-8.0.3.tgz",
+      "integrity": "sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=",
+      "dev": true
+    },
+    "chokidar": {
+      "version": "3.5.2",
+      "resolved": "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz",
+      "integrity": "sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=",
+      "requires": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "fsevents": "~2.3.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "glob-parent": {
+          "version": "5.1.2",
+          "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1626760200164&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
+          "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
+          "requires": {
+            "is-glob": "^4.0.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss="
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "chownr": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz",
+      "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs="
+    },
+    "chrome-simple-launcher": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npm.taobao.org/chrome-simple-launcher/download/chrome-simple-launcher-0.1.3.tgz",
+      "integrity": "sha1-pLK6PBZdtWTGQIfompu2SmO883A="
+    },
+    "chrome-trace-event": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz",
+      "integrity": "sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw="
+    },
+    "ci-info": {
+      "version": "1.6.0",
+      "resolved": "https://registry.nlark.com/ci-info/download/ci-info-1.6.0.tgz",
+      "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=",
+      "dev": true
+    },
+    "cipher-base": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz",
+      "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz",
+      "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "clean-css": {
+      "version": "4.2.3",
+      "resolved": "https://registry.nlark.com/clean-css/download/clean-css-4.2.3.tgz",
+      "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=",
+      "dev": true,
+      "requires": {
+        "source-map": "~0.6.0"
+      }
+    },
+    "cli-cursor": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/cli-cursor/download/cli-cursor-2.1.0.tgz?cache=0&sync_timestamp=1629747358529&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcli-cursor%2Fdownload%2Fcli-cursor-2.1.0.tgz",
+      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "^2.0.0"
+      }
+    },
+    "cli-highlight": {
+      "version": "2.1.11",
+      "resolved": "https://registry.npm.taobao.org/cli-highlight/download/cli-highlight-2.1.11.tgz",
+      "integrity": "sha1-SXNvpFLwqvT65YDjCssmgo0twb8=",
+      "dev": true,
+      "requires": {
+        "chalk": "^4.0.0",
+        "highlight.js": "^10.7.1",
+        "mz": "^2.4.0",
+        "parse5": "^5.1.1",
+        "parse5-htmlparser2-tree-adapter": "^6.0.0",
+        "yargs": "^16.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz",
+          "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "cli-spinners": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.6.0.tgz?cache=0&sync_timestamp=1616091482312&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.6.0.tgz",
+      "integrity": "sha1-NsfcmPtqmna9YjjsP3fiQlYn6Tk=",
+      "dev": true
+    },
+    "clipboardy": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/clipboardy/download/clipboardy-2.3.0.tgz",
+      "integrity": "sha1-PCkDZQxo5GqRs4iYW8J3QofbopA=",
+      "dev": true,
+      "requires": {
+        "arch": "^2.1.1",
+        "execa": "^1.0.0",
+        "is-wsl": "^2.1.1"
+      },
+      "dependencies": {
+        "is-wsl": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz",
+          "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=",
+          "dev": true,
+          "requires": {
+            "is-docker": "^2.0.0"
+          }
+        }
+      }
+    },
+    "cliui": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-6.0.0.tgz",
+      "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=",
+      "dev": true,
+      "requires": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^6.2.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1618558856477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz",
+          "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "6.2.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz?cache=0&sync_timestamp=1618558923406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-6.2.0.tgz",
+          "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.0.0",
+            "string-width": "^4.1.0",
+            "strip-ansi": "^6.0.0"
+          }
+        }
+      }
+    },
+    "clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz",
+      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+      "dev": true
+    },
+    "clone-deep": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/clone-deep/download/clone-deep-4.0.1.tgz",
+      "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=",
+      "requires": {
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.2",
+        "shallow-clone": "^3.0.0"
+      }
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+    },
+    "co-body": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npm.taobao.org/co-body/download/co-body-6.1.0.tgz",
+      "integrity": "sha1-2HqO/DVk+b/jrO2O9c0Ex6h2ZUc=",
+      "requires": {
+        "inflation": "^2.0.0",
+        "qs": "^6.5.2",
+        "raw-body": "^2.3.3",
+        "type-is": "^1.6.16"
+      }
+    },
+    "coa": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz",
+      "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=",
+      "dev": true,
+      "requires": {
+        "@types/q": "^1.5.1",
+        "chalk": "^2.4.1",
+        "q": "^1.1.2"
+      }
+    },
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+    },
+    "collect-v8-coverage": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/collect-v8-coverage/download/collect-v8-coverage-1.0.1.tgz",
+      "integrity": "sha1-zCyOlPwYu9/+ZNZTRXDIpnOyf1k=",
+      "dev": true
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color": {
+      "version": "3.2.1",
+      "resolved": "https://registry.nlark.com/color/download/color-3.2.1.tgz",
+      "integrity": "sha1-NUTcGYyvRJDD7MmnkLVP6f9F4WQ=",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.3",
+        "color-string": "^1.6.0"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
+      "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+    },
+    "color-string": {
+      "version": "1.6.0",
+      "resolved": "https://registry.nlark.com/color-string/download/color-string-1.6.0.tgz",
+      "integrity": "sha1-w5FfYf4mdnLLfh4GTJ1pIhn2wxI=",
+      "dev": true,
+      "requires": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
+      }
+    },
+    "colorette": {
+      "version": "1.3.0",
+      "resolved": "https://registry.nlark.com/colorette/download/colorette-1.3.0.tgz?cache=0&sync_timestamp=1628600300224&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcolorette%2Fdownload%2Fcolorette-1.3.0.tgz",
+      "integrity": "sha1-/0XS8O2yRAadO3cq3rBP7TjQoK8="
+    },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
+      "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=",
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.nlark.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1627358254258&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz",
+      "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM="
+    },
+    "commondir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz",
+      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+    },
+    "component-bind": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz",
+      "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
+    },
+    "component-emitter": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz",
+      "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A="
+    },
+    "component-inherit": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz",
+      "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
+    },
+    "compressible": {
+      "version": "2.0.18",
+      "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz",
+      "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=",
+      "dev": true,
+      "requires": {
+        "mime-db": ">= 1.43.0 < 2"
+      }
+    },
+    "compression": {
+      "version": "1.7.4",
+      "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz",
+      "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.5",
+        "bytes": "3.0.0",
+        "compressible": "~2.0.16",
+        "debug": "2.6.9",
+        "on-headers": "~1.0.2",
+        "safe-buffer": "5.1.2",
+        "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "bytes": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz",
+          "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+          "dev": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz",
+      "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "connect-history-api-fallback": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz",
+      "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=",
+      "dev": true
+    },
+    "console-browserify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz",
+      "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY="
+    },
+    "console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz",
+      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+    },
+    "consolidate": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz",
+      "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=",
+      "requires": {
+        "bluebird": "^3.1.1"
+      }
+    },
+    "constants-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz",
+      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+    },
+    "content-disposition": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz",
+      "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=",
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "content-type": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz",
+      "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
+    },
+    "convert-source-map": {
+      "version": "1.8.0",
+      "resolved": "https://registry.nlark.com/convert-source-map/download/convert-source-map-1.8.0.tgz",
+      "integrity": "sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k=",
+      "requires": {
+        "safe-buffer": "~5.1.1"
+      }
+    },
+    "cookie": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz",
+      "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=",
+      "dev": true
+    },
+    "cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz",
+      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+      "dev": true
+    },
+    "cookies": {
+      "version": "0.8.0",
+      "resolved": "https://registry.nlark.com/cookies/download/cookies-0.8.0.tgz",
+      "integrity": "sha1-EpPOSzkXQKhAbjyYcOgoxLVPP5A=",
+      "requires": {
+        "depd": "~2.0.0",
+        "keygrip": "~1.1.0"
+      },
+      "dependencies": {
+        "depd": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/depd/download/depd-2.0.0.tgz",
+          "integrity": "sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8="
+        }
+      }
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
+      "requires": {
+        "aproba": "^1.1.1",
+        "fs-write-stream-atomic": "^1.0.8",
+        "iferr": "^0.1.5",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.0"
+      }
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+    },
+    "copy-to": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/copy-to/download/copy-to-2.0.1.tgz",
+      "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU="
+    },
+    "copy-webpack-plugin": {
+      "version": "5.1.2",
+      "resolved": "https://registry.nlark.com/copy-webpack-plugin/download/copy-webpack-plugin-5.1.2.tgz?cache=0&sync_timestamp=1624628458516&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-5.1.2.tgz",
+      "integrity": "sha1-ioieHcr6bJHGzUvhrRWPHTgjuuI=",
+      "dev": true,
+      "requires": {
+        "cacache": "^12.0.3",
+        "find-cache-dir": "^2.1.0",
+        "glob-parent": "^3.1.0",
+        "globby": "^7.1.1",
+        "is-glob": "^4.0.1",
+        "loader-utils": "^1.2.3",
+        "minimatch": "^3.0.4",
+        "normalize-path": "^3.0.0",
+        "p-limit": "^2.2.1",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^4.0.0",
+        "webpack-log": "^2.0.0"
+      }
+    },
+    "core-js": {
+      "version": "3.17.2",
+      "resolved": "https://registry.nlark.com/core-js/download/core-js-3.17.2.tgz",
+      "integrity": "sha1-+WDq5xDcYsKcypPVMy42YOKJ2xA="
+    },
+    "core-js-compat": {
+      "version": "3.17.2",
+      "resolved": "https://registry.nlark.com/core-js-compat/download/core-js-compat-3.17.2.tgz?cache=0&sync_timestamp=1630603307523&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js-compat%2Fdownload%2Fcore-js-compat-3.17.2.tgz",
+      "integrity": "sha1-9GGrlQwKD/7fwyfevyi35RiVCTY=",
+      "requires": {
+        "browserslist": "^4.16.8",
+        "semver": "7.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz",
+          "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44="
+        }
+      }
+    },
+    "core-util-is": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.3.tgz?cache=0&sync_timestamp=1630420577662&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-util-is%2Fdownload%2Fcore-util-is-1.0.3.tgz",
+      "integrity": "sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U="
+    },
+    "cosmiconfig": {
+      "version": "5.2.1",
+      "resolved": "https://registry.nlark.com/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&sync_timestamp=1629602330801&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz",
+      "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=",
+      "dev": true,
+      "requires": {
+        "import-fresh": "^2.0.0",
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.13.1",
+        "parse-json": "^4.0.0"
+      },
+      "dependencies": {
+        "parse-json": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1610966667117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz",
+          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "dev": true,
+          "requires": {
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
+          }
+        }
+      }
+    },
+    "create-ecdh": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.4.tgz",
+      "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=",
+      "requires": {
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.5.3"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og="
+        }
+      }
+    },
+    "create-hash": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz",
+      "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
+      }
+    },
+    "create-hmac": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz",
+      "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
+      "requires": {
+        "cipher-base": "^1.0.3",
+        "create-hash": "^1.1.0",
+        "inherits": "^2.0.1",
+        "ripemd160": "^2.0.0",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
+    "cross-env": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npm.taobao.org/cross-env/download/cross-env-7.0.3.tgz",
+      "integrity": "sha1-hlJkspZ33AFbqEGJGJZd0jL8VM8=",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^7.0.1"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz",
+          "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz",
+          "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz",
+          "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896304371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz",
+          "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
+          "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
+          "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "cross-spawn": {
+      "version": "6.0.5",
+      "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz",
+      "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
+      "dev": true,
+      "requires": {
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      }
+    },
+    "crypt": {
+      "version": "0.0.2",
+      "resolved": "https://registry.nlark.com/crypt/download/crypt-0.0.2.tgz",
+      "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
+    },
+    "crypto-browserify": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
+      "requires": {
+        "browserify-cipher": "^1.0.0",
+        "browserify-sign": "^4.0.0",
+        "create-ecdh": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.0",
+        "diffie-hellman": "^5.0.0",
+        "inherits": "^2.0.1",
+        "pbkdf2": "^3.0.3",
+        "public-encrypt": "^4.0.0",
+        "randombytes": "^2.0.0",
+        "randomfill": "^1.0.3"
+      }
+    },
+    "css": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npm.taobao.org/css/download/css-2.2.4.tgz",
+      "integrity": "sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk=",
+      "requires": {
+        "inherits": "^2.0.3",
+        "source-map": "^0.6.1",
+        "source-map-resolve": "^0.5.2",
+        "urix": "^0.1.0"
+      }
+    },
+    "css-color-names": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz",
+      "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+      "dev": true
+    },
+    "css-declaration-sorter": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz",
+      "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.1",
+        "timsort": "^0.3.0"
+      }
+    },
+    "css-loader": {
+      "version": "3.6.0",
+      "resolved": "https://registry.nlark.com/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1626725891008&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz",
+      "integrity": "sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^5.3.1",
+        "cssesc": "^3.0.0",
+        "icss-utils": "^4.1.1",
+        "loader-utils": "^1.2.3",
+        "normalize-path": "^3.0.0",
+        "postcss": "^7.0.32",
+        "postcss-modules-extract-imports": "^2.0.0",
+        "postcss-modules-local-by-default": "^3.0.2",
+        "postcss-modules-scope": "^2.2.0",
+        "postcss-modules-values": "^3.0.0",
+        "postcss-value-parser": "^4.1.0",
+        "schema-utils": "^2.7.0",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        },
+        "cssesc": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
+          "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
+          "dev": true
+        },
+        "postcss-value-parser": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz",
+          "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=",
+          "dev": true
+        },
+        "schema-utils": {
+          "version": "2.7.1",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz",
+          "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
+          "dev": true,
+          "requires": {
+            "@types/json-schema": "^7.0.5",
+            "ajv": "^6.12.4",
+            "ajv-keywords": "^3.5.2"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        }
+      }
+    },
+    "css-select": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/css-select/download/css-select-2.1.0.tgz",
+      "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=",
+      "dev": true,
+      "requires": {
+        "boolbase": "^1.0.0",
+        "css-what": "^3.2.1",
+        "domutils": "^1.7.0",
+        "nth-check": "^1.0.2"
+      }
+    },
+    "css-select-base-adapter": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz",
+      "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=",
+      "dev": true
+    },
+    "css-tree": {
+      "version": "1.0.0-alpha.37",
+      "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.37.tgz",
+      "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=",
+      "dev": true,
+      "requires": {
+        "mdn-data": "2.0.4",
+        "source-map": "^0.6.1"
+      }
+    },
+    "css-what": {
+      "version": "3.4.2",
+      "resolved": "https://registry.nlark.com/css-what/download/css-what-3.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-3.4.2.tgz",
+      "integrity": "sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ=",
+      "dev": true
+    },
+    "cssesc": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-2.0.0.tgz",
+      "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=",
+      "dev": true
+    },
+    "cssnano": {
+      "version": "4.1.11",
+      "resolved": "https://registry.nlark.com/cssnano/download/cssnano-4.1.11.tgz",
+      "integrity": "sha1-x7X1uB2iacsf2YLLlgwSAJEMmpk=",
+      "dev": true,
+      "requires": {
+        "cosmiconfig": "^5.0.0",
+        "cssnano-preset-default": "^4.0.8",
+        "is-resolvable": "^1.0.0",
+        "postcss": "^7.0.0"
+      }
+    },
+    "cssnano-preset-default": {
+      "version": "4.0.8",
+      "resolved": "https://registry.nlark.com/cssnano-preset-default/download/cssnano-preset-default-4.0.8.tgz?cache=0&sync_timestamp=1629280558765&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssnano-preset-default%2Fdownload%2Fcssnano-preset-default-4.0.8.tgz",
+      "integrity": "sha1-kgYisfwelaNOiDggPxOXpQTy0/8=",
+      "dev": true,
+      "requires": {
+        "css-declaration-sorter": "^4.0.1",
+        "cssnano-util-raw-cache": "^4.0.1",
+        "postcss": "^7.0.0",
+        "postcss-calc": "^7.0.1",
+        "postcss-colormin": "^4.0.3",
+        "postcss-convert-values": "^4.0.1",
+        "postcss-discard-comments": "^4.0.2",
+        "postcss-discard-duplicates": "^4.0.2",
+        "postcss-discard-empty": "^4.0.1",
+        "postcss-discard-overridden": "^4.0.1",
+        "postcss-merge-longhand": "^4.0.11",
+        "postcss-merge-rules": "^4.0.3",
+        "postcss-minify-font-values": "^4.0.2",
+        "postcss-minify-gradients": "^4.0.2",
+        "postcss-minify-params": "^4.0.2",
+        "postcss-minify-selectors": "^4.0.2",
+        "postcss-normalize-charset": "^4.0.1",
+        "postcss-normalize-display-values": "^4.0.2",
+        "postcss-normalize-positions": "^4.0.2",
+        "postcss-normalize-repeat-style": "^4.0.2",
+        "postcss-normalize-string": "^4.0.2",
+        "postcss-normalize-timing-functions": "^4.0.2",
+        "postcss-normalize-unicode": "^4.0.1",
+        "postcss-normalize-url": "^4.0.1",
+        "postcss-normalize-whitespace": "^4.0.2",
+        "postcss-ordered-values": "^4.1.2",
+        "postcss-reduce-initial": "^4.0.3",
+        "postcss-reduce-transforms": "^4.0.2",
+        "postcss-svgo": "^4.0.3",
+        "postcss-unique-selectors": "^4.0.1"
+      }
+    },
+    "cssnano-util-get-arguments": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz",
+      "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
+      "dev": true
+    },
+    "cssnano-util-get-match": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz",
+      "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
+      "dev": true
+    },
+    "cssnano-util-raw-cache": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz",
+      "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "cssnano-util-same-parent": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz",
+      "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=",
+      "dev": true
+    },
+    "csso": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npm.taobao.org/csso/download/csso-4.2.0.tgz",
+      "integrity": "sha1-6jpWE0bo3J9UbW/r7dUBh884lSk=",
+      "dev": true,
+      "requires": {
+        "css-tree": "^1.1.2"
+      },
+      "dependencies": {
+        "css-tree": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.1.3.tgz",
+          "integrity": "sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=",
+          "dev": true,
+          "requires": {
+            "mdn-data": "2.0.14",
+            "source-map": "^0.6.1"
+          }
+        },
+        "mdn-data": {
+          "version": "2.0.14",
+          "resolved": "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.14.tgz",
+          "integrity": "sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=",
+          "dev": true
+        }
+      }
+    },
+    "cssom": {
+      "version": "0.4.4",
+      "resolved": "https://registry.nlark.com/cssom/download/cssom-0.4.4.tgz?cache=0&sync_timestamp=1624219249710&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssom%2Fdownload%2Fcssom-0.4.4.tgz",
+      "integrity": "sha1-WmbPk9LQtmHYC/akT7ZfXC5OChA=",
+      "dev": true
+    },
+    "cssstyle": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/cssstyle/download/cssstyle-2.3.0.tgz",
+      "integrity": "sha1-/2ZaDdvcMYZLCWR/NBY0Q9kLCFI=",
+      "dev": true,
+      "requires": {
+        "cssom": "~0.3.6"
+      },
+      "dependencies": {
+        "cssom": {
+          "version": "0.3.8",
+          "resolved": "https://registry.nlark.com/cssom/download/cssom-0.3.8.tgz?cache=0&sync_timestamp=1624219249710&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssom%2Fdownload%2Fcssom-0.3.8.tgz",
+          "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=",
+          "dev": true
+        }
+      }
+    },
+    "csstype": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.0.tgz",
+      "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
+    },
+    "currently-unhandled": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz",
+      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+      "requires": {
+        "array-find-index": "^1.0.1"
+      }
+    },
+    "cyclist": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz",
+      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "data-urls": {
+      "version": "1.1.0",
+      "resolved": "https://registry.nlark.com/data-urls/download/data-urls-1.1.0.tgz?cache=0&sync_timestamp=1626722283326&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdata-urls%2Fdownload%2Fdata-urls-1.1.0.tgz",
+      "integrity": "sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4=",
+      "dev": true,
+      "requires": {
+        "abab": "^2.0.0",
+        "whatwg-mimetype": "^2.2.0",
+        "whatwg-url": "^7.0.0"
+      }
+    },
+    "dayjs": {
+      "version": "1.11.9",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
+      "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
+    },
+    "de-indent": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
+      "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0="
+    },
+    "debug": {
+      "version": "4.3.2",
+      "resolved": "https://registry.nlark.com/debug/download/debug-4.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-4.3.2.tgz",
+      "integrity": "sha1-8KScGKyHeeMdSgxgKd+3aHPHQos=",
+      "requires": {
+        "ms": "2.1.2"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1610348670939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+    },
+    "deep-equal": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&sync_timestamp=1606860101281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz",
+      "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
+      "dev": true,
+      "requires": {
+        "is-arguments": "^1.0.4",
+        "is-date-object": "^1.0.1",
+        "is-regex": "^1.0.4",
+        "object-is": "^1.0.1",
+        "object-keys": "^1.1.1",
+        "regexp.prototype.flags": "^1.2.0"
+      }
+    },
+    "deep-extend": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz",
+      "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=",
+      "dev": true
+    },
+    "deep-is": {
+      "version": "0.1.4",
+      "resolved": "https://registry.nlark.com/deep-is/download/deep-is-0.1.4.tgz?cache=0&sync_timestamp=1630774538962&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdeep-is%2Fdownload%2Fdeep-is-0.1.4.tgz",
+      "integrity": "sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE="
+    },
+    "deepmerge": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1606805746825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz",
+      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=",
+      "dev": true
+    },
+    "default-gateway": {
+      "version": "5.0.5",
+      "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-5.0.5.tgz?cache=0&sync_timestamp=1610365816953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-5.0.5.tgz",
+      "integrity": "sha1-T9a9XShV05s0zFpZUFSG6ar8mxA=",
+      "dev": true,
+      "requires": {
+        "execa": "^3.3.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz",
+          "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "execa": {
+          "version": "3.4.0",
+          "resolved": "https://registry.nlark.com/execa/download/execa-3.4.0.tgz",
+          "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^7.0.0",
+            "get-stream": "^5.0.0",
+            "human-signals": "^1.1.1",
+            "is-stream": "^2.0.0",
+            "merge-stream": "^2.0.0",
+            "npm-run-path": "^4.0.0",
+            "onetime": "^5.1.0",
+            "p-finally": "^2.0.0",
+            "signal-exit": "^3.0.2",
+            "strip-final-newline": "^2.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz",
+          "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "is-stream": {
+          "version": "2.0.1",
+          "resolved": "https://registry.nlark.com/is-stream/download/is-stream-2.0.1.tgz",
+          "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=",
+          "dev": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1617823824094&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz",
+          "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+          "dev": true
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz",
+          "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1617889786861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz",
+          "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "p-finally": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz",
+          "integrity": "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=",
+          "dev": true
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz",
+          "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz",
+          "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896304371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz",
+          "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
+          "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
+          "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "defaults": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz",
+      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+      "dev": true,
+      "requires": {
+        "clone": "^1.0.2"
+      }
+    },
+    "define-properties": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz",
+      "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
+      "requires": {
+        "object-keys": "^1.0.12"
+      }
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz",
+      "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
+      "requires": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "del": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz",
+      "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=",
+      "dev": true,
+      "requires": {
+        "@types/glob": "^7.1.1",
+        "globby": "^6.1.0",
+        "is-path-cwd": "^2.0.0",
+        "is-path-in-cwd": "^2.0.0",
+        "p-map": "^2.0.0",
+        "pify": "^4.0.1",
+        "rimraf": "^2.6.3"
+      },
+      "dependencies": {
+        "globby": {
+          "version": "6.1.0",
+          "resolved": "https://registry.nlark.com/globby/download/globby-6.1.0.tgz",
+          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+          "dev": true,
+          "requires": {
+            "array-union": "^1.0.1",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "2.3.0",
+              "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+              "dev": true
+            }
+          }
+        }
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+    },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+    },
+    "des.js": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz",
+      "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=",
+      "requires": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+    },
+    "detect-newline": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/detect-newline/download/detect-newline-3.1.0.tgz",
+      "integrity": "sha1-V29d/GOuGhkv8ZLYrTr2MImRtlE=",
+      "dev": true
+    },
+    "detect-node": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/detect-node/download/detect-node-2.1.0.tgz",
+      "integrity": "sha1-yccHdaScPQO8LAbZpzvlUPl4+LE=",
+      "dev": true
+    },
+    "diff": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/diff/download/diff-4.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-4.0.2.tgz",
+      "integrity": "sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=",
+      "dev": true
+    },
+    "diff-sequences": {
+      "version": "25.2.6",
+      "resolved": "https://registry.nlark.com/diff-sequences/download/diff-sequences-25.2.6.tgz?cache=0&sync_timestamp=1624900526129&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdiff-sequences%2Fdownload%2Fdiff-sequences-25.2.6.tgz",
+      "integrity": "sha1-X0Z8AO3TU1K3vKRteSfWDmh6dt0=",
+      "dev": true
+    },
+    "diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
+      "requires": {
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og="
+        }
+      }
+    },
+    "dir-glob": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz",
+      "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=",
+      "dev": true,
+      "requires": {
+        "path-type": "^3.0.0"
+      }
+    },
+    "dns-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz",
+      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+      "dev": true
+    },
+    "dns-packet": {
+      "version": "1.3.4",
+      "resolved": "https://registry.nlark.com/dns-packet/download/dns-packet-1.3.4.tgz",
+      "integrity": "sha1-40VQZYJKJQe6iGxVqJljuxB97G8=",
+      "dev": true,
+      "requires": {
+        "ip": "^1.1.0",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "dns-txt": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz",
+      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+      "dev": true,
+      "requires": {
+        "buffer-indexof": "^1.0.0"
+      }
+    },
+    "dom-converter": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz",
+      "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=",
+      "dev": true,
+      "requires": {
+        "utila": "~0.4"
+      }
+    },
+    "dom-serializer": {
+      "version": "0.2.2",
+      "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1621256858583&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz",
+      "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^2.0.1",
+        "entities": "^2.0.0"
+      },
+      "dependencies": {
+        "domelementtype": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz",
+          "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+          "dev": true
+        }
+      }
+    },
+    "domain-browser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.nlark.com/domain-browser/download/domain-browser-1.2.0.tgz",
+      "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto="
+    },
+    "domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz",
+      "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=",
+      "dev": true
+    },
+    "domexception": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz",
+      "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=",
+      "dev": true,
+      "requires": {
+        "webidl-conversions": "^4.0.2"
+      }
+    },
+    "domhandler": {
+      "version": "4.2.2",
+      "resolved": "https://registry.nlark.com/domhandler/download/domhandler-4.2.2.tgz?cache=0&sync_timestamp=1630246778110&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomhandler%2Fdownload%2Fdomhandler-4.2.2.tgz",
+      "integrity": "sha1-6CXXIdGahrjCAaNSZOImxnjudV8=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^2.2.0"
+      },
+      "dependencies": {
+        "domelementtype": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz",
+          "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+          "dev": true
+        }
+      }
+    },
+    "domutils": {
+      "version": "1.7.0",
+      "resolved": "https://registry.nlark.com/domutils/download/domutils-1.7.0.tgz?cache=0&sync_timestamp=1630106535879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-1.7.0.tgz",
+      "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=",
+      "dev": true,
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "dot-prop": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz?cache=0&sync_timestamp=1605778235569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.3.0.tgz",
+      "integrity": "sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog=",
+      "dev": true,
+      "requires": {
+        "is-obj": "^2.0.0"
+      }
+    },
+    "dotenv": {
+      "version": "8.6.0",
+      "resolved": "https://registry.nlark.com/dotenv/download/dotenv-8.6.0.tgz?cache=0&sync_timestamp=1621633079842&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdotenv%2Fdownload%2Fdotenv-8.6.0.tgz",
+      "integrity": "sha1-Bhr2ZNGff02PxuT/m1hM4jety4s=",
+      "dev": true
+    },
+    "dotenv-expand": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-5.1.0.tgz",
+      "integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=",
+      "dev": true
+    },
+    "duplexer": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz",
+      "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=",
+      "dev": true
+    },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.nlark.com/duplexify/download/duplexify-3.7.1.tgz",
+      "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=",
+      "requires": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "easy-stack": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.1.tgz?cache=0&sync_timestamp=1605130346827&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feasy-stack%2Fdownload%2Feasy-stack-1.0.1.tgz",
+      "integrity": "sha1-iv5CZGJpiMq7EfPHBMzQyDVBEGY=",
+      "dev": true
+    },
+    "ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+    },
+    "ejs": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz",
+      "integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.3.830",
+      "resolved": "https://registry.nlark.com/electron-to-chromium/download/electron-to-chromium-1.3.830.tgz?cache=0&sync_timestamp=1630706657610&other_urls=https%3A%2F%2Fregistry.nlark.com%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.830.tgz",
+      "integrity": "sha1-QOMUQgT4yhGyzr7IPPFMINNJkjY="
+    },
+    "elliptic": {
+      "version": "6.5.4",
+      "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.4.tgz?cache=0&sync_timestamp=1612290836352&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.4.tgz",
+      "integrity": "sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s=",
+      "requires": {
+        "bn.js": "^4.11.9",
+        "brorand": "^1.1.0",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.1",
+        "inherits": "^2.0.4",
+        "minimalistic-assert": "^1.0.1",
+        "minimalistic-crypto-utils": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og="
+        }
+      }
+    },
+    "emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1614682725186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz",
+      "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
+      "dev": true
+    },
+    "emojis-list": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz",
+      "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang="
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+    },
+    "end-of-stream": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz",
+      "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=",
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
+    "engine.io": {
+      "version": "3.5.0",
+      "resolved": "https://registry.nlark.com/engine.io/download/engine.io-3.5.0.tgz?cache=0&sync_timestamp=1630218940352&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fengine.io%2Fdownload%2Fengine.io-3.5.0.tgz",
+      "integrity": "sha1-nWuYXIo5sf6HzZHrAU3gVSJZghs=",
+      "requires": {
+        "accepts": "~1.3.4",
+        "base64id": "2.0.0",
+        "cookie": "~0.4.1",
+        "debug": "~4.1.0",
+        "engine.io-parser": "~2.2.0",
+        "ws": "~7.4.2"
+      },
+      "dependencies": {
+        "cookie": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.1.tgz",
+          "integrity": "sha1-r9cT/ibr0hupXOth+agRblClN9E="
+        },
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.nlark.com/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz",
+          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ws": {
+          "version": "7.4.6",
+          "resolved": "https://registry.nlark.com/ws/download/ws-7.4.6.tgz?cache=0&sync_timestamp=1630167206236&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-7.4.6.tgz",
+          "integrity": "sha1-VlTKjs3u5HwzqaS/bSjivimAN3w="
+        }
+      }
+    },
+    "engine.io-client": {
+      "version": "3.5.2",
+      "resolved": "https://registry.nlark.com/engine.io-client/download/engine.io-client-3.5.2.tgz?cache=0&sync_timestamp=1630218163928&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fengine.io-client%2Fdownload%2Fengine.io-client-3.5.2.tgz",
+      "integrity": "sha1-DvRzYhKUAE6c7r5zzvCvnjby9fo=",
+      "requires": {
+        "component-emitter": "~1.3.0",
+        "component-inherit": "0.0.3",
+        "debug": "~3.1.0",
+        "engine.io-parser": "~2.2.0",
+        "has-cors": "1.1.0",
+        "indexof": "0.0.1",
+        "parseqs": "0.0.6",
+        "parseuri": "0.0.6",
+        "ws": "~7.4.2",
+        "xmlhttprequest-ssl": "~1.6.2",
+        "yeast": "0.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        },
+        "ws": {
+          "version": "7.4.6",
+          "resolved": "https://registry.nlark.com/ws/download/ws-7.4.6.tgz?cache=0&sync_timestamp=1630167206236&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-7.4.6.tgz",
+          "integrity": "sha1-VlTKjs3u5HwzqaS/bSjivimAN3w="
+        }
+      }
+    },
+    "engine.io-parser": {
+      "version": "2.2.1",
+      "resolved": "https://registry.nlark.com/engine.io-parser/download/engine.io-parser-2.2.1.tgz",
+      "integrity": "sha1-V85WEdk3DulPmWQbWJ+UyX5PXac=",
+      "requires": {
+        "after": "0.8.2",
+        "arraybuffer.slice": "~0.0.7",
+        "base64-arraybuffer": "0.1.4",
+        "blob": "0.0.5",
+        "has-binary2": "~1.0.2"
+      },
+      "dependencies": {
+        "base64-arraybuffer": {
+          "version": "0.1.4",
+          "resolved": "https://registry.nlark.com/base64-arraybuffer/download/base64-arraybuffer-0.1.4.tgz?cache=0&sync_timestamp=1628588823959&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbase64-arraybuffer%2Fdownload%2Fbase64-arraybuffer-0.1.4.tgz",
+          "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
+        }
+      }
+    },
+    "enhanced-resolve": {
+      "version": "4.5.0",
+      "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-4.5.0.tgz?cache=0&sync_timestamp=1620663831689&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.5.0.tgz",
+      "integrity": "sha1-Lzz9hNvjtIfxjy2y7x4GSlccpew=",
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "memory-fs": "^0.5.0",
+        "tapable": "^1.0.0"
+      },
+      "dependencies": {
+        "memory-fs": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz",
+          "integrity": "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw=",
+          "requires": {
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
+          }
+        }
+      }
+    },
+    "entities": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/entities/download/entities-2.2.0.tgz?cache=0&sync_timestamp=1628508126700&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fentities%2Fdownload%2Fentities-2.2.0.tgz",
+      "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=",
+      "dev": true
+    },
+    "envinfo": {
+      "version": "6.0.1",
+      "resolved": "https://registry.nlark.com/envinfo/download/envinfo-6.0.1.tgz",
+      "integrity": "sha1-3sUfLdOPtKH7W/VoSIwGrR5+CKc=",
+      "dev": true
+    },
+    "errno": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.8.tgz",
+      "integrity": "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=",
+      "requires": {
+        "prr": "~1.0.1"
+      }
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz",
+      "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "error-stack-parser": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz",
+      "integrity": "sha1-WpmnB716TFinl5AtSNgoA+3mqtg=",
+      "dev": true,
+      "requires": {
+        "stackframe": "^1.1.1"
+      }
+    },
+    "es-abstract": {
+      "version": "1.18.5",
+      "resolved": "https://registry.nlark.com/es-abstract/download/es-abstract-1.18.5.tgz?cache=0&sync_timestamp=1627880509012&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fes-abstract%2Fdownload%2Fes-abstract-1.18.5.tgz",
+      "integrity": "sha1-mxDefUwgajWB/VshJCM+BNtJrhk=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "es-to-primitive": "^1.2.1",
+        "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.2",
+        "internal-slot": "^1.0.3",
+        "is-callable": "^1.2.3",
+        "is-negative-zero": "^2.0.1",
+        "is-regex": "^1.1.3",
+        "is-string": "^1.0.6",
+        "object-inspect": "^1.11.0",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.2",
+        "string.prototype.trimend": "^1.0.4",
+        "string.prototype.trimstart": "^1.0.4",
+        "unbox-primitive": "^1.0.1"
+      }
+    },
+    "es-to-primitive": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz",
+      "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=",
+      "dev": true,
+      "requires": {
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
+      }
+    },
+    "escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz?cache=0&sync_timestamp=1602567261690&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.1.1.tgz",
+      "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA="
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1618677243201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+    },
+    "escodegen": {
+      "version": "1.14.3",
+      "resolved": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz",
+      "integrity": "sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM=",
+      "requires": {
+        "esprima": "^4.0.1",
+        "estraverse": "^4.2.0",
+        "esutils": "^2.0.2",
+        "optionator": "^0.8.1",
+        "source-map": "~0.6.1"
+      }
+    },
+    "eslint-scope": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&sync_timestamp=1627081984408&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz",
+      "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=",
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz",
+      "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE="
+    },
+    "esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz",
+      "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
+      "requires": {
+        "estraverse": "^5.2.0"
+      },
+      "dependencies": {
+        "estraverse": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz",
+          "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA="
+        }
+      }
+    },
+    "estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz",
+      "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0="
+    },
+    "esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz",
+      "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q="
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+      "dev": true
+    },
+    "event-pubsub": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/event-pubsub/download/event-pubsub-4.3.0.tgz?cache=0&sync_timestamp=1606361593712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevent-pubsub%2Fdownload%2Fevent-pubsub-4.3.0.tgz",
+      "integrity": "sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=",
+      "dev": true
+    },
+    "eventemitter3": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz",
+      "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=",
+      "dev": true
+    },
+    "events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npm.taobao.org/events/download/events-3.3.0.tgz",
+      "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA="
+    },
+    "eventsource": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-1.1.0.tgz?cache=0&sync_timestamp=1616041716084&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventsource%2Fdownload%2Feventsource-1.1.0.tgz",
+      "integrity": "sha1-AOjKfJIQnpSw3fMtrGd9hBAoz68=",
+      "dev": true,
+      "requires": {
+        "original": "^1.0.0"
+      }
+    },
+    "evp_bytestokey": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz",
+      "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+      "requires": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "exec-sh": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npm.taobao.org/exec-sh/download/exec-sh-0.3.6.tgz?cache=0&sync_timestamp=1616788551774&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexec-sh%2Fdownload%2Fexec-sh-0.3.6.tgz",
+      "integrity": "sha1-/yZPnjJVGaYMteJzaSlDSDzKY7w=",
+      "dev": true
+    },
+    "execa": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/execa/download/execa-1.0.0.tgz",
+      "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^4.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      }
+    },
+    "exit": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz",
+      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+      "dev": true
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "requires": {
+        "debug": "^2.3.3",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "posix-character-classes": "^0.1.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
+    "expect": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/expect/download/expect-25.5.0.tgz?cache=0&sync_timestamp=1630058507221&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexpect%2Fdownload%2Fexpect-25.5.0.tgz",
+      "integrity": "sha1-8H+EhxKigTu1kWfaP7goyiH1i7o=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "ansi-styles": "^4.0.0",
+        "jest-get-type": "^25.2.6",
+        "jest-matcher-utils": "^25.5.0",
+        "jest-message-util": "^25.5.0",
+        "jest-regex-util": "^25.2.6"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        }
+      }
+    },
+    "express": {
+      "version": "4.17.1",
+      "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&sync_timestamp=1585189541025&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz",
+      "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.7",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.19.0",
+        "content-disposition": "0.5.3",
+        "content-type": "~1.0.4",
+        "cookie": "0.4.0",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "~1.1.2",
+        "fresh": "0.5.2",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.5",
+        "qs": "6.7.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.1.2",
+        "send": "0.17.1",
+        "serve-static": "1.14.1",
+        "setprototypeof": "1.1.1",
+        "statuses": "~1.5.0",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz?cache=0&sync_timestamp=1616385328325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.7.0.tgz",
+          "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=",
+          "dev": true
+        }
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz",
+      "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo="
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "requires": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz",
+          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz",
+      "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+      "requires": {
+        "array-unique": "^0.3.2",
+        "define-property": "^1.0.0",
+        "expand-brackets": "^2.1.4",
+        "extend-shallow": "^2.0.1",
+        "fragment-cache": "^0.2.1",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+    },
+    "fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU="
+    },
+    "fast-glob": {
+      "version": "2.2.7",
+      "resolved": "https://registry.nlark.com/fast-glob/download/fast-glob-2.2.7.tgz",
+      "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=",
+      "dev": true,
+      "requires": {
+        "@mrmlnc/readdir-enhanced": "^2.2.1",
+        "@nodelib/fs.stat": "^1.1.2",
+        "glob-parent": "^3.1.0",
+        "is-glob": "^4.0.0",
+        "merge2": "^1.2.3",
+        "micromatch": "^3.1.10"
+      }
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM="
+    },
+    "fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+    },
+    "faye-websocket": {
+      "version": "0.11.4",
+      "resolved": "https://registry.nlark.com/faye-websocket/download/faye-websocket-0.11.4.tgz?cache=0&sync_timestamp=1621895685919&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.11.4.tgz",
+      "integrity": "sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo=",
+      "dev": true,
+      "requires": {
+        "websocket-driver": ">=0.5.1"
+      }
+    },
+    "fb-watchman": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.1.tgz",
+      "integrity": "sha1-/IT7OdJwnPP/bXQ3BhV7tXCKioU=",
+      "dev": true,
+      "requires": {
+        "bser": "2.1.1"
+      }
+    },
+    "figgy-pudding": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz",
+      "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4="
+    },
+    "file-loader": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-4.3.0.tgz",
+      "integrity": "sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.2.3",
+        "schema-utils": "^2.5.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "2.7.1",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz",
+          "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
+          "dev": true,
+          "requires": {
+            "@types/json-schema": "^7.0.5",
+            "ajv": "^6.12.4",
+            "ajv-keywords": "^3.5.2"
+          }
+        }
+      }
+    },
+    "file-uri-to-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz",
+      "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=",
+      "optional": true
+    },
+    "filesize": {
+      "version": "3.6.1",
+      "resolved": "https://registry.nlark.com/filesize/download/filesize-3.6.1.tgz",
+      "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=",
+      "dev": true
+    },
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1",
+        "to-regex-range": "^2.1.0"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz",
+      "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "statuses": "~1.5.0",
+        "unpipe": "~1.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "find-cache-dir": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-2.1.0.tgz?cache=0&sync_timestamp=1630260035189&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-2.1.0.tgz",
+      "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=",
+      "requires": {
+        "commondir": "^1.0.1",
+        "make-dir": "^2.0.0",
+        "pkg-dir": "^3.0.0"
+      }
+    },
+    "find-up": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/find-up/download/find-up-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
+      "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+      "requires": {
+        "locate-path": "^3.0.0"
+      }
+    },
+    "flush-write-stream": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz",
+      "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=",
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      }
+    },
+    "flyio": {
+      "version": "0.6.14",
+      "resolved": "https://registry.npm.taobao.org/flyio/download/flyio-0.6.14.tgz",
+      "integrity": "sha1-xdg+t6m0/ByRWkY9LqbfznVcLW8=",
+      "requires": {
+        "request": "^2.85.0"
+      }
+    },
+    "follow-redirects": {
+      "version": "1.14.3",
+      "resolved": "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.3.tgz",
+      "integrity": "sha1-atp4EY2NJMruWVWVrM3ArGq9Ai4=",
+      "dev": true
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+    },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+    },
+    "fork-ts-checker-webpack-plugin": {
+      "version": "3.1.1",
+      "resolved": "https://registry.nlark.com/fork-ts-checker-webpack-plugin/download/fork-ts-checker-webpack-plugin-3.1.1.tgz",
+      "integrity": "sha1-oWQsDT5l9QwswXQunAqA9EH4axk=",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "^6.22.0",
+        "chalk": "^2.4.1",
+        "chokidar": "^3.3.0",
+        "micromatch": "^3.1.10",
+        "minimatch": "^3.0.4",
+        "semver": "^5.6.0",
+        "tapable": "^1.0.0",
+        "worker-rpc": "^0.1.0"
+      }
+    },
+    "fork-ts-checker-webpack-plugin-v5": {
+      "version": "npm:fork-ts-checker-webpack-plugin@5.2.1",
+      "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz",
+      "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "@babel/code-frame": "^7.8.3",
+        "@types/json-schema": "^7.0.5",
+        "chalk": "^4.1.0",
+        "cosmiconfig": "^6.0.0",
+        "deepmerge": "^4.2.2",
+        "fs-extra": "^9.0.0",
+        "memfs": "^3.1.2",
+        "minimatch": "^3.0.4",
+        "schema-utils": "2.7.0",
+        "semver": "^7.3.2",
+        "tapable": "^1.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "cosmiconfig": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
+          "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@types/parse-json": "^4.0.0",
+            "import-fresh": "^3.1.0",
+            "parse-json": "^5.0.0",
+            "path-type": "^4.0.0",
+            "yaml": "^1.7.2"
+          }
+        },
+        "deepmerge": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz",
+          "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==",
+          "dev": true,
+          "optional": true
+        },
+        "fs-extra": {
+          "version": "9.1.0",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+          "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "at-least-node": "^1.0.0",
+            "graceful-fs": "^4.2.0",
+            "jsonfile": "^6.0.1",
+            "universalify": "^2.0.0"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "import-fresh": {
+          "version": "3.3.0",
+          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+          "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "parent-module": "^1.0.0",
+            "resolve-from": "^4.0.0"
+          }
+        },
+        "jsonfile": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "graceful-fs": "^4.1.6",
+            "universalify": "^2.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "path-type": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+          "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+          "dev": true,
+          "optional": true
+        },
+        "resolve-from": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+          "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+          "dev": true,
+          "optional": true
+        },
+        "schema-utils": {
+          "version": "2.7.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
+          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@types/json-schema": "^7.0.4",
+            "ajv": "^6.12.2",
+            "ajv-keywords": "^3.4.1"
+          }
+        },
+        "semver": {
+          "version": "7.3.8",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+          "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "universalify": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+          "dev": true,
+          "optional": true
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "form-data": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz",
+      "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "formidable": {
+      "version": "1.2.2",
+      "resolved": "https://registry.nlark.com/formidable/download/formidable-1.2.2.tgz",
+      "integrity": "sha1-v2muopcpgmdfAIZTQrmCmG9rjdk="
+    },
+    "forwarded": {
+      "version": "0.2.0",
+      "resolved": "https://registry.nlark.com/forwarded/download/forwarded-0.2.0.tgz?cache=0&sync_timestamp=1622503451002&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fforwarded%2Fdownload%2Fforwarded-0.2.0.tgz",
+      "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=",
+      "dev": true
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz",
+      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+    },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs-extra": {
+      "version": "7.0.1",
+      "resolved": "https://registry.nlark.com/fs-extra/download/fs-extra-7.0.1.tgz",
+      "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=",
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
+      }
+    },
+    "fs-monkey": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
+      "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
+      "dev": true,
+      "optional": true
+    },
+    "fs-write-stream-atomic": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz",
+      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+    },
+    "fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz?cache=0&sync_timestamp=1612536422255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.3.2.tgz",
+      "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=",
+      "optional": true
+    },
+    "fstream": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npm.taobao.org/fstream/download/fstream-1.0.12.tgz",
+      "integrity": "sha1-Touo7i1Ivk99DeUFRVVI6uWTIEU=",
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "inherits": "~2.0.0",
+        "mkdirp": ">=0.5 0",
+        "rimraf": "2"
+      }
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
+      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
+    },
+    "gauge": {
+      "version": "2.7.4",
+      "resolved": "https://registry.nlark.com/gauge/download/gauge-2.7.4.tgz?cache=0&sync_timestamp=1627307653902&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fgauge%2Fdownload%2Fgauge-2.7.4.tgz",
+      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "requires": {
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz?cache=0&sync_timestamp=1618558856477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "gaze": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/gaze/download/gaze-1.1.3.tgz",
+      "integrity": "sha1-xEFzPhO5J6yMD/C0w7Az8ogSkko=",
+      "requires": {
+        "globule": "^1.0.0"
+      }
+    },
+    "gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA="
+    },
+    "get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz",
+      "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34="
+    },
+    "get-intrinsic": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.1.1.tgz?cache=0&sync_timestamp=1612364352840&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-intrinsic%2Fdownload%2Fget-intrinsic-1.1.1.tgz",
+      "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=",
+      "requires": {
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.1"
+      }
+    },
+    "get-package-type": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npm.taobao.org/get-package-type/download/get-package-type-0.1.0.tgz",
+      "integrity": "sha1-jeLYA8/0TfO8bEVuZmizbDkm4Ro=",
+      "dev": true
+    },
+    "get-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/get-stdin/download/get-stdin-4.0.1.tgz",
+      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
+    },
+    "get-stream": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz",
+      "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
+      "dev": true,
+      "requires": {
+        "pump": "^3.0.0"
+      }
+    },
+    "get-them-args": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/get-them-args/download/get-them-args-1.3.2.tgz",
+      "integrity": "sha1-dKILqKSr7OWuGZrQPyvMaP38m6U=",
+      "dev": true
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "glob": {
+      "version": "7.1.7",
+      "resolved": "https://registry.nlark.com/glob/download/glob-7.1.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob%2Fdownload%2Fglob-7.1.7.tgz",
+      "integrity": "sha1-Oxk+kjPwHULQs/eClLvutBj5SpA=",
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-parent": {
+      "version": "3.1.0",
+      "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1626760200164&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
+      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "requires": {
+        "is-glob": "^3.1.0",
+        "path-dirname": "^1.0.0"
+      },
+      "dependencies": {
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+          "requires": {
+            "is-extglob": "^2.1.0"
+          }
+        }
+      }
+    },
+    "glob-to-regexp": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz",
+      "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+      "dev": true
+    },
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.nlark.com/globals/download/globals-11.12.0.tgz",
+      "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4="
+    },
+    "globby": {
+      "version": "7.1.1",
+      "resolved": "https://registry.nlark.com/globby/download/globby-7.1.1.tgz",
+      "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+      "dev": true,
+      "requires": {
+        "array-union": "^1.0.1",
+        "dir-glob": "^2.0.0",
+        "glob": "^7.1.2",
+        "ignore": "^3.3.5",
+        "pify": "^3.0.0",
+        "slash": "^1.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
+    "globule": {
+      "version": "1.3.3",
+      "resolved": "https://registry.nlark.com/globule/download/globule-1.3.3.tgz",
+      "integrity": "sha1-gRkZ7qwatzROkF8uO+gKE0R5c8I=",
+      "requires": {
+        "glob": "~7.1.1",
+        "lodash": "~4.17.10",
+        "minimatch": "~3.0.2"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.2.8",
+      "resolved": "https://registry.nlark.com/graceful-fs/download/graceful-fs-4.2.8.tgz",
+      "integrity": "sha1-5BK40z9eAGWTy9PO5t+fLOu+gCo="
+    },
+    "growly": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz",
+      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+      "dev": true,
+      "optional": true
+    },
+    "gzip-size": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz?cache=0&sync_timestamp=1605523140245&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgzip-size%2Fdownload%2Fgzip-size-5.1.1.tgz",
+      "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=",
+      "dev": true,
+      "requires": {
+        "duplexer": "^0.1.1",
+        "pify": "^4.0.1"
+      }
+    },
+    "handle-thing": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz",
+      "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=",
+      "dev": true
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+    },
+    "har-validator": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz",
+      "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=",
+      "requires": {
+        "ajv": "^6.12.3",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
+      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+        }
+      }
+    },
+    "has-bigints": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/has-bigints/download/has-bigints-1.0.1.tgz?cache=0&sync_timestamp=1615461427142&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-bigints%2Fdownload%2Fhas-bigints-1.0.1.tgz",
+      "integrity": "sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM=",
+      "dev": true
+    },
+    "has-binary2": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.3.tgz",
+      "integrity": "sha1-d3asYn8+p3JQz8My2rfd9eT10R0=",
+      "requires": {
+        "isarray": "2.0.1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz",
+          "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+        }
+      }
+    },
+    "has-cors": {
+      "version": "1.1.0",
+      "resolved": "https://registry.nlark.com/has-cors/download/has-cors-1.1.0.tgz",
+      "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+    },
+    "has-symbols": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.2.tgz?cache=0&sync_timestamp=1614443577352&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.2.tgz",
+      "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM="
+    },
+    "has-tostringtag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/has-tostringtag/download/has-tostringtag-1.0.0.tgz",
+      "integrity": "sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU=",
+      "requires": {
+        "has-symbols": "^1.0.2"
+      }
+    },
+    "has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz",
+      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "hash-base": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz",
+      "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=",
+      "requires": {
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
+          "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY="
+        }
+      }
+    },
+    "hash-sum": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+      "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ="
+    },
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz",
+      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
+    "he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
+      "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8="
+    },
+    "hex-color-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz",
+      "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=",
+      "dev": true
+    },
+    "highlight.js": {
+      "version": "10.7.3",
+      "resolved": "https://registry.nlark.com/highlight.js/download/highlight.js-10.7.3.tgz",
+      "integrity": "sha1-aXJy45kTVuQMPKxWanTu9oF1ZTE=",
+      "dev": true
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+      "requires": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "hoopy": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/hoopy/download/hoopy-0.1.4.tgz",
+      "integrity": "sha1-YJIH1mEQADOpqUAq096mdzgcGx0=",
+      "dev": true
+    },
+    "hosted-git-info": {
+      "version": "2.8.9",
+      "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.9.tgz?cache=0&sync_timestamp=1617826545071&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.9.tgz",
+      "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k="
+    },
+    "hpack.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz",
+      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
+      }
+    },
+    "hsl-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz",
+      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+      "dev": true
+    },
+    "hsla-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz",
+      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+      "dev": true
+    },
+    "html-encoding-sniffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz",
+      "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=",
+      "dev": true,
+      "requires": {
+        "whatwg-encoding": "^1.0.1"
+      }
+    },
+    "html-entities": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.4.0.tgz",
+      "integrity": "sha1-z70bAdKvr5rcobEK59/6uYxx0tw=",
+      "dev": true
+    },
+    "html-escaper": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/html-escaper/download/html-escaper-2.0.2.tgz",
+      "integrity": "sha1-39YAJ9o2o238viNiYsAKWCJoFFM=",
+      "dev": true
+    },
+    "html-minifier": {
+      "version": "3.5.21",
+      "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz",
+      "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=",
+      "dev": true,
+      "requires": {
+        "camel-case": "3.0.x",
+        "clean-css": "4.2.x",
+        "commander": "2.17.x",
+        "he": "1.2.x",
+        "param-case": "2.1.x",
+        "relateurl": "0.2.x",
+        "uglify-js": "3.4.x"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.17.1",
+          "resolved": "https://registry.nlark.com/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1627358254258&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz",
+          "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=",
+          "dev": true
+        }
+      }
+    },
+    "html-tags": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz",
+      "integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=",
+      "dev": true
+    },
+    "html-webpack-plugin": {
+      "version": "3.2.0",
+      "resolved": "https://registry.nlark.com/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz?cache=0&sync_timestamp=1624607980294&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-3.2.0.tgz",
+      "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
+      "dev": true,
+      "requires": {
+        "html-minifier": "^3.2.3",
+        "loader-utils": "^0.2.16",
+        "lodash": "^4.17.3",
+        "pretty-error": "^2.0.2",
+        "tapable": "^1.0.0",
+        "toposort": "^1.0.0",
+        "util.promisify": "1.0.0"
+      },
+      "dependencies": {
+        "big.js": {
+          "version": "3.2.0",
+          "resolved": "https://registry.nlark.com/big.js/download/big.js-3.2.0.tgz",
+          "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
+          "dev": true
+        },
+        "emojis-list": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz",
+          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+          "dev": true
+        },
+        "json5": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz",
+          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+          "dev": true
+        },
+        "loader-utils": {
+          "version": "0.2.17",
+          "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz",
+          "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+          "dev": true,
+          "requires": {
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0",
+            "object-assign": "^4.0.1"
+          }
+        },
+        "util.promisify": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz?cache=0&sync_timestamp=1610159819836&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.0.tgz",
+          "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
+          "dev": true,
+          "requires": {
+            "define-properties": "^1.1.2",
+            "object.getownpropertydescriptors": "^2.0.3"
+          }
+        }
+      }
+    },
+    "htmlparser2": {
+      "version": "6.1.0",
+      "resolved": "https://registry.nlark.com/htmlparser2/download/htmlparser2-6.1.0.tgz?cache=0&sync_timestamp=1630242708769&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-6.1.0.tgz",
+      "integrity": "sha1-xNditsM3GgXb5l6UrkOp+EX7j7c=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^2.0.1",
+        "domhandler": "^4.0.0",
+        "domutils": "^2.5.2",
+        "entities": "^2.0.0"
+      },
+      "dependencies": {
+        "dom-serializer": {
+          "version": "1.3.2",
+          "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz?cache=0&sync_timestamp=1621256858583&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-1.3.2.tgz",
+          "integrity": "sha1-YgZDfTLO767HFhgDIwx6ILwbTZE=",
+          "dev": true,
+          "requires": {
+            "domelementtype": "^2.0.1",
+            "domhandler": "^4.2.0",
+            "entities": "^2.0.0"
+          }
+        },
+        "domelementtype": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz",
+          "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+          "dev": true
+        },
+        "domutils": {
+          "version": "2.8.0",
+          "resolved": "https://registry.nlark.com/domutils/download/domutils-2.8.0.tgz?cache=0&sync_timestamp=1630106535879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-2.8.0.tgz",
+          "integrity": "sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU=",
+          "dev": true,
+          "requires": {
+            "dom-serializer": "^1.0.1",
+            "domelementtype": "^2.2.0",
+            "domhandler": "^4.2.0"
+          }
+        }
+      }
+    },
+    "http-assert": {
+      "version": "1.5.0",
+      "resolved": "https://registry.nlark.com/http-assert/download/http-assert-1.5.0.tgz",
+      "integrity": "sha1-w4nM2HrBbtLfpiRv1zuSaqAOa48=",
+      "requires": {
+        "deep-equal": "~1.0.1",
+        "http-errors": "~1.8.0"
+      },
+      "dependencies": {
+        "deep-equal": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz?cache=0&sync_timestamp=1606860101281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.0.1.tgz",
+          "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+        },
+        "http-errors": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.8.0.tgz",
+          "integrity": "sha1-ddG75JfhBE9R5O6ecEpi8o0zZQc=",
+          "requires": {
+            "depd": "~1.1.2",
+            "inherits": "2.0.4",
+            "setprototypeof": "1.2.0",
+            "statuses": ">= 1.5.0 < 2",
+            "toidentifier": "1.0.0"
+          }
+        },
+        "setprototypeof": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.2.0.tgz",
+          "integrity": "sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ="
+        }
+      }
+    },
+    "http-deceiver": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz",
+      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+      "dev": true
+    },
+    "http-errors": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz",
+      "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
+      "requires": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.1",
+        "statuses": ">= 1.5.0 < 2",
+        "toidentifier": "1.0.0"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+        }
+      }
+    },
+    "http-parser-js": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.3.tgz?cache=0&sync_timestamp=1609540073700&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-parser-js%2Fdownload%2Fhttp-parser-js-0.5.3.tgz",
+      "integrity": "sha1-AdJwnHnUFpi7AdTezF6dpOSgM9k=",
+      "dev": true
+    },
+    "http-proxy": {
+      "version": "1.18.1",
+      "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz",
+      "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=",
+      "dev": true,
+      "requires": {
+        "eventemitter3": "^4.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "http-proxy-middleware": {
+      "version": "1.3.1",
+      "resolved": "https://registry.nlark.com/http-proxy-middleware/download/http-proxy-middleware-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-1.3.1.tgz",
+      "integrity": "sha1-Q3ANbZ7st0Gb8IahKND3IF2etmU=",
+      "dev": true,
+      "requires": {
+        "@types/http-proxy": "^1.17.5",
+        "http-proxy": "^1.18.1",
+        "is-glob": "^4.0.1",
+        "is-plain-obj": "^3.0.0",
+        "micromatch": "^4.0.2"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.4",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054885525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz",
+          "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.1",
+            "picomatch": "^2.2.3"
+          }
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
+    "https-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz",
+      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
+    },
+    "human-signals": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/human-signals/download/human-signals-1.1.1.tgz",
+      "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M=",
+      "dev": true
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.4.24.tgz",
+      "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "icss-replace-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz",
+      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0="
+    },
+    "icss-utils": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz?cache=0&sync_timestamp=1605801266348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz",
+      "integrity": "sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc=",
+      "requires": {
+        "postcss": "^7.0.14"
+      }
+    },
+    "ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz",
+      "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I="
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+    },
+    "ignore": {
+      "version": "3.3.10",
+      "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz",
+      "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
+      "dev": true
+    },
+    "immediate": {
+      "version": "3.0.6",
+      "resolved": "https://registry.nlark.com/immediate/download/immediate-3.0.6.tgz",
+      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+    },
+    "import-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz",
+      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+      "dev": true,
+      "requires": {
+        "import-from": "^2.1.0"
+      }
+    },
+    "import-fresh": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1608469532269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz",
+      "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+      "dev": true,
+      "requires": {
+        "caller-path": "^2.0.0",
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "import-from": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/import-from/download/import-from-2.1.0.tgz",
+      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "import-local": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz",
+      "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=",
+      "dev": true,
+      "requires": {
+        "pkg-dir": "^3.0.0",
+        "resolve-cwd": "^2.0.0"
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+    },
+    "in-publish": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/in-publish/download/in-publish-2.0.1.tgz",
+      "integrity": "sha1-lIsaU1yAMFYc6lIvc/ePS+NX4Aw="
+    },
+    "indent-string": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/indent-string/download/indent-string-2.1.0.tgz",
+      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "indexes-of": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz",
+      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+      "dev": true
+    },
+    "indexof": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz",
+      "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+    },
+    "infer-owner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz",
+      "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc="
+    },
+    "inflation": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/inflation/download/inflation-2.0.0.tgz",
+      "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8="
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz",
+      "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w="
+    },
+    "ini": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npm.taobao.org/ini/download/ini-1.3.8.tgz?cache=0&sync_timestamp=1607907810942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fini%2Fdownload%2Fini-1.3.8.tgz",
+      "integrity": "sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=",
+      "dev": true
+    },
+    "internal-ip": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz",
+      "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=",
+      "dev": true,
+      "requires": {
+        "default-gateway": "^4.2.0",
+        "ipaddr.js": "^1.9.0"
+      },
+      "dependencies": {
+        "default-gateway": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz?cache=0&sync_timestamp=1610365816953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz",
+          "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=",
+          "dev": true,
+          "requires": {
+            "execa": "^1.0.0",
+            "ip-regex": "^2.1.0"
+          }
+        }
+      }
+    },
+    "internal-slot": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/internal-slot/download/internal-slot-1.0.3.tgz",
+      "integrity": "sha1-c0fjB97uovqsKsYgXUvH00ln9Zw=",
+      "dev": true,
+      "requires": {
+        "get-intrinsic": "^1.1.0",
+        "has": "^1.0.3",
+        "side-channel": "^1.0.4"
+      }
+    },
+    "interpret": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/interpret/download/interpret-1.4.0.tgz",
+      "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4="
+    },
+    "intersection-observer": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npm.taobao.org/intersection-observer/download/intersection-observer-0.7.0.tgz",
+      "integrity": "sha1-7ha+6XjbU1FurS8KgVSwm0ALvck="
+    },
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+      "dev": true
+    },
+    "ip-regex": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+      "dev": true
+    },
+    "ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=",
+      "dev": true
+    },
+    "is-absolute-url": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/is-absolute-url/download/is-absolute-url-2.1.0.tgz?cache=0&sync_timestamp=1628691826939&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-2.1.0.tgz",
+      "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+      "dev": true
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-arguments": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/is-arguments/download/is-arguments-1.1.1.tgz?cache=0&sync_timestamp=1628202633313&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-arguments%2Fdownload%2Fis-arguments-1.1.1.tgz",
+      "integrity": "sha1-FbP4j9oB8ql/7ITKdhpWDxI++ps=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+    },
+    "is-bigint": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/is-bigint/download/is-bigint-1.0.4.tgz?cache=0&sync_timestamp=1628747504782&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-bigint%2Fdownload%2Fis-bigint-1.0.4.tgz",
+      "integrity": "sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM=",
+      "dev": true,
+      "requires": {
+        "has-bigints": "^1.0.1"
+      }
+    },
+    "is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz",
+      "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
+      "requires": {
+        "binary-extensions": "^2.0.0"
+      }
+    },
+    "is-boolean-object": {
+      "version": "1.1.2",
+      "resolved": "https://registry.nlark.com/is-boolean-object/download/is-boolean-object-1.1.2.tgz",
+      "integrity": "sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+      "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
+    },
+    "is-callable": {
+      "version": "1.2.4",
+      "resolved": "https://registry.nlark.com/is-callable/download/is-callable-1.2.4.tgz",
+      "integrity": "sha1-RzAdWN0CWUB4ZVR4U99tYf5HGUU=",
+      "dev": true
+    },
+    "is-ci": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz",
+      "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=",
+      "dev": true,
+      "requires": {
+        "ci-info": "^1.5.0"
+      }
+    },
+    "is-color-stop": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz",
+      "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+      "dev": true,
+      "requires": {
+        "css-color-names": "^0.0.4",
+        "hex-color-regex": "^1.1.0",
+        "hsl-regex": "^1.0.0",
+        "hsla-regex": "^1.0.0",
+        "rgb-regex": "^1.0.1",
+        "rgba-regex": "^1.0.0"
+      }
+    },
+    "is-core-module": {
+      "version": "2.6.0",
+      "resolved": "https://registry.nlark.com/is-core-module/download/is-core-module-2.6.0.tgz",
+      "integrity": "sha1-11U7JSb+Wbkro+QMjfdX7Ipwnhk=",
+      "requires": {
+        "has": "^1.0.3"
+      }
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-date-object": {
+      "version": "1.0.5",
+      "resolved": "https://registry.nlark.com/is-date-object/download/is-date-object-1.0.5.tgz?cache=0&sync_timestamp=1628202499310&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.5.tgz",
+      "integrity": "sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8=",
+      "dev": true,
+      "requires": {
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+      "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+      "requires": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0="
+        }
+      }
+    },
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+      "dev": true
+    },
+    "is-docker": {
+      "version": "2.2.1",
+      "resolved": "https://registry.nlark.com/is-docker/download/is-docker-2.2.1.tgz",
+      "integrity": "sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=",
+      "dev": true
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+    },
+    "is-finite": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-finite/download/is-finite-1.1.0.tgz?cache=0&sync_timestamp=1617779386826&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-finite%2Fdownload%2Fis-finite-1.1.0.tgz",
+      "integrity": "sha1-kEE1x3+0LAZB1qobzbxNqo2ggvM="
+    },
+    "is-fullwidth-code-point": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-2.0.0.tgz",
+      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+    },
+    "is-generator-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/is-generator-fn/download/is-generator-fn-2.1.0.tgz?cache=0&sync_timestamp=1628686122487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-generator-fn%2Fdownload%2Fis-generator-fn-2.1.0.tgz",
+      "integrity": "sha1-fRQK3DiarzARqPKipM+m+q3/sRg=",
+      "dev": true
+    },
+    "is-generator-function": {
+      "version": "1.0.10",
+      "resolved": "https://registry.nlark.com/is-generator-function/download/is-generator-function-1.0.10.tgz",
+      "integrity": "sha1-8VWLrxrBfg3up8BBXEODUf8rPHI=",
+      "requires": {
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-glob": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
+      "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-negative-zero": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.1.tgz?cache=0&sync_timestamp=1607123314998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-negative-zero%2Fdownload%2Fis-negative-zero-2.0.1.tgz",
+      "integrity": "sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ=",
+      "dev": true
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-number-object": {
+      "version": "1.0.6",
+      "resolved": "https://registry.nlark.com/is-number-object/download/is-number-object-1.0.6.tgz",
+      "integrity": "sha1-anqvg4x/BoalC0VT9+VKlklOifA=",
+      "dev": true,
+      "requires": {
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-obj": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz?cache=0&sync_timestamp=1618600242427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-obj%2Fdownload%2Fis-obj-2.0.0.tgz",
+      "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=",
+      "dev": true
+    },
+    "is-path-cwd": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/is-path-cwd/download/is-path-cwd-2.2.0.tgz",
+      "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=",
+      "dev": true
+    },
+    "is-path-in-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz?cache=0&sync_timestamp=1620047156679&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-2.1.0.tgz",
+      "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=",
+      "dev": true,
+      "requires": {
+        "is-path-inside": "^2.1.0"
+      }
+    },
+    "is-path-inside": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/is-path-inside/download/is-path-inside-2.1.0.tgz?cache=0&sync_timestamp=1620046845369&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-inside%2Fdownload%2Fis-path-inside-2.1.0.tgz",
+      "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=",
+      "dev": true,
+      "requires": {
+        "path-is-inside": "^1.0.2"
+      }
+    },
+    "is-plain-obj": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-3.0.0.tgz?cache=0&sync_timestamp=1618600554597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-3.0.0.tgz",
+      "integrity": "sha1-r28uoUrFpkYYOlu9tbqrvBVq2dc=",
+      "dev": true
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1599667279942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz",
+      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-regex": {
+      "version": "1.1.4",
+      "resolved": "https://registry.nlark.com/is-regex/download/is-regex-1.1.4.tgz?cache=0&sync_timestamp=1628221905423&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-regex%2Fdownload%2Fis-regex-1.1.4.tgz",
+      "integrity": "sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-resolvable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz",
+      "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=",
+      "dev": true
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.nlark.com/is-stream/download/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
+    },
+    "is-string": {
+      "version": "1.0.7",
+      "resolved": "https://registry.nlark.com/is-string/download/is-string-1.0.7.tgz?cache=0&sync_timestamp=1628213433356&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-string%2Fdownload%2Fis-string-1.0.7.tgz",
+      "integrity": "sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0=",
+      "dev": true,
+      "requires": {
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-symbol": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/is-symbol/download/is-symbol-1.0.4.tgz",
+      "integrity": "sha1-ptrJO2NbBjymhyI23oiRClevE5w=",
+      "dev": true,
+      "requires": {
+        "has-symbols": "^1.0.2"
+      }
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+    },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz",
+      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0="
+    },
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+    },
+    "istanbul-lib-coverage": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-3.0.0.tgz",
+      "integrity": "sha1-9ZRKN8cLVQsCp4pcOyBVsoDOyOw=",
+      "dev": true
+    },
+    "istanbul-lib-instrument": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-4.0.3.tgz",
+      "integrity": "sha1-hzxv/4l0UBGCIndGlqPyiQLXfB0=",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.7.5",
+        "@istanbuljs/schema": "^0.1.2",
+        "istanbul-lib-coverage": "^3.0.0",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        }
+      }
+    },
+    "istanbul-lib-report": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-3.0.0.tgz",
+      "integrity": "sha1-dRj+UupE3jcvRgp2tezan/tz2KY=",
+      "dev": true,
+      "requires": {
+        "istanbul-lib-coverage": "^3.0.0",
+        "make-dir": "^3.0.0",
+        "supports-color": "^7.1.0"
+      },
+      "dependencies": {
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "make-dir": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz",
+          "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
+          "dev": true,
+          "requires": {
+            "semver": "^6.0.0"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "istanbul-lib-source-maps": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-4.0.0.tgz",
+      "integrity": "sha1-dXQ85tlruG3H7kNSz2Nmoj8LGtk=",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.1",
+        "istanbul-lib-coverage": "^3.0.0",
+        "source-map": "^0.6.1"
+      }
+    },
+    "istanbul-reports": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-3.0.2.tgz",
+      "integrity": "sha1-1ZMhDlAAaDdQywn8BkTktuJ/1Ts=",
+      "dev": true,
+      "requires": {
+        "html-escaper": "^2.0.0",
+        "istanbul-lib-report": "^3.0.0"
+      }
+    },
+    "javascript-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-2.1.0.tgz",
+      "integrity": "sha1-J8dlOb4U2L0Sghmi1zGwkzeQTnk=",
+      "dev": true
+    },
+    "jest": {
+      "version": "25.5.4",
+      "resolved": "https://registry.nlark.com/jest/download/jest-25.5.4.tgz",
+      "integrity": "sha1-8hEHtkic/jKwds4q3K3uNYesuds=",
+      "dev": true,
+      "requires": {
+        "@jest/core": "^25.5.4",
+        "import-local": "^3.0.2",
+        "jest-cli": "^25.5.4"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "ci-info": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ci-info/download/ci-info-2.0.0.tgz",
+          "integrity": "sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=",
+          "dev": true
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
+          "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "import-local": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-3.0.2.tgz",
+          "integrity": "sha1-qM/QQx0d5KIZlwPQA+PmI2T6bbY=",
+          "dev": true,
+          "requires": {
+            "pkg-dir": "^4.2.0",
+            "resolve-cwd": "^3.0.0"
+          }
+        },
+        "is-ci": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-2.0.0.tgz",
+          "integrity": "sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw=",
+          "dev": true,
+          "requires": {
+            "ci-info": "^2.0.0"
+          }
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+          "dev": true
+        },
+        "jest-cli": {
+          "version": "25.5.4",
+          "resolved": "https://registry.nlark.com/jest-cli/download/jest-cli-25.5.4.tgz?cache=0&sync_timestamp=1630058524802&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-cli%2Fdownload%2Fjest-cli-25.5.4.tgz",
+          "integrity": "sha1-ufGoTRMBqSxcIXaEy3mECDHbnw0=",
+          "dev": true,
+          "requires": {
+            "@jest/core": "^25.5.4",
+            "@jest/test-result": "^25.5.0",
+            "@jest/types": "^25.5.0",
+            "chalk": "^3.0.0",
+            "exit": "^0.1.2",
+            "graceful-fs": "^4.2.4",
+            "import-local": "^3.0.2",
+            "is-ci": "^2.0.0",
+            "jest-config": "^25.5.4",
+            "jest-util": "^25.5.0",
+            "jest-validate": "^25.5.0",
+            "prompts": "^2.0.1",
+            "realpath-native": "^2.0.0",
+            "yargs": "^15.3.1"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz",
+          "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz",
+          "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-4.0.0.tgz",
+          "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1602858957553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz",
+          "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^4.0.0"
+          }
+        },
+        "resolve-cwd": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-cwd%2Fdownload%2Fresolve-cwd-3.0.0.tgz",
+          "integrity": "sha1-DwB18bslRHZs9zumpuKt/ryxPy0=",
+          "dev": true,
+          "requires": {
+            "resolve-from": "^5.0.0"
+          }
+        },
+        "resolve-from": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-5.0.0.tgz",
+          "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1618558856477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz",
+          "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "yargs": {
+          "version": "15.4.1",
+          "resolved": "https://registry.nlark.com/yargs/download/yargs-15.4.1.tgz",
+          "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=",
+          "dev": true,
+          "requires": {
+            "cliui": "^6.0.0",
+            "decamelize": "^1.2.0",
+            "find-up": "^4.1.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^4.2.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^18.1.2"
+          }
+        },
+        "yargs-parser": {
+          "version": "18.1.3",
+          "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1624233275366&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz",
+          "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
+        }
+      }
+    },
+    "jest-changed-files": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-changed-files/download/jest-changed-files-25.5.0.tgz?cache=0&sync_timestamp=1630058504235&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-changed-files%2Fdownload%2Fjest-changed-files-25.5.0.tgz",
+      "integrity": "sha1-FBzCNWfOs/U0Um+GFLo5QhODY0w=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "execa": "^3.2.0",
+        "throat": "^5.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz",
+          "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "execa": {
+          "version": "3.4.0",
+          "resolved": "https://registry.nlark.com/execa/download/execa-3.4.0.tgz",
+          "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^7.0.0",
+            "get-stream": "^5.0.0",
+            "human-signals": "^1.1.1",
+            "is-stream": "^2.0.0",
+            "merge-stream": "^2.0.0",
+            "npm-run-path": "^4.0.0",
+            "onetime": "^5.1.0",
+            "p-finally": "^2.0.0",
+            "signal-exit": "^3.0.2",
+            "strip-final-newline": "^2.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz",
+          "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "is-stream": {
+          "version": "2.0.1",
+          "resolved": "https://registry.nlark.com/is-stream/download/is-stream-2.0.1.tgz",
+          "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=",
+          "dev": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1617823824094&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz",
+          "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+          "dev": true
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz",
+          "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1617889786861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz",
+          "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "p-finally": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz",
+          "integrity": "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=",
+          "dev": true
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz",
+          "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz",
+          "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896304371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz",
+          "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
+          "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
+          "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "jest-config": {
+      "version": "25.5.4",
+      "resolved": "https://registry.nlark.com/jest-config/download/jest-config-25.5.4.tgz",
+      "integrity": "sha1-OOIFez+Xbvcwmyssjc0qcIpn8Cw=",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.1.0",
+        "@jest/test-sequencer": "^25.5.4",
+        "@jest/types": "^25.5.0",
+        "babel-jest": "^25.5.1",
+        "chalk": "^3.0.0",
+        "deepmerge": "^4.2.2",
+        "glob": "^7.1.1",
+        "graceful-fs": "^4.2.4",
+        "jest-environment-jsdom": "^25.5.0",
+        "jest-environment-node": "^25.5.0",
+        "jest-get-type": "^25.2.6",
+        "jest-jasmine2": "^25.5.4",
+        "jest-regex-util": "^25.2.6",
+        "jest-resolve": "^25.5.1",
+        "jest-util": "^25.5.0",
+        "jest-validate": "^25.5.0",
+        "micromatch": "^4.0.2",
+        "pretty-format": "^25.5.0",
+        "realpath-native": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "deepmerge": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-4.2.2.tgz?cache=0&sync_timestamp=1606805746825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-4.2.2.tgz",
+          "integrity": "sha1-RNLqNnm49NT/ujPwPYZfwee/SVU=",
+          "dev": true
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.4",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054885525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz",
+          "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.1",
+            "picomatch": "^2.2.3"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "jest-diff": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-diff/download/jest-diff-25.5.0.tgz?cache=0&sync_timestamp=1630058505714&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-diff%2Fdownload%2Fjest-diff-25.5.0.tgz",
+      "integrity": "sha1-HdJu1k+WZnwGjO8Ca2d9+gGvz6k=",
+      "dev": true,
+      "requires": {
+        "chalk": "^3.0.0",
+        "diff-sequences": "^25.2.6",
+        "jest-get-type": "^25.2.6",
+        "pretty-format": "^25.5.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-docblock": {
+      "version": "25.3.0",
+      "resolved": "https://registry.nlark.com/jest-docblock/download/jest-docblock-25.3.0.tgz?cache=0&sync_timestamp=1624900517083&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-docblock%2Fdownload%2Fjest-docblock-25.3.0.tgz",
+      "integrity": "sha1-i3d6J+NHfNd6FowFKQxHGldWI+8=",
+      "dev": true,
+      "requires": {
+        "detect-newline": "^3.0.0"
+      }
+    },
+    "jest-each": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-each/download/jest-each-25.5.0.tgz?cache=0&sync_timestamp=1630058504614&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-each%2Fdownload%2Fjest-each-25.5.0.tgz",
+      "integrity": "sha1-DDwnl+giXLe+x+TSSdzZa5NL5RY=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "chalk": "^3.0.0",
+        "jest-get-type": "^25.2.6",
+        "jest-util": "^25.5.0",
+        "pretty-format": "^25.5.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-environment-jsdom": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-environment-jsdom/download/jest-environment-jsdom-25.5.0.tgz",
+      "integrity": "sha1-3L5NouqZdweZcEDs9uJWCuxOmDQ=",
+      "dev": true,
+      "requires": {
+        "@jest/environment": "^25.5.0",
+        "@jest/fake-timers": "^25.5.0",
+        "@jest/types": "^25.5.0",
+        "jest-mock": "^25.5.0",
+        "jest-util": "^25.5.0",
+        "jsdom": "^15.2.1"
+      }
+    },
+    "jest-environment-node": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-environment-node/download/jest-environment-node-25.5.0.tgz",
+      "integrity": "sha1-D1UnDZSASQKYjmStyjfGzg99B6E=",
+      "dev": true,
+      "requires": {
+        "@jest/environment": "^25.5.0",
+        "@jest/fake-timers": "^25.5.0",
+        "@jest/types": "^25.5.0",
+        "jest-mock": "^25.5.0",
+        "jest-util": "^25.5.0",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        }
+      }
+    },
+    "jest-get-type": {
+      "version": "25.2.6",
+      "resolved": "https://registry.nlark.com/jest-get-type/download/jest-get-type-25.2.6.tgz?cache=0&sync_timestamp=1624900515245&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-get-type%2Fdownload%2Fjest-get-type-25.2.6.tgz",
+      "integrity": "sha1-Cwoy+riQi0TVCL6BaBSH26u42Hc=",
+      "dev": true
+    },
+    "jest-haste-map": {
+      "version": "25.5.1",
+      "resolved": "https://registry.nlark.com/jest-haste-map/download/jest-haste-map-25.5.1.tgz",
+      "integrity": "sha1-HfEPcWwdlOYKHr93mMn7PaJiCUM=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "@types/graceful-fs": "^4.1.2",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "fsevents": "^2.1.2",
+        "graceful-fs": "^4.2.4",
+        "jest-serializer": "^25.5.0",
+        "jest-util": "^25.5.0",
+        "jest-worker": "^25.5.0",
+        "micromatch": "^4.0.2",
+        "sane": "^4.0.3",
+        "walker": "^1.0.7",
+        "which": "^2.0.2"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.4",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054885525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz",
+          "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.1",
+            "picomatch": "^2.2.3"
+          }
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
+          "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "jest-jasmine2": {
+      "version": "25.5.4",
+      "resolved": "https://registry.nlark.com/jest-jasmine2/download/jest-jasmine2-25.5.4.tgz",
+      "integrity": "sha1-ZsqLMo+xo8U2SBb4lY9pcKhSaWg=",
+      "dev": true,
+      "requires": {
+        "@babel/traverse": "^7.1.0",
+        "@jest/environment": "^25.5.0",
+        "@jest/source-map": "^25.5.0",
+        "@jest/test-result": "^25.5.0",
+        "@jest/types": "^25.5.0",
+        "chalk": "^3.0.0",
+        "co": "^4.6.0",
+        "expect": "^25.5.0",
+        "is-generator-fn": "^2.0.0",
+        "jest-each": "^25.5.0",
+        "jest-matcher-utils": "^25.5.0",
+        "jest-message-util": "^25.5.0",
+        "jest-runtime": "^25.5.4",
+        "jest-snapshot": "^25.5.1",
+        "jest-util": "^25.5.0",
+        "pretty-format": "^25.5.0",
+        "throat": "^5.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-leak-detector": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-leak-detector/download/jest-leak-detector-25.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-leak-detector%2Fdownload%2Fjest-leak-detector-25.5.0.tgz",
+      "integrity": "sha1-IpHGKUsM5AQkG7Vv5g4tDD408Ls=",
+      "dev": true,
+      "requires": {
+        "jest-get-type": "^25.2.6",
+        "pretty-format": "^25.5.0"
+      }
+    },
+    "jest-matcher-utils": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-matcher-utils/download/jest-matcher-utils-25.5.0.tgz",
+      "integrity": "sha1-+8mKEtcw5dJFPX8e1KTZSONLeGc=",
+      "dev": true,
+      "requires": {
+        "chalk": "^3.0.0",
+        "jest-diff": "^25.5.0",
+        "jest-get-type": "^25.2.6",
+        "pretty-format": "^25.5.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-message-util": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-message-util/download/jest-message-util-25.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-message-util%2Fdownload%2Fjest-message-util-25.5.0.tgz",
+      "integrity": "sha1-6hHZMgTMeul0VuHYcWJRGFuIgOo=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@jest/types": "^25.5.0",
+        "@types/stack-utils": "^1.0.1",
+        "chalk": "^3.0.0",
+        "graceful-fs": "^4.2.4",
+        "micromatch": "^4.0.2",
+        "slash": "^3.0.0",
+        "stack-utils": "^1.0.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.4",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054885525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz",
+          "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.1",
+            "picomatch": "^2.2.3"
+          }
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+          "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "jest-mock": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-mock/download/jest-mock-25.5.0.tgz",
+      "integrity": "sha1-qRpU2r0U437NYWZda24GNgpVOHo=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0"
+      }
+    },
+    "jest-pnp-resolver": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/jest-pnp-resolver/download/jest-pnp-resolver-1.2.2.tgz",
+      "integrity": "sha1-twSsCuAoqJEIpNBAs/kZ393I4zw=",
+      "dev": true
+    },
+    "jest-regex-util": {
+      "version": "25.2.6",
+      "resolved": "https://registry.nlark.com/jest-regex-util/download/jest-regex-util-25.2.6.tgz?cache=0&sync_timestamp=1624900517984&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-regex-util%2Fdownload%2Fjest-regex-util-25.2.6.tgz",
+      "integrity": "sha1-2EfTi6FdIRjTsGOQBWAo0PL9OWQ=",
+      "dev": true
+    },
+    "jest-resolve": {
+      "version": "25.5.1",
+      "resolved": "https://registry.nlark.com/jest-resolve/download/jest-resolve-25.5.1.tgz",
+      "integrity": "sha1-Dm+8+nwm0qX+j0VgiNwzKnkmaCk=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "browser-resolve": "^1.11.3",
+        "chalk": "^3.0.0",
+        "graceful-fs": "^4.2.4",
+        "jest-pnp-resolver": "^1.2.1",
+        "read-pkg-up": "^7.0.1",
+        "realpath-native": "^2.0.0",
+        "resolve": "^1.17.0",
+        "slash": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+          "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-resolve-dependencies": {
+      "version": "25.5.4",
+      "resolved": "https://registry.nlark.com/jest-resolve-dependencies/download/jest-resolve-dependencies-25.5.4.tgz",
+      "integrity": "sha1-hVAfU5V8jjvkRuhjp0d3taFzl6c=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "jest-regex-util": "^25.2.6",
+        "jest-snapshot": "^25.5.1"
+      }
+    },
+    "jest-runner": {
+      "version": "25.5.4",
+      "resolved": "https://registry.nlark.com/jest-runner/download/jest-runner-25.5.4.tgz?cache=0&sync_timestamp=1630058505595&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-runner%2Fdownload%2Fjest-runner-25.5.4.tgz",
+      "integrity": "sha1-/+xd84ddpfXIeK5tChe45OzXxx0=",
+      "dev": true,
+      "requires": {
+        "@jest/console": "^25.5.0",
+        "@jest/environment": "^25.5.0",
+        "@jest/test-result": "^25.5.0",
+        "@jest/types": "^25.5.0",
+        "chalk": "^3.0.0",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.2.4",
+        "jest-config": "^25.5.4",
+        "jest-docblock": "^25.3.0",
+        "jest-haste-map": "^25.5.1",
+        "jest-jasmine2": "^25.5.4",
+        "jest-leak-detector": "^25.5.0",
+        "jest-message-util": "^25.5.0",
+        "jest-resolve": "^25.5.1",
+        "jest-runtime": "^25.5.4",
+        "jest-util": "^25.5.0",
+        "jest-worker": "^25.5.0",
+        "source-map-support": "^0.5.6",
+        "throat": "^5.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-runtime": {
+      "version": "25.5.4",
+      "resolved": "https://registry.nlark.com/jest-runtime/download/jest-runtime-25.5.4.tgz?cache=0&sync_timestamp=1630058501659&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-runtime%2Fdownload%2Fjest-runtime-25.5.4.tgz",
+      "integrity": "sha1-3Jgf4sshN6vNMZ50zK5/fu/7+qs=",
+      "dev": true,
+      "requires": {
+        "@jest/console": "^25.5.0",
+        "@jest/environment": "^25.5.0",
+        "@jest/globals": "^25.5.2",
+        "@jest/source-map": "^25.5.0",
+        "@jest/test-result": "^25.5.0",
+        "@jest/transform": "^25.5.1",
+        "@jest/types": "^25.5.0",
+        "@types/yargs": "^15.0.0",
+        "chalk": "^3.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "exit": "^0.1.2",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.4",
+        "jest-config": "^25.5.4",
+        "jest-haste-map": "^25.5.1",
+        "jest-message-util": "^25.5.0",
+        "jest-mock": "^25.5.0",
+        "jest-regex-util": "^25.2.6",
+        "jest-resolve": "^25.5.1",
+        "jest-snapshot": "^25.5.1",
+        "jest-util": "^25.5.0",
+        "jest-validate": "^25.5.0",
+        "realpath-native": "^2.0.0",
+        "slash": "^3.0.0",
+        "strip-bom": "^4.0.0",
+        "yargs": "^15.3.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
+          "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+          "dev": true
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz",
+          "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz",
+          "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-4.0.0.tgz",
+          "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+          "dev": true
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+          "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1618558856477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz",
+          "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "yargs": {
+          "version": "15.4.1",
+          "resolved": "https://registry.nlark.com/yargs/download/yargs-15.4.1.tgz",
+          "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=",
+          "dev": true,
+          "requires": {
+            "cliui": "^6.0.0",
+            "decamelize": "^1.2.0",
+            "find-up": "^4.1.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^4.2.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^18.1.2"
+          }
+        },
+        "yargs-parser": {
+          "version": "18.1.3",
+          "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1624233275366&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz",
+          "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
+        }
+      }
+    },
+    "jest-serializer": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-serializer/download/jest-serializer-25.5.0.tgz?cache=0&sync_timestamp=1624900516686&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-serializer%2Fdownload%2Fjest-serializer-25.5.0.tgz",
+      "integrity": "sha1-qZP0hOdptO1U5w4O/bdAB/UDBys=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.2.4"
+      }
+    },
+    "jest-snapshot": {
+      "version": "25.5.1",
+      "resolved": "https://registry.nlark.com/jest-snapshot/download/jest-snapshot-25.5.1.tgz",
+      "integrity": "sha1-GipXZJH5lh640AwuX9R5vCjl/38=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.0.0",
+        "@jest/types": "^25.5.0",
+        "@types/prettier": "^1.19.0",
+        "chalk": "^3.0.0",
+        "expect": "^25.5.0",
+        "graceful-fs": "^4.2.4",
+        "jest-diff": "^25.5.0",
+        "jest-get-type": "^25.2.6",
+        "jest-matcher-utils": "^25.5.0",
+        "jest-message-util": "^25.5.0",
+        "jest-resolve": "^25.5.1",
+        "make-dir": "^3.0.0",
+        "natural-compare": "^1.4.0",
+        "pretty-format": "^25.5.0",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "make-dir": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz",
+          "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
+          "dev": true,
+          "requires": {
+            "semver": "^6.0.0"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-util": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-util/download/jest-util-25.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-util%2Fdownload%2Fjest-util-25.5.0.tgz",
+      "integrity": "sha1-McY7XW6QEnTSZKT+yEkjCqP6NbA=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "chalk": "^3.0.0",
+        "graceful-fs": "^4.2.4",
+        "is-ci": "^2.0.0",
+        "make-dir": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "ci-info": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ci-info/download/ci-info-2.0.0.tgz",
+          "integrity": "sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=",
+          "dev": true
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "is-ci": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-2.0.0.tgz",
+          "integrity": "sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw=",
+          "dev": true,
+          "requires": {
+            "ci-info": "^2.0.0"
+          }
+        },
+        "make-dir": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz",
+          "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
+          "dev": true,
+          "requires": {
+            "semver": "^6.0.0"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-validate": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-validate/download/jest-validate-25.5.0.tgz?cache=0&sync_timestamp=1630058474453&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-validate%2Fdownload%2Fjest-validate-25.5.0.tgz",
+      "integrity": "sha1-+0yT8zLC5M9wFRpijlijXkWaQTo=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "camelcase": "^5.3.1",
+        "chalk": "^3.0.0",
+        "jest-get-type": "^25.2.6",
+        "leven": "^3.1.0",
+        "pretty-format": "^25.5.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-watcher": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-watcher/download/jest-watcher-25.5.0.tgz?cache=0&sync_timestamp=1630058511909&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjest-watcher%2Fdownload%2Fjest-watcher-25.5.0.tgz",
+      "integrity": "sha1-1hENEB35i63r5DUAOVb9SkZehFY=",
+      "dev": true,
+      "requires": {
+        "@jest/test-result": "^25.5.0",
+        "@jest/types": "^25.5.0",
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^3.0.0",
+        "jest-util": "^25.5.0",
+        "string-length": "^3.1.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
+          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-worker": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/jest-worker/download/jest-worker-25.5.0.tgz",
+      "integrity": "sha1-JhHQcbec6g9D7lej0RhZOsFUfbE=",
+      "dev": true,
+      "requires": {
+        "merge-stream": "^2.0.0",
+        "supports-color": "^7.0.0"
+      },
+      "dependencies": {
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "js-base64": {
+      "version": "2.6.4",
+      "resolved": "https://registry.nlark.com/js-base64/download/js-base64-2.6.4.tgz?cache=0&sync_timestamp=1621703335082&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-base64%2Fdownload%2Fjs-base64-2.6.4.tgz",
+      "integrity": "sha1-9OaGxd4eofhn28rT1G2WlCjfmMQ="
+    },
+    "js-message": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npm.taobao.org/js-message/download/js-message-1.0.7.tgz?cache=0&sync_timestamp=1605130346711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-message%2Fdownload%2Fjs-message-1.0.7.tgz",
+      "integrity": "sha1-+93QU8ekcCGHG7iyyVOXzBfCDkc=",
+      "dev": true
+    },
+    "js-queue": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/js-queue/download/js-queue-2.0.2.tgz?cache=0&sync_timestamp=1605130347001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-queue%2Fdownload%2Fjs-queue-2.0.2.tgz",
+      "integrity": "sha1-C+WQM4+QOzbHPTPDGIOoIUEs1II=",
+      "dev": true,
+      "requires": {
+        "easy-stack": "^1.0.1"
+      }
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz",
+      "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk="
+    },
+    "js-yaml": {
+      "version": "3.14.1",
+      "resolved": "https://registry.nlark.com/js-yaml/download/js-yaml-3.14.1.tgz?cache=0&sync_timestamp=1618847165988&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.1.tgz",
+      "integrity": "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=",
+      "dev": true,
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+    },
+    "jsdom": {
+      "version": "15.2.1",
+      "resolved": "https://registry.nlark.com/jsdom/download/jsdom-15.2.1.tgz?cache=0&sync_timestamp=1628871053731&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjsdom%2Fdownload%2Fjsdom-15.2.1.tgz",
+      "integrity": "sha1-0v6xrvcYP4a+UhuMaDP/UpbQfsU=",
+      "dev": true,
+      "requires": {
+        "abab": "^2.0.0",
+        "acorn": "^7.1.0",
+        "acorn-globals": "^4.3.2",
+        "array-equal": "^1.0.0",
+        "cssom": "^0.4.1",
+        "cssstyle": "^2.0.0",
+        "data-urls": "^1.1.0",
+        "domexception": "^1.0.1",
+        "escodegen": "^1.11.1",
+        "html-encoding-sniffer": "^1.0.2",
+        "nwsapi": "^2.2.0",
+        "parse5": "5.1.0",
+        "pn": "^1.1.0",
+        "request": "^2.88.0",
+        "request-promise-native": "^1.0.7",
+        "saxes": "^3.1.9",
+        "symbol-tree": "^3.2.2",
+        "tough-cookie": "^3.0.1",
+        "w3c-hr-time": "^1.0.1",
+        "w3c-xmlserializer": "^1.1.2",
+        "webidl-conversions": "^4.0.2",
+        "whatwg-encoding": "^1.0.5",
+        "whatwg-mimetype": "^2.3.0",
+        "whatwg-url": "^7.0.0",
+        "ws": "^7.0.0",
+        "xml-name-validator": "^3.0.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "7.4.1",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz",
+          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+          "dev": true
+        },
+        "parse5": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.0.tgz",
+          "integrity": "sha1-xZNByXI/QUxFKXVWTHwApo1YrNI=",
+          "dev": true
+        },
+        "tough-cookie": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-3.0.1.tgz",
+          "integrity": "sha1-nfT1fnOcJpMKAYGEiH9K233Kc7I=",
+          "dev": true,
+          "requires": {
+            "ip-regex": "^2.1.0",
+            "psl": "^1.1.28",
+            "punycode": "^2.1.1"
+          }
+        },
+        "ws": {
+          "version": "7.5.4",
+          "resolved": "https://registry.nlark.com/ws/download/ws-7.5.4.tgz?cache=0&sync_timestamp=1630167206236&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-7.5.4.tgz",
+          "integrity": "sha1-Vr+iCxZ0J+E4p3ld5o0TT+kuIfk=",
+          "dev": true
+        }
+      }
+    },
+    "jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz?cache=0&sync_timestamp=1603891242793&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-2.5.2.tgz",
+      "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q="
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk="
+    },
+    "json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=",
+      "dev": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&sync_timestamp=1609553741994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+    },
+    "json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1608000211395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
+      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
+    },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+    },
+    "json3": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz",
+      "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=",
+      "dev": true
+    },
+    "json5": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz",
+      "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
+      "requires": {
+        "minimist": "^1.2.0"
+      }
+    },
+    "jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz?cache=0&sync_timestamp=1604161912962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+      "requires": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "jsrsasign": {
+      "version": "7.2.2",
+      "resolved": "https://registry.nlark.com/jsrsasign/download/jsrsasign-7.2.2.tgz",
+      "integrity": "sha1-rlIwy1V0RRu5eanMaXQoxg9ZjSA="
+    },
+    "jszip": {
+      "version": "3.7.1",
+      "resolved": "https://registry.nlark.com/jszip/download/jszip-3.7.1.tgz",
+      "integrity": "sha1-vWNAEiHBViWhIoxVbKimjab9o9k=",
+      "requires": {
+        "lie": "~3.3.0",
+        "pako": "~1.0.2",
+        "readable-stream": "~2.3.6",
+        "set-immediate-shim": "~1.0.1"
+      }
+    },
+    "keygrip": {
+      "version": "1.1.0",
+      "resolved": "https://registry.nlark.com/keygrip/download/keygrip-1.1.0.tgz",
+      "integrity": "sha1-hxsWgdXhWcYqRFsMdLYV4JF+ciY=",
+      "requires": {
+        "tsscmp": "1.0.6"
+      }
+    },
+    "kill-port": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npm.taobao.org/kill-port/download/kill-port-1.6.1.tgz",
+      "integrity": "sha1-Vg/nlIRYO986XpCFV9rmFER2GKo=",
+      "dev": true,
+      "requires": {
+        "get-them-args": "1.3.2",
+        "shell-exec": "1.0.2"
+      }
+    },
+    "killable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz",
+      "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
+      "dev": true
+    },
+    "kind-of": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
+      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0="
+    },
+    "kleur": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npm.taobao.org/kleur/download/kleur-3.0.3.tgz?cache=0&sync_timestamp=1611347148212&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkleur%2Fdownload%2Fkleur-3.0.3.tgz",
+      "integrity": "sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4=",
+      "dev": true
+    },
+    "koa": {
+      "version": "2.13.1",
+      "resolved": "https://registry.npm.taobao.org/koa/download/koa-2.13.1.tgz",
+      "integrity": "sha1-YnUXKHWye8/h1FQ1altrn1qbEFE=",
+      "requires": {
+        "accepts": "^1.3.5",
+        "cache-content-type": "^1.0.0",
+        "content-disposition": "~0.5.2",
+        "content-type": "^1.0.4",
+        "cookies": "~0.8.0",
+        "debug": "~3.1.0",
+        "delegates": "^1.0.0",
+        "depd": "^2.0.0",
+        "destroy": "^1.0.4",
+        "encodeurl": "^1.0.2",
+        "escape-html": "^1.0.3",
+        "fresh": "~0.5.2",
+        "http-assert": "^1.3.0",
+        "http-errors": "^1.6.3",
+        "is-generator-function": "^1.0.7",
+        "koa-compose": "^4.1.0",
+        "koa-convert": "^1.2.0",
+        "on-finished": "^2.3.0",
+        "only": "~0.0.2",
+        "parseurl": "^1.3.2",
+        "statuses": "^1.5.0",
+        "type-is": "^1.6.16",
+        "vary": "^1.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "depd": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/depd/download/depd-2.0.0.tgz",
+          "integrity": "sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8="
+        },
+        "koa-compose": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/koa-compose/download/koa-compose-4.1.0.tgz",
+          "integrity": "sha1-UHMGuTcZAdtBEhyBLpI9DWfT6Hc="
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
+    "koa-body": {
+      "version": "4.2.0",
+      "resolved": "https://registry.nlark.com/koa-body/download/koa-body-4.2.0.tgz",
+      "integrity": "sha1-NyKSCLggdhrKWCLRTF/FXO4xsm8=",
+      "requires": {
+        "@types/formidable": "^1.0.31",
+        "co-body": "^5.1.1",
+        "formidable": "^1.1.1"
+      },
+      "dependencies": {
+        "co-body": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/co-body/download/co-body-5.2.0.tgz",
+          "integrity": "sha1-WgpljEYCkTHg46MG9nZHMC9xwSQ=",
+          "requires": {
+            "inflation": "^2.0.0",
+            "qs": "^6.4.0",
+            "raw-body": "^2.2.0",
+            "type-is": "^1.6.14"
+          }
+        }
+      }
+    },
+    "koa-bodyparser": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/koa-bodyparser/download/koa-bodyparser-4.3.0.tgz",
+      "integrity": "sha1-J0x3hVX/SPoiHufzap+9us4idZo=",
+      "requires": {
+        "co-body": "^6.0.0",
+        "copy-to": "^2.0.1"
+      }
+    },
+    "koa-compose": {
+      "version": "3.2.1",
+      "resolved": "https://registry.nlark.com/koa-compose/download/koa-compose-3.2.1.tgz",
+      "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=",
+      "requires": {
+        "any-promise": "^1.1.0"
+      }
+    },
+    "koa-convert": {
+      "version": "1.2.0",
+      "resolved": "https://registry.nlark.com/koa-convert/download/koa-convert-1.2.0.tgz",
+      "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=",
+      "requires": {
+        "co": "^4.6.0",
+        "koa-compose": "^3.0.0"
+      }
+    },
+    "koa-mount": {
+      "version": "4.0.0",
+      "resolved": "https://registry.nlark.com/koa-mount/download/koa-mount-4.0.0.tgz",
+      "integrity": "sha1-4CZeWBmOGhTviJUUxgclT/OGMpw=",
+      "requires": {
+        "debug": "^4.0.1",
+        "koa-compose": "^4.1.0"
+      },
+      "dependencies": {
+        "koa-compose": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/koa-compose/download/koa-compose-4.1.0.tgz",
+          "integrity": "sha1-UHMGuTcZAdtBEhyBLpI9DWfT6Hc="
+        }
+      }
+    },
+    "koa-router": {
+      "version": "7.4.0",
+      "resolved": "https://registry.nlark.com/koa-router/download/koa-router-7.4.0.tgz?cache=0&sync_timestamp=1629648499991&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fkoa-router%2Fdownload%2Fkoa-router-7.4.0.tgz",
+      "integrity": "sha1-ruH3rcAtXLMdfWdGXJ6syCXoxeA=",
+      "requires": {
+        "debug": "^3.1.0",
+        "http-errors": "^1.3.1",
+        "koa-compose": "^3.0.0",
+        "methods": "^1.0.1",
+        "path-to-regexp": "^1.1.1",
+        "urijs": "^1.19.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.2.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+        },
+        "path-to-regexp": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-1.8.0.tgz",
+          "integrity": "sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo=",
+          "requires": {
+            "isarray": "0.0.1"
+          }
+        }
+      }
+    },
+    "koa-send": {
+      "version": "5.0.1",
+      "resolved": "https://registry.nlark.com/koa-send/download/koa-send-5.0.1.tgz",
+      "integrity": "sha1-Odzuv6+zldDWC+r/ujpwtPVD/nk=",
+      "requires": {
+        "debug": "^4.1.1",
+        "http-errors": "^1.7.3",
+        "resolve-path": "^1.4.0"
+      },
+      "dependencies": {
+        "http-errors": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.8.0.tgz",
+          "integrity": "sha1-ddG75JfhBE9R5O6ecEpi8o0zZQc=",
+          "requires": {
+            "depd": "~1.1.2",
+            "inherits": "2.0.4",
+            "setprototypeof": "1.2.0",
+            "statuses": ">= 1.5.0 < 2",
+            "toidentifier": "1.0.0"
+          }
+        },
+        "setprototypeof": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.2.0.tgz",
+          "integrity": "sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ="
+        }
+      }
+    },
+    "koa-static": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npm.taobao.org/koa-static/download/koa-static-5.0.0.tgz",
+      "integrity": "sha1-XpL8lrU3rVIZ9CUxnJW2R3J3aUM=",
+      "requires": {
+        "debug": "^3.1.0",
+        "koa-send": "^5.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.2.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "launch-editor": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz",
+      "integrity": "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.3.0",
+        "shell-quote": "^1.6.1"
+      }
+    },
+    "launch-editor-middleware": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz",
+      "integrity": "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc=",
+      "dev": true,
+      "requires": {
+        "launch-editor": "^2.2.1"
+      }
+    },
+    "leven": {
+      "version": "3.1.0",
+      "resolved": "https://registry.nlark.com/leven/download/leven-3.1.0.tgz?cache=0&sync_timestamp=1628597922950&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fleven%2Fdownload%2Fleven-3.1.0.tgz",
+      "integrity": "sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=",
+      "dev": true
+    },
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "requires": {
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
+      }
+    },
+    "licia": {
+      "version": "1.30.0",
+      "resolved": "https://registry.nlark.com/licia/download/licia-1.30.0.tgz?cache=0&sync_timestamp=1630826524432&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flicia%2Fdownload%2Flicia-1.30.0.tgz",
+      "integrity": "sha1-jOdBtG9OhfXwvKIfHKRZMhSR8P4=",
+      "dev": true
+    },
+    "lie": {
+      "version": "3.3.0",
+      "resolved": "https://registry.nlark.com/lie/download/lie-3.3.0.tgz",
+      "integrity": "sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o=",
+      "requires": {
+        "immediate": "~3.0.5"
+      }
+    },
+    "lines-and-columns": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz",
+      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+      "dev": true
+    },
+    "linkify-it": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
+      "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
+      "requires": {
+        "uc.micro": "^1.0.1"
+      }
+    },
+    "load-json-file": {
+      "version": "1.1.0",
+      "resolved": "https://registry.nlark.com/load-json-file/download/load-json-file-1.1.0.tgz?cache=0&sync_timestamp=1630345956105&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fload-json-file%2Fdownload%2Fload-json-file-1.1.0.tgz",
+      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0"
+      },
+      "dependencies": {
+        "parse-json": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1610966667117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
+          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+          "requires": {
+            "error-ex": "^1.2.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+        },
+        "strip-bom": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/strip-bom/download/strip-bom-2.0.0.tgz?cache=0&sync_timestamp=1624608094529&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-bom%2Fdownload%2Fstrip-bom-2.0.0.tgz",
+          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+          "requires": {
+            "is-utf8": "^0.2.0"
+          }
+        }
+      }
+    },
+    "loader-runner": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1610027943366&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz",
+      "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c="
+    },
+    "loader-utils": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz",
+      "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=",
+      "requires": {
+        "big.js": "^5.2.2",
+        "emojis-list": "^3.0.0",
+        "json5": "^1.0.1"
+      }
+    },
+    "locate-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz",
+      "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+      "requires": {
+        "p-locate": "^3.0.0",
+        "path-exists": "^3.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz",
+      "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw="
+    },
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
+    },
+    "lodash.defaultsdeep": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz",
+      "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=",
+      "dev": true
+    },
+    "lodash.kebabcase": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz",
+      "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=",
+      "dev": true
+    },
+    "lodash.mapvalues": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npm.taobao.org/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz",
+      "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=",
+      "dev": true
+    },
+    "lodash.memoize": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz",
+      "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+      "dev": true
+    },
+    "lodash.sortby": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz",
+      "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+      "dev": true
+    },
+    "lodash.transform": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz",
+      "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=",
+      "dev": true
+    },
+    "lodash.uniq": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz",
+      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+      "dev": true
+    },
+    "log-symbols": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/log-symbols/download/log-symbols-2.2.0.tgz",
+      "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1"
+      }
+    },
+    "loglevel": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.1.tgz?cache=0&sync_timestamp=1606312222145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.7.1.tgz",
+      "integrity": "sha1-AF/eL15uRwaPk1/yhXPhJe9y8Zc=",
+      "dev": true
+    },
+    "lolex": {
+      "version": "5.1.2",
+      "resolved": "https://registry.nlark.com/lolex/download/lolex-5.1.2.tgz",
+      "integrity": "sha1-lTaU0JjOfAe8XtbQ5CvGwMbVo2c=",
+      "dev": true,
+      "requires": {
+        "@sinonjs/commons": "^1.7.0"
+      }
+    },
+    "loud-rejection": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz",
+      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+      "requires": {
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
+      }
+    },
+    "lower-case": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz?cache=0&sync_timestamp=1606867384237&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flower-case%2Fdownload%2Flower-case-1.1.4.tgz",
+      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+      "dev": true
+    },
+    "lru-cache": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz",
+      "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
+      "requires": {
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+        }
+      }
+    },
+    "make-dir": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz",
+      "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
+      "requires": {
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      }
+    },
+    "makeerror": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz",
+      "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+      "dev": true,
+      "requires": {
+        "tmpl": "1.0.x"
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+    },
+    "map-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz",
+      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "markdown-it": {
+      "version": "8.4.2",
+      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
+      "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
+      "requires": {
+        "argparse": "^1.0.7",
+        "entities": "~1.1.1",
+        "linkify-it": "^2.0.0",
+        "mdurl": "^1.0.1",
+        "uc.micro": "^1.0.5"
+      },
+      "dependencies": {
+        "entities": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+          "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+        }
+      }
+    },
+    "md5": {
+      "version": "2.3.0",
+      "resolved": "https://registry.nlark.com/md5/download/md5-2.3.0.tgz",
+      "integrity": "sha1-w9qaaq46MLRreww0m4exENw72k8=",
+      "requires": {
+        "charenc": "0.0.2",
+        "crypt": "0.0.2",
+        "is-buffer": "~1.1.6"
+      }
+    },
+    "md5.js": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
+      "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "mdn-data": {
+      "version": "2.0.4",
+      "resolved": "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.4.tgz",
+      "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=",
+      "dev": true
+    },
+    "mdurl": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+      "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g=="
+    },
+    "media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
+      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+    },
+    "memfs": {
+      "version": "3.4.13",
+      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz",
+      "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "fs-monkey": "^1.0.3"
+      }
+    },
+    "memory-fs": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz",
+      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+      "requires": {
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "meow": {
+      "version": "3.7.0",
+      "resolved": "https://registry.nlark.com/meow/download/meow-3.7.0.tgz",
+      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "requires": {
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "1.1.2",
+          "resolved": "https://registry.nlark.com/find-up/download/find-up-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz",
+          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+          "requires": {
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "2.1.0",
+          "resolved": "https://registry.nlark.com/path-exists/download/path-exists-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-2.1.0.tgz",
+          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+          "requires": {
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-type": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz",
+          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+        },
+        "read-pkg": {
+          "version": "1.1.0",
+          "resolved": "https://registry.nlark.com/read-pkg/download/read-pkg-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fread-pkg%2Fdownload%2Fread-pkg-1.1.0.tgz",
+          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+          "requires": {
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
+          }
+        },
+        "read-pkg-up": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz",
+          "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+          "requires": {
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
+          }
+        }
+      }
+    },
+    "merge": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/merge/download/merge-1.2.1.tgz?cache=0&sync_timestamp=1614028201184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge%2Fdownload%2Fmerge-1.2.1.tgz",
+      "integrity": "sha1-OL6/gMMiCopIe2/Ps5QbsRcgwUU=",
+      "dev": true
+    },
+    "merge-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
+      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+      "dev": true
+    },
+    "merge-source-map": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz",
+      "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=",
+      "requires": {
+        "source-map": "^0.6.1"
+      }
+    },
+    "merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz",
+      "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=",
+      "dev": true
+    },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz",
+      "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=",
+      "dev": true
+    },
+    "methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
+      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+    },
+    "microevent.ts": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/microevent.ts/download/microevent.ts-0.1.1.tgz",
+      "integrity": "sha1-cLCbg/Q99RctAgWmMCW84Pc1f6A=",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618054885525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz",
+      "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "braces": "^2.3.1",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "extglob": "^2.0.4",
+        "fragment-cache": "^0.2.1",
+        "kind-of": "^6.0.2",
+        "nanomatch": "^1.2.9",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.2"
+      }
+    },
+    "miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz",
+      "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+      "requires": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og="
+        }
+      }
+    },
+    "mime": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.5.2.tgz",
+      "integrity": "sha1-bj3GzCuVEGQ4MOXxnVy3U9pe6r4="
+    },
+    "mime-db": {
+      "version": "1.49.0",
+      "resolved": "https://registry.nlark.com/mime-db/download/mime-db-1.49.0.tgz",
+      "integrity": "sha1-89/eYMmenPO8lwHWh3ePU3ABy+0="
+    },
+    "mime-types": {
+      "version": "2.1.32",
+      "resolved": "https://registry.nlark.com/mime-types/download/mime-types-2.1.32.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.32.tgz",
+      "integrity": "sha1-HQDonn3n/gIAjbYQAdngKFJnD9U=",
+      "requires": {
+        "mime-db": "1.49.0"
+      }
+    },
+    "mimic-fn": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1617823824094&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz",
+      "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
+      "dev": true
+    },
+    "mini-css-extract-plugin": {
+      "version": "0.9.0",
+      "resolved": "https://registry.nlark.com/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz?cache=0&sync_timestamp=1630516348758&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.9.0.tgz",
+      "integrity": "sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "normalize-url": "1.9.1",
+        "schema-utils": "^1.0.0",
+        "webpack-sources": "^1.1.0"
+      },
+      "dependencies": {
+        "normalize-url": {
+          "version": "1.9.1",
+          "resolved": "https://registry.nlark.com/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1628689099559&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz",
+          "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+          "dev": true,
+          "requires": {
+            "object-assign": "^4.0.1",
+            "prepend-http": "^1.0.0",
+            "query-string": "^4.1.0",
+            "sort-keys": "^1.0.0"
+          }
+        }
+      }
+    },
+    "mini-types": {
+      "version": "0.1.7",
+      "resolved": "https://registry.nlark.com/mini-types/download/mini-types-0.1.7.tgz",
+      "integrity": "sha1-NtXqLPGGU7FvXRoCyNmzKccn0go=",
+      "dev": true
+    },
+    "minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc="
+    },
+    "minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz",
+      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&sync_timestamp=1602337228360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz",
+      "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI="
+    },
+    "minipass": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz",
+      "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz",
+          "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+          "dev": true
+        }
+      }
+    },
+    "miniprogram-api-typings": {
+      "version": "3.4.3",
+      "resolved": "https://registry.nlark.com/miniprogram-api-typings/download/miniprogram-api-typings-3.4.3.tgz?cache=0&sync_timestamp=1629802855673&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fminiprogram-api-typings%2Fdownload%2Fminiprogram-api-typings-3.4.3.tgz",
+      "integrity": "sha1-yIzGJJczItmQNT2UrnZduQk40TI=",
+      "dev": true
+    },
+    "mississippi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz",
+      "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
+      "requires": {
+        "concat-stream": "^1.5.0",
+        "duplexify": "^3.4.2",
+        "end-of-stream": "^1.1.0",
+        "flush-write-stream": "^1.0.0",
+        "from2": "^2.1.0",
+        "parallel-transform": "^1.1.0",
+        "pump": "^3.0.0",
+        "pumpify": "^1.3.3",
+        "stream-each": "^1.1.0",
+        "through2": "^2.0.0"
+      }
+    },
+    "mixin-deep": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz",
+      "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=",
+      "requires": {
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz",
+          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz",
+      "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
+      "requires": {
+        "minimist": "^1.2.5"
+      }
+    },
+    "module-alias": {
+      "version": "2.2.2",
+      "resolved": "https://registry.nlark.com/module-alias/download/module-alias-2.2.2.tgz",
+      "integrity": "sha1-FRzc7MJOJXOf8KpuUeHFcWl0wOA="
+    },
+    "moment": {
+      "version": "2.29.1",
+      "resolved": "https://registry.nlark.com/moment/download/moment-2.29.1.tgz",
+      "integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M="
+    },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz",
+      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+      "requires": {
+        "aproba": "^1.1.1",
+        "copy-concurrently": "^1.0.0",
+        "fs-write-stream-atomic": "^1.0.8",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.3"
+      }
+    },
+    "ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.nlark.com/ms/download/ms-2.1.2.tgz",
+      "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
+    },
+    "multicast-dns": {
+      "version": "6.2.3",
+      "resolved": "https://registry.nlark.com/multicast-dns/download/multicast-dns-6.2.3.tgz",
+      "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=",
+      "dev": true,
+      "requires": {
+        "dns-packet": "^1.3.1",
+        "thunky": "^1.0.2"
+      }
+    },
+    "multicast-dns-service-types": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz",
+      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+      "dev": true
+    },
+    "mustache": {
+      "version": "3.2.1",
+      "resolved": "https://registry.nlark.com/mustache/download/mustache-3.2.1.tgz",
+      "integrity": "sha1-ieeKnSB9ePJ5mx6Vdkolv3GigyI=",
+      "dev": true
+    },
+    "mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz",
+      "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "nan": {
+      "version": "2.15.0",
+      "resolved": "https://registry.nlark.com/nan/download/nan-2.15.0.tgz",
+      "integrity": "sha1-PzSkc/8Y4VwbVia2KQO1rW5mX+4="
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz",
+      "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "fragment-cache": "^0.2.1",
+        "is-windows": "^1.0.2",
+        "kind-of": "^6.0.2",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      }
+    },
+    "natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz",
+      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "dev": true
+    },
+    "negotiator": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
+      "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
+    },
+    "neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz",
+      "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8="
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz?cache=0&sync_timestamp=1614510039289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz",
+      "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
+      "dev": true
+    },
+    "no-case": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz?cache=0&sync_timestamp=1606867284055&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fno-case%2Fdownload%2Fno-case-2.3.2.tgz",
+      "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
+      "dev": true,
+      "requires": {
+        "lower-case": "^1.1.1"
+      }
+    },
+    "node-forge": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.10.0.tgz",
+      "integrity": "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=",
+      "dev": true
+    },
+    "node-gyp": {
+      "version": "3.8.0",
+      "resolved": "https://registry.nlark.com/node-gyp/download/node-gyp-3.8.0.tgz?cache=0&sync_timestamp=1629701707382&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnode-gyp%2Fdownload%2Fnode-gyp-3.8.0.tgz",
+      "integrity": "sha1-VAMEJhwzDoDQ1e3OJTpoyzlkIYw=",
+      "requires": {
+        "fstream": "^1.0.0",
+        "glob": "^7.0.3",
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.0",
+        "nopt": "2 || 3",
+        "npmlog": "0 || 1 || 2 || 3 || 4",
+        "osenv": "0",
+        "request": "^2.87.0",
+        "rimraf": "2",
+        "semver": "~5.3.0",
+        "tar": "^2.0.0",
+        "which": "1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.3.0.tgz",
+          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
+        }
+      }
+    },
+    "node-int64": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz",
+      "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+      "dev": true
+    },
+    "node-ipc": {
+      "version": "9.2.1",
+      "resolved": "https://registry.nlark.com/node-ipc/download/node-ipc-9.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnode-ipc%2Fdownload%2Fnode-ipc-9.2.1.tgz",
+      "integrity": "sha1-sy9mEV+dbOhB3E7CAJ1qcz+Yu2s=",
+      "dev": true,
+      "requires": {
+        "event-pubsub": "4.3.0",
+        "js-message": "1.0.7",
+        "js-queue": "2.0.2"
+      }
+    },
+    "node-libs-browser": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz",
+      "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=",
+      "requires": {
+        "assert": "^1.1.1",
+        "browserify-zlib": "^0.2.0",
+        "buffer": "^4.3.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.1",
+        "events": "^3.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
+        "path-browserify": "0.0.1",
+        "process": "^0.11.10",
+        "punycode": "^1.2.4",
+        "querystring-es3": "^0.2.0",
+        "readable-stream": "^2.3.3",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.7.2",
+        "string_decoder": "^1.0.0",
+        "timers-browserify": "^2.0.4",
+        "tty-browserify": "0.0.0",
+        "url": "^0.11.0",
+        "util": "^0.11.0",
+        "vm-browserify": "^1.0.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+        }
+      }
+    },
+    "node-modules-regexp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/node-modules-regexp/download/node-modules-regexp-1.0.0.tgz",
+      "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA="
+    },
+    "node-notifier": {
+      "version": "6.0.0",
+      "resolved": "https://registry.nlark.com/node-notifier/download/node-notifier-6.0.0.tgz",
+      "integrity": "sha1-zqMZ4GuqFt7sjOXNfxM8Ska2jhI=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "growly": "^1.3.0",
+        "is-wsl": "^2.1.1",
+        "semver": "^6.3.0",
+        "shellwords": "^0.1.1",
+        "which": "^1.3.1"
+      },
+      "dependencies": {
+        "is-wsl": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz",
+          "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "is-docker": "^2.0.0"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "node-releases": {
+      "version": "1.1.75",
+      "resolved": "https://registry.nlark.com/node-releases/download/node-releases-1.1.75.tgz",
+      "integrity": "sha1-bdjIdrmJehuOWgLeJq+nm7VOu/4="
+    },
+    "node-sass": {
+      "version": "4.14.1",
+      "resolved": "https://registry.nlark.com/node-sass/download/node-sass-4.14.1.tgz",
+      "integrity": "sha1-mch+wu+3BH7WOPtMnbfzpC4iF7U=",
+      "requires": {
+        "async-foreach": "^0.1.3",
+        "chalk": "^1.1.1",
+        "cross-spawn": "^3.0.0",
+        "gaze": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "glob": "^7.0.3",
+        "in-publish": "^2.0.0",
+        "lodash": "^4.17.15",
+        "meow": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "nan": "^2.13.2",
+        "node-gyp": "^3.8.0",
+        "npmlog": "^4.0.0",
+        "request": "^2.88.0",
+        "sass-graph": "2.2.5",
+        "stdout-stream": "^1.4.0",
+        "true-case-path": "^1.0.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1627646655305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "cross-spawn": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-3.0.1.tgz",
+          "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "which": "^1.2.9"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
+      }
+    },
+    "nopt": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz",
+      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "requires": {
+        "abbrev": "1"
+      }
+    },
+    "normalize-package-data": {
+      "version": "2.5.0",
+      "resolved": "https://registry.nlark.com/normalize-package-data/download/normalize-package-data-2.5.0.tgz",
+      "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=",
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
+      "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU="
+    },
+    "normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz",
+      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+      "dev": true
+    },
+    "normalize-url": {
+      "version": "3.3.0",
+      "resolved": "https://registry.nlark.com/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1628689099559&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz",
+      "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
+      "dev": true
+    },
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "dev": true,
+      "requires": {
+        "path-key": "^2.0.0"
+      }
+    },
+    "npmlog": {
+      "version": "4.1.2",
+      "resolved": "https://registry.nlark.com/npmlog/download/npmlog-4.1.2.tgz",
+      "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=",
+      "requires": {
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
+      }
+    },
+    "nth-check": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz?cache=0&sync_timestamp=1606860690670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnth-check%2Fdownload%2Fnth-check-1.0.2.tgz",
+      "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=",
+      "dev": true,
+      "requires": {
+        "boolbase": "~1.0.0"
+      }
+    },
+    "num2fraction": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz",
+      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+      "dev": true
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/number-is-nan/download/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+    },
+    "nwsapi": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz",
+      "integrity": "sha1-IEh5qePQaP8qVROcLHcngGgaOLc=",
+      "dev": true
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz",
+      "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU="
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1602657128410&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "object-inspect": {
+      "version": "1.11.0",
+      "resolved": "https://registry.nlark.com/object-inspect/download/object-inspect-1.11.0.tgz",
+      "integrity": "sha1-nc6xRs7dQUig2eUauI00z1CZIrE=",
+      "dev": true
+    },
+    "object-is": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.5.tgz?cache=0&sync_timestamp=1613857698573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.5.tgz",
+      "integrity": "sha1-ud7qpfx/GEag+uzc7sE45XePU6w=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      }
+    },
+    "object-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz",
+      "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4="
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "requires": {
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.assign": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.2.tgz?cache=0&sync_timestamp=1604115183005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.2.tgz",
+      "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
+      "requires": {
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "has-symbols": "^1.0.1",
+        "object-keys": "^1.1.1"
+      }
+    },
+    "object.getownpropertydescriptors": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.2.tgz",
+      "integrity": "sha1-G9Y66s8NXS0vMbXjk7A6fGAaI/c=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.0-next.2"
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "object.values": {
+      "version": "1.1.4",
+      "resolved": "https://registry.nlark.com/object.values/download/object.values-1.1.4.tgz?cache=0&sync_timestamp=1622071658027&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject.values%2Fdownload%2Fobject.values-1.1.4.tgz",
+      "integrity": "sha1-DSc3YoM+gWtpOmN9MAc+cFFTWzA=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.2"
+      }
+    },
+    "obuf": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz",
+      "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=",
+      "dev": true
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "on-headers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz",
+      "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=",
+      "dev": true
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz?cache=0&sync_timestamp=1617889786861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-2.0.1.tgz",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^1.0.0"
+      }
+    },
+    "only": {
+      "version": "0.0.2",
+      "resolved": "https://registry.nlark.com/only/download/only-0.0.2.tgz",
+      "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q="
+    },
+    "open": {
+      "version": "6.4.0",
+      "resolved": "https://registry.nlark.com/open/download/open-6.4.0.tgz?cache=0&sync_timestamp=1624208993482&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fopen%2Fdownload%2Fopen-6.4.0.tgz",
+      "integrity": "sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk=",
+      "dev": true,
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "opener": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz",
+      "integrity": "sha1-XTfh81B3udysQwE3InGv3rKhNZg=",
+      "dev": true
+    },
+    "opn": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz",
+      "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=",
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "optionator": {
+      "version": "0.8.3",
+      "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz",
+      "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=",
+      "requires": {
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.6",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "word-wrap": "~1.2.3"
+      }
+    },
+    "ora": {
+      "version": "3.4.0",
+      "resolved": "https://registry.nlark.com/ora/download/ora-3.4.0.tgz?cache=0&sync_timestamp=1629755504079&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fora%2Fdownload%2Fora-3.4.0.tgz",
+      "integrity": "sha1-vwdSSRBZo+8+1MhQl1Md6f280xg=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "cli-cursor": "^2.1.0",
+        "cli-spinners": "^2.0.0",
+        "log-symbols": "^2.2.0",
+        "strip-ansi": "^5.2.0",
+        "wcwidth": "^1.0.1"
+      },
+      "dependencies": {
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
+      }
+    },
+    "original": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz",
+      "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=",
+      "dev": true,
+      "requires": {
+        "url-parse": "^1.4.3"
+      }
+    },
+    "os-browserify": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz",
+      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+    },
+    "osenv": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz",
+      "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=",
+      "requires": {
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
+      }
+    },
+    "p-each-series": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/p-each-series/download/p-each-series-2.2.0.tgz",
+      "integrity": "sha1-EFqwNXznKyAqiouUkzZyZXteKpo=",
+      "dev": true
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "dev": true
+    },
+    "p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.nlark.com/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1628812721654&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz",
+      "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=",
+      "requires": {
+        "p-try": "^2.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz",
+      "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+      "requires": {
+        "p-limit": "^2.0.0"
+      }
+    },
+    "p-map": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/p-map/download/p-map-2.1.0.tgz?cache=0&sync_timestamp=1627082385032&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-map%2Fdownload%2Fp-map-2.1.0.tgz",
+      "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=",
+      "dev": true
+    },
+    "p-retry": {
+      "version": "3.0.1",
+      "resolved": "https://registry.nlark.com/p-retry/download/p-retry-3.0.1.tgz",
+      "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=",
+      "dev": true,
+      "requires": {
+        "retry": "^0.12.0"
+      }
+    },
+    "p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
+      "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY="
+    },
+    "pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.nlark.com/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1627560187062&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpako%2Fdownload%2Fpako-1.0.11.tgz",
+      "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8="
+    },
+    "parallel-transform": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz",
+      "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=",
+      "requires": {
+        "cyclist": "^1.0.1",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      }
+    },
+    "param-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz?cache=0&sync_timestamp=1606867311360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparam-case%2Fdownload%2Fparam-case-2.1.1.tgz",
+      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0"
+      }
+    },
+    "parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "callsites": "^3.0.0"
+      },
+      "dependencies": {
+        "callsites": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+          "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "parse-asn1": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.6.tgz?cache=0&sync_timestamp=1597167448404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-asn1%2Fdownload%2Fparse-asn1-5.1.6.tgz",
+      "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=",
+      "requires": {
+        "asn1.js": "^5.2.0",
+        "browserify-aes": "^1.0.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "parse-json": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.2.0.tgz?cache=0&sync_timestamp=1610966667117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.2.0.tgz",
+      "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "error-ex": "^1.3.1",
+        "json-parse-even-better-errors": "^2.3.0",
+        "lines-and-columns": "^1.1.6"
+      }
+    },
+    "parse5": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz",
+      "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=",
+      "dev": true
+    },
+    "parse5-htmlparser2-tree-adapter": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+      "integrity": "sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY=",
+      "dev": true,
+      "requires": {
+        "parse5": "^6.0.1"
+      },
+      "dependencies": {
+        "parse5": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-6.0.1.tgz",
+          "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=",
+          "dev": true
+        }
+      }
+    },
+    "parseqs": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npm.taobao.org/parseqs/download/parseqs-0.0.6.tgz",
+      "integrity": "sha1-jku1oZ0c3IRKCKyXTTTic6+mcNU="
+    },
+    "parseuri": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npm.taobao.org/parseuri/download/parseuri-0.0.6.tgz",
+      "integrity": "sha1-4Ulugp46wv9H85pN0ESzKCPEolo="
+    },
+    "parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
+      "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ="
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+    },
+    "path-browserify": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz",
+      "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo="
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+    },
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+    },
+    "path-is-inside": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz",
+      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "dev": true
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "dev": true
+    },
+    "path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.nlark.com/path-parse/download/path-parse-1.0.7.tgz",
+      "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU="
+    },
+    "path-to-regexp": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz",
+      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+      "dev": true
+    },
+    "path-type": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz",
+      "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
+    "pbkdf2": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.2.tgz",
+      "integrity": "sha1-3YIqoIh1gOUvGgOdw+2hCO+uMHU=",
+      "requires": {
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+    },
+    "picomatch": {
+      "version": "2.3.0",
+      "resolved": "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz",
+      "integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI="
+    },
+    "pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz",
+      "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE="
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "pirates": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/pirates/download/pirates-4.0.1.tgz",
+      "integrity": "sha1-ZDqSyviUVm+RsrmG0sZpUKji+4c=",
+      "requires": {
+        "node-modules-regexp": "^1.0.0"
+      }
+    },
+    "pkg-dir": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz?cache=0&sync_timestamp=1602858957553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz",
+      "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+      "requires": {
+        "find-up": "^3.0.0"
+      }
+    },
+    "pn": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz",
+      "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=",
+      "dev": true
+    },
+    "pnp-webpack-plugin": {
+      "version": "1.7.0",
+      "resolved": "https://registry.nlark.com/pnp-webpack-plugin/download/pnp-webpack-plugin-1.7.0.tgz",
+      "integrity": "sha1-ZXQThPbYBW824iVajWf/wghm9ck=",
+      "dev": true,
+      "requires": {
+        "ts-pnp": "^1.1.6"
+      }
+    },
+    "portfinder": {
+      "version": "1.0.28",
+      "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz",
+      "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=",
+      "requires": {
+        "async": "^2.6.2",
+        "debug": "^3.1.1",
+        "mkdirp": "^0.5.5"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.2.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+    },
+    "postcss": {
+      "version": "7.0.36",
+      "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.36.tgz?cache=0&sync_timestamp=1626909106325&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.36.tgz",
+      "integrity": "sha1-BW+M/6k5ZiqPWQWVDAfVKFZE38s=",
+      "requires": {
+        "chalk": "^2.4.2",
+        "source-map": "^0.6.1",
+        "supports-color": "^6.1.0"
+      }
+    },
+    "postcss-calc": {
+      "version": "7.0.5",
+      "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.5.tgz?cache=0&sync_timestamp=1609689191682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.5.tgz",
+      "integrity": "sha1-+KbpnxLmGcLrwjz2xIb9wVhgkz4=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.27",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.0.2"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
+          "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
+          "dev": true
+        },
+        "postcss-selector-parser": {
+          "version": "6.0.6",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz?cache=0&sync_timestamp=1620752924836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.6.tgz",
+          "integrity": "sha1-LFu6gXSsL2mBq2MaQqsO5UrzMuo=",
+          "dev": true,
+          "requires": {
+            "cssesc": "^3.0.0",
+            "util-deprecate": "^1.0.2"
+          }
+        },
+        "postcss-value-parser": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz",
+          "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-colormin": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/postcss-colormin/download/postcss-colormin-4.0.3.tgz",
+      "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "color": "^3.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-comment": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/postcss-comment/download/postcss-comment-2.0.0.tgz",
+      "integrity": "sha1-bIgI5kzuJcMxRlGKioKUSwXxHm8=",
+      "dev": true,
+      "requires": {
+        "postcss": "^6.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.nlark.com/postcss/download/postcss-6.0.23.tgz?cache=0&sync_timestamp=1626909106325&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-6.0.23.tgz",
+          "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=",
+          "dev": true,
+          "requires": {
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
+          }
+        },
+        "supports-color": {
+          "version": "5.5.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
+          "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-convert-values": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz",
+      "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-discard-comments": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz",
+      "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-discard-duplicates": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz",
+      "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-discard-empty": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz",
+      "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-discard-overridden": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz",
+      "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-helpers": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npm.taobao.org/postcss-helpers/download/postcss-helpers-0.3.2.tgz",
+      "integrity": "sha1-z4ch2NZgXSV3MC+Wav79of6pkpw=",
+      "dev": true,
+      "requires": {
+        "urijs": "^1.18.12"
+      }
+    },
+    "postcss-import": {
+      "version": "12.0.1",
+      "resolved": "https://registry.nlark.com/postcss-import/download/postcss-import-12.0.1.tgz",
+      "integrity": "sha1-z4x6sLXMq1ZJAkU25WX4QZKLcVM=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.1",
+        "postcss-value-parser": "^3.2.3",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      }
+    },
+    "postcss-load-config": {
+      "version": "2.1.2",
+      "resolved": "https://registry.nlark.com/postcss-load-config/download/postcss-load-config-2.1.2.tgz",
+      "integrity": "sha1-xepQTyxK7zPHNZo03jVzdyrXUCo=",
+      "dev": true,
+      "requires": {
+        "cosmiconfig": "^5.0.0",
+        "import-cwd": "^2.0.0"
+      }
+    },
+    "postcss-loader": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/postcss-loader/download/postcss-loader-3.0.0.tgz?cache=0&sync_timestamp=1625142952652&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-loader%2Fdownload%2Fpostcss-loader-3.0.0.tgz",
+      "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "postcss": "^7.0.0",
+        "postcss-load-config": "^2.0.0",
+        "schema-utils": "^1.0.0"
+      }
+    },
+    "postcss-merge-longhand": {
+      "version": "4.0.11",
+      "resolved": "https://registry.nlark.com/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz",
+      "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=",
+      "dev": true,
+      "requires": {
+        "css-color-names": "0.0.4",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "stylehacks": "^4.0.0"
+      }
+    },
+    "postcss-merge-rules": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz?cache=0&sync_timestamp=1622234681019&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-4.0.3.tgz",
+      "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-api": "^3.0.0",
+        "cssnano-util-same-parent": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0",
+        "vendors": "^1.0.0"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.2",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1620752924836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "^5.2.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-minify-font-values": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz",
+      "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-minify-gradients": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz",
+      "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "is-color-stop": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-minify-params": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz",
+      "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=",
+      "dev": true,
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "browserslist": "^4.0.0",
+        "cssnano-util-get-arguments": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "uniqs": "^2.0.0"
+      }
+    },
+    "postcss-minify-selectors": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz",
+      "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=",
+      "dev": true,
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.2",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1620752924836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "^5.2.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-modules-extract-imports": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz?cache=0&sync_timestamp=1602588260997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-2.0.0.tgz",
+      "integrity": "sha1-gYcZoa4doyX5gyRGsBE27rSTzX4=",
+      "requires": {
+        "postcss": "^7.0.5"
+      }
+    },
+    "postcss-modules-local-by-default": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz?cache=0&sync_timestamp=1602587625149&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-3.0.3.tgz",
+      "integrity": "sha1-uxTgzHgnnVBNvcv9fgyiiZP/u7A=",
+      "dev": true,
+      "requires": {
+        "icss-utils": "^4.1.1",
+        "postcss": "^7.0.32",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.1.0"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
+          "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
+          "dev": true
+        },
+        "postcss-selector-parser": {
+          "version": "6.0.6",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz?cache=0&sync_timestamp=1620752924836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.6.tgz",
+          "integrity": "sha1-LFu6gXSsL2mBq2MaQqsO5UrzMuo=",
+          "dev": true,
+          "requires": {
+            "cssesc": "^3.0.0",
+            "util-deprecate": "^1.0.2"
+          }
+        },
+        "postcss-value-parser": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz",
+          "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-modules-scope": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz",
+      "integrity": "sha1-OFyuATzHdD9afXYC0Qc6iequYu4=",
+      "requires": {
+        "postcss": "^7.0.6",
+        "postcss-selector-parser": "^6.0.0"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
+          "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4="
+        },
+        "postcss-selector-parser": {
+          "version": "6.0.6",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz?cache=0&sync_timestamp=1620752924836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.6.tgz",
+          "integrity": "sha1-LFu6gXSsL2mBq2MaQqsO5UrzMuo=",
+          "requires": {
+            "cssesc": "^3.0.0",
+            "util-deprecate": "^1.0.2"
+          }
+        }
+      }
+    },
+    "postcss-modules-values": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz?cache=0&sync_timestamp=1602586215124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-3.0.0.tgz",
+      "integrity": "sha1-W1AA1uuuKbQlUwG0o6VFdEI+fxA=",
+      "dev": true,
+      "requires": {
+        "icss-utils": "^4.0.0",
+        "postcss": "^7.0.6"
+      }
+    },
+    "postcss-normalize-charset": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz",
+      "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-normalize-display-values": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz",
+      "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-positions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz",
+      "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-repeat-style": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz",
+      "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-string": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz",
+      "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-timing-functions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz",
+      "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-unicode": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz",
+      "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-url": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz",
+      "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=",
+      "dev": true,
+      "requires": {
+        "is-absolute-url": "^2.0.0",
+        "normalize-url": "^3.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-whitespace": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz",
+      "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-ordered-values": {
+      "version": "4.1.2",
+      "resolved": "https://registry.nlark.com/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-4.1.2.tgz",
+      "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-reduce-initial": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz",
+      "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-api": "^3.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-reduce-transforms": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz",
+      "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-selector-parser": {
+      "version": "5.0.0",
+      "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz?cache=0&sync_timestamp=1620752924836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-5.0.0.tgz",
+      "integrity": "sha1-JJBENWaXsztk8aj3yAki3d7nGVw=",
+      "dev": true,
+      "requires": {
+        "cssesc": "^2.0.0",
+        "indexes-of": "^1.0.1",
+        "uniq": "^1.0.1"
+      }
+    },
+    "postcss-svgo": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/postcss-svgo/download/postcss-svgo-4.0.3.tgz",
+      "integrity": "sha1-NDos26yVBdQWJD1Jb3JPOIlMlB4=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "svgo": "^1.0.0"
+      }
+    },
+    "postcss-unique-selectors": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz",
+      "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=",
+      "dev": true,
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "postcss": "^7.0.0",
+        "uniqs": "^2.0.0"
+      }
+    },
+    "postcss-urlrewrite": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npm.taobao.org/postcss-urlrewrite/download/postcss-urlrewrite-0.2.2.tgz",
+      "integrity": "sha1-utU/TeBLwIEvJ4czMUvTBi7Ta9Q=",
+      "dev": true,
+      "requires": {
+        "postcss-helpers": "^0.3.2"
+      }
+    },
+    "postcss-value-parser": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+      "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE="
+    },
+    "prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz",
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+    },
+    "prepend-http": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/prepend-http/download/prepend-http-1.0.4.tgz?cache=0&sync_timestamp=1628547565904&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fprepend-http%2Fdownload%2Fprepend-http-1.0.4.tgz",
+      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+      "dev": true
+    },
+    "prettier": {
+      "version": "1.19.1",
+      "resolved": "https://registry.nlark.com/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1624696193562&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz",
+      "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
+      "optional": true
+    },
+    "pretty-error": {
+      "version": "2.1.2",
+      "resolved": "https://registry.nlark.com/pretty-error/download/pretty-error-2.1.2.tgz",
+      "integrity": "sha1-von4LYGxyG7I/fvDhQRYgnJ/k7Y=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.20",
+        "renderkid": "^2.0.4"
+      }
+    },
+    "pretty-format": {
+      "version": "25.5.0",
+      "resolved": "https://registry.nlark.com/pretty-format/download/pretty-format-25.5.0.tgz",
+      "integrity": "sha1-eHPB13T2gsNLjUi2dDor8qxVeRo=",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^25.5.0",
+        "ansi-regex": "^5.0.0",
+        "ansi-styles": "^4.0.0",
+        "react-is": "^16.12.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz",
+          "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        }
+      }
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+    },
+    "process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I="
+    },
+    "promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz",
+      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+    },
+    "prompts": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npm.taobao.org/prompts/download/prompts-2.4.1.tgz?cache=0&sync_timestamp=1617240041932&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprompts%2Fdownload%2Fprompts-2.4.1.tgz",
+      "integrity": "sha1-vv07EZW6BS+f0v3opIbE6C7nf2E=",
+      "dev": true,
+      "requires": {
+        "kleur": "^3.0.3",
+        "sisteransi": "^1.0.5"
+      }
+    },
+    "proxy-addr": {
+      "version": "2.0.7",
+      "resolved": "https://registry.nlark.com/proxy-addr/download/proxy-addr-2.0.7.tgz",
+      "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=",
+      "dev": true,
+      "requires": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      }
+    },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz",
+      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+    },
+    "psl": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz",
+      "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ="
+    },
+    "public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz",
+      "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
+      "requires": {
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og="
+        }
+      }
+    },
+    "pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz",
+      "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz",
+      "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=",
+      "requires": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
+      },
+      "dependencies": {
+        "pump": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz",
+          "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=",
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        }
+      }
+    },
+    "punycode": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
+      "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
+    },
+    "q": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz",
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+      "dev": true
+    },
+    "qr-image": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npm.taobao.org/qr-image/download/qr-image-3.2.0.tgz",
+      "integrity": "sha1-n6gpW+rlDEoUnPn5CaHbRkqGcug="
+    },
+    "qrcode-reader": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/qrcode-reader/download/qrcode-reader-1.0.4.tgz",
+      "integrity": "sha1-ldm7noEwgANhqWy1pDEkrR2eBrg=",
+      "dev": true
+    },
+    "qrcode-terminal": {
+      "version": "0.12.0",
+      "resolved": "https://registry.nlark.com/qrcode-terminal/download/qrcode-terminal-0.12.0.tgz",
+      "integrity": "sha1-u1tpnvf58FBQkqN0i+RGT+cbWBk="
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz?cache=0&sync_timestamp=1616385328325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.5.2.tgz",
+      "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY="
+    },
+    "query-string": {
+      "version": "4.3.4",
+      "resolved": "https://registry.nlark.com/query-string/download/query-string-4.3.4.tgz",
+      "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+      "dev": true,
+      "requires": {
+        "object-assign": "^4.1.0",
+        "strict-uri-encode": "^1.0.0"
+      }
+    },
+    "querystring": {
+      "version": "0.2.0",
+      "resolved": "https://registry.nlark.com/querystring/download/querystring-0.2.0.tgz",
+      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+    },
+    "querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz",
+      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+    },
+    "querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.2.0.tgz?cache=0&sync_timestamp=1597686663691&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystringify%2Fdownload%2Fquerystringify-2.2.0.tgz",
+      "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=",
+      "dev": true
+    },
+    "randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
+      "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=",
+      "requires": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "randomfill": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz",
+      "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
+      "requires": {
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz",
+      "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=",
+      "dev": true
+    },
+    "raw-body": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz",
+      "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=",
+      "requires": {
+        "bytes": "3.1.0",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      }
+    },
+    "rc": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz",
+      "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=",
+      "dev": true,
+      "requires": {
+        "deep-extend": "^0.6.0",
+        "ini": "~1.3.0",
+        "minimist": "^1.2.0",
+        "strip-json-comments": "~2.0.1"
+      }
+    },
+    "react-is": {
+      "version": "16.13.1",
+      "resolved": "https://registry.nlark.com/react-is/download/react-is-16.13.1.tgz",
+      "integrity": "sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ=",
+      "dev": true
+    },
+    "read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/read-cache/download/read-cache-1.0.0.tgz",
+      "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+      "dev": true,
+      "requires": {
+        "pify": "^2.3.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        }
+      }
+    },
+    "read-pkg": {
+      "version": "5.2.0",
+      "resolved": "https://registry.nlark.com/read-pkg/download/read-pkg-5.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fread-pkg%2Fdownload%2Fread-pkg-5.2.0.tgz",
+      "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=",
+      "dev": true,
+      "requires": {
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^2.5.0",
+        "parse-json": "^5.0.0",
+        "type-fest": "^0.6.0"
+      }
+    },
+    "read-pkg-up": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz",
+      "integrity": "sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc=",
+      "dev": true,
+      "requires": {
+        "find-up": "^4.1.0",
+        "read-pkg": "^5.2.0",
+        "type-fest": "^0.8.1"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
+          "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz",
+          "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz",
+          "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-4.0.0.tgz",
+          "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+          "dev": true
+        },
+        "type-fest": {
+          "version": "0.8.1",
+          "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1630842470843&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz",
+          "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=",
+          "dev": true
+        }
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz",
+      "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.6.0.tgz?cache=0&sync_timestamp=1615717369278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.6.0.tgz",
+      "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
+      "requires": {
+        "picomatch": "^2.2.1"
+      }
+    },
+    "realpath-native": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/realpath-native/download/realpath-native-2.0.0.tgz",
+      "integrity": "sha1-c3esQptuH9WZ3DjQjtlC0Ne+uGY=",
+      "dev": true
+    },
+    "recast": {
+      "version": "0.20.5",
+      "resolved": "https://registry.nlark.com/recast/download/recast-0.20.5.tgz",
+      "integrity": "sha1-jixsloJ6GzOcY03SMpV9IwVTzq4=",
+      "dev": true,
+      "requires": {
+        "ast-types": "0.14.2",
+        "esprima": "~4.0.0",
+        "source-map": "~0.6.1",
+        "tslib": "^2.0.1"
+      }
+    },
+    "rechoir": {
+      "version": "0.6.2",
+      "resolved": "https://registry.nlark.com/rechoir/download/rechoir-0.6.2.tgz",
+      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+      "requires": {
+        "resolve": "^1.1.6"
+      }
+    },
+    "redent": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/redent/download/redent-1.0.0.tgz",
+      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+      "requires": {
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
+      },
+      "dependencies": {
+        "strip-indent": {
+          "version": "1.0.1",
+          "resolved": "https://registry.nlark.com/strip-indent/download/strip-indent-1.0.1.tgz",
+          "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+          "requires": {
+            "get-stdin": "^4.0.1"
+          }
+        }
+      }
+    },
+    "regenerate": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.2.tgz?cache=0&sync_timestamp=1604218378158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.2.tgz",
+      "integrity": "sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo="
+    },
+    "regenerate-unicode-properties": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz",
+      "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=",
+      "requires": {
+        "regenerate": "^1.4.0"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.12.1",
+      "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.12.1.tgz?cache=0&sync_timestamp=1626993001371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.12.1.tgz",
+      "integrity": "sha1-+hpxVEdkwDb4xJsToIsllMn4oN4="
+    },
+    "regenerator-transform": {
+      "version": "0.14.5",
+      "resolved": "https://registry.nlark.com/regenerator-transform/download/regenerator-transform-0.14.5.tgz?cache=0&sync_timestamp=1627057533376&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-transform%2Fdownload%2Fregenerator-transform-0.14.5.tgz",
+      "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=",
+      "requires": {
+        "@babel/runtime": "^7.8.4"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz",
+      "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "regexp.prototype.flags": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.1.tgz?cache=0&sync_timestamp=1610725679574&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.1.tgz",
+      "integrity": "sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      }
+    },
+    "regexpu-core": {
+      "version": "4.7.1",
+      "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.1.tgz",
+      "integrity": "sha1-LepamgcjMpj78NuR+pq8TG4PitY=",
+      "requires": {
+        "regenerate": "^1.4.0",
+        "regenerate-unicode-properties": "^8.2.0",
+        "regjsgen": "^0.5.1",
+        "regjsparser": "^0.6.4",
+        "unicode-match-property-ecmascript": "^1.0.4",
+        "unicode-match-property-value-ecmascript": "^1.2.0"
+      }
+    },
+    "registry-auth-token": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.3.2.tgz",
+      "integrity": "sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA=",
+      "dev": true,
+      "requires": {
+        "rc": "^1.1.6",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "registry-url": {
+      "version": "3.1.0",
+      "resolved": "https://registry.nlark.com/registry-url/download/registry-url-3.1.0.tgz",
+      "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+      "dev": true,
+      "requires": {
+        "rc": "^1.0.1"
+      }
+    },
+    "regjsgen": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz",
+      "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM="
+    },
+    "regjsparser": {
+      "version": "0.6.9",
+      "resolved": "https://registry.nlark.com/regjsparser/download/regjsparser-0.6.9.tgz",
+      "integrity": "sha1-tInu98mizkNydicBFCnPgzpxg+Y=",
+      "requires": {
+        "jsesc": "~0.5.0"
+      },
+      "dependencies": {
+        "jsesc": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz?cache=0&sync_timestamp=1603891242793&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-0.5.0.tgz",
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+        }
+      }
+    },
+    "relateurl": {
+      "version": "0.2.7",
+      "resolved": "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz",
+      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+      "dev": true
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+    },
+    "renderkid": {
+      "version": "2.0.7",
+      "resolved": "https://registry.nlark.com/renderkid/download/renderkid-2.0.7.tgz?cache=0&sync_timestamp=1623343447049&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frenderkid%2Fdownload%2Frenderkid-2.0.7.tgz",
+      "integrity": "sha1-Rk8namvc7mBvShWZP5sp/HTKhgk=",
+      "dev": true,
+      "requires": {
+        "css-select": "^4.1.3",
+        "dom-converter": "^0.2.0",
+        "htmlparser2": "^6.1.0",
+        "lodash": "^4.17.21",
+        "strip-ansi": "^3.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "css-select": {
+          "version": "4.1.3",
+          "resolved": "https://registry.nlark.com/css-select/download/css-select-4.1.3.tgz",
+          "integrity": "sha1-pwRA9wMX8maRGK10/xBeZYSccGc=",
+          "dev": true,
+          "requires": {
+            "boolbase": "^1.0.0",
+            "css-what": "^5.0.0",
+            "domhandler": "^4.2.0",
+            "domutils": "^2.6.0",
+            "nth-check": "^2.0.0"
+          }
+        },
+        "css-what": {
+          "version": "5.0.1",
+          "resolved": "https://registry.nlark.com/css-what/download/css-what-5.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-5.0.1.tgz",
+          "integrity": "sha1-PvqCATH0ZpqKwkCPnDLnx96fTK0=",
+          "dev": true
+        },
+        "dom-serializer": {
+          "version": "1.3.2",
+          "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz?cache=0&sync_timestamp=1621256858583&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-1.3.2.tgz",
+          "integrity": "sha1-YgZDfTLO767HFhgDIwx6ILwbTZE=",
+          "dev": true,
+          "requires": {
+            "domelementtype": "^2.0.1",
+            "domhandler": "^4.2.0",
+            "entities": "^2.0.0"
+          }
+        },
+        "domelementtype": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz",
+          "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+          "dev": true
+        },
+        "domutils": {
+          "version": "2.8.0",
+          "resolved": "https://registry.nlark.com/domutils/download/domutils-2.8.0.tgz?cache=0&sync_timestamp=1630106535879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-2.8.0.tgz",
+          "integrity": "sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU=",
+          "dev": true,
+          "requires": {
+            "dom-serializer": "^1.0.1",
+            "domelementtype": "^2.2.0",
+            "domhandler": "^4.2.0"
+          }
+        },
+        "nth-check": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-2.0.0.tgz?cache=0&sync_timestamp=1606860690670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnth-check%2Fdownload%2Fnth-check-2.0.0.tgz",
+          "integrity": "sha1-G7T22scAcvwxPoyc0UF7UHTAoSU=",
+          "dev": true,
+          "requires": {
+            "boolbase": "^1.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "repeat-element": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.4.tgz?cache=0&sync_timestamp=1617837642601&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frepeat-element%2Fdownload%2Frepeat-element-1.1.4.tgz",
+      "integrity": "sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek="
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+    },
+    "repeating": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/repeating/download/repeating-2.0.1.tgz?cache=0&sync_timestamp=1624608101869&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frepeating%2Fdownload%2Frepeating-2.0.1.tgz",
+      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+      "requires": {
+        "is-finite": "^1.0.0"
+      }
+    },
+    "request": {
+      "version": "2.88.2",
+      "resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz",
+      "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=",
+      "requires": {
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.8.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.3",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.5.0",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "request-promise-core": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.4.tgz",
+      "integrity": "sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.19"
+      }
+    },
+    "request-promise-native": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.9.tgz",
+      "integrity": "sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg=",
+      "dev": true,
+      "requires": {
+        "request-promise-core": "1.1.4",
+        "stealthy-require": "^1.1.1",
+        "tough-cookie": "^2.3.3"
+      }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+    },
+    "require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz",
+      "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs="
+    },
+    "requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz",
+      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+      "dev": true
+    },
+    "resolve": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz?cache=0&sync_timestamp=1613055183799&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.20.0.tgz",
+      "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=",
+      "requires": {
+        "is-core-module": "^2.2.0",
+        "path-parse": "^1.0.6"
+      }
+    },
+    "resolve-cwd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-cwd%2Fdownload%2Fresolve-cwd-2.0.0.tgz",
+      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "resolve-from": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz",
+      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+      "dev": true
+    },
+    "resolve-path": {
+      "version": "1.4.0",
+      "resolved": "https://registry.nlark.com/resolve-path/download/resolve-path-1.4.0.tgz",
+      "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=",
+      "requires": {
+        "http-errors": "~1.6.2",
+        "path-is-absolute": "1.0.1"
+      },
+      "dependencies": {
+        "http-errors": {
+          "version": "1.6.3",
+          "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz",
+          "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+          "requires": {
+            "depd": "~1.1.2",
+            "inherits": "2.0.3",
+            "setprototypeof": "1.1.0",
+            "statuses": ">= 1.4.0 < 2"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+        },
+        "setprototypeof": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz",
+          "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY="
+        }
+      }
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+    },
+    "restore-cursor": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/restore-cursor/download/restore-cursor-2.0.0.tgz?cache=0&sync_timestamp=1629747087185&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frestore-cursor%2Fdownload%2Frestore-cursor-2.0.0.tgz",
+      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+      "dev": true,
+      "requires": {
+        "onetime": "^2.0.0",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz",
+      "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w="
+    },
+    "retry": {
+      "version": "0.12.0",
+      "resolved": "https://registry.nlark.com/retry/download/retry-0.12.0.tgz",
+      "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+      "dev": true
+    },
+    "rgb-regex": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz",
+      "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+      "dev": true
+    },
+    "rgba-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz",
+      "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+      "dev": true
+    },
+    "rimraf": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz",
+      "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=",
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
+    "ripemd160": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz",
+      "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
+    },
+    "rsvp": {
+      "version": "4.8.5",
+      "resolved": "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz",
+      "integrity": "sha1-yPFVMR0Wf2jyHhaN9x7FsIMRNzQ=",
+      "dev": true
+    },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz",
+      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+      "requires": {
+        "aproba": "^1.1.1"
+      }
+    },
+    "safe-area-insets": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npm.taobao.org/safe-area-insets/download/safe-area-insets-1.4.1.tgz",
+      "integrity": "sha1-iTCeAaUW3NfS/gEqnEEVGClXvYs="
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
+      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "requires": {
+        "ret": "~0.1.10"
+      }
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
+      "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
+    },
+    "sane": {
+      "version": "4.1.0",
+      "resolved": "https://registry.nlark.com/sane/download/sane-4.1.0.tgz?cache=0&sync_timestamp=1624844585538&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsane%2Fdownload%2Fsane-4.1.0.tgz",
+      "integrity": "sha1-7Ygf2SJzOmxGG8GJ3CtsAG8//e0=",
+      "dev": true,
+      "requires": {
+        "@cnakazawa/watch": "^1.0.3",
+        "anymatch": "^2.0.0",
+        "capture-exit": "^2.0.0",
+        "exec-sh": "^0.3.2",
+        "execa": "^1.0.0",
+        "fb-watchman": "^2.0.0",
+        "micromatch": "^3.1.4",
+        "minimist": "^1.1.1",
+        "walker": "~1.0.5"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
+          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+          "dev": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          }
+        },
+        "normalize-path": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
+          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+          "dev": true,
+          "requires": {
+            "remove-trailing-separator": "^1.0.1"
+          }
+        }
+      }
+    },
+    "sass-graph": {
+      "version": "2.2.5",
+      "resolved": "https://registry.npm.taobao.org/sass-graph/download/sass-graph-2.2.5.tgz",
+      "integrity": "sha1-qYHIdEa4MZ2W3OBnHkh4eb0kwug=",
+      "requires": {
+        "glob": "^7.0.0",
+        "lodash": "^4.0.0",
+        "scss-tokenizer": "^0.2.3",
+        "yargs": "^13.3.2"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA="
+        },
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz",
+          "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+          "requires": {
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
+          }
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1614682725186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY="
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1618558856477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz?cache=0&sync_timestamp=1618558923406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz",
+          "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          }
+        },
+        "yargs": {
+          "version": "13.3.2",
+          "resolved": "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz",
+          "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
+          "requires": {
+            "cliui": "^5.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^3.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.2"
+          }
+        },
+        "yargs-parser": {
+          "version": "13.1.2",
+          "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1624233275366&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz",
+          "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=",
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
+        }
+      }
+    },
+    "sass-loader": {
+      "version": "7.3.1",
+      "resolved": "https://registry.nlark.com/sass-loader/download/sass-loader-7.3.1.tgz?cache=0&sync_timestamp=1623350873447&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsass-loader%2Fdownload%2Fsass-loader-7.3.1.tgz",
+      "integrity": "sha1-pb9ooEvOocE/+ELXRxUPerfQ0j8=",
+      "requires": {
+        "clone-deep": "^4.0.1",
+        "loader-utils": "^1.0.1",
+        "neo-async": "^2.5.0",
+        "pify": "^4.0.1",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0="
+        }
+      }
+    },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz",
+      "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
+      "dev": true
+    },
+    "saxes": {
+      "version": "3.1.11",
+      "resolved": "https://registry.nlark.com/saxes/download/saxes-3.1.11.tgz",
+      "integrity": "sha1-1Z0f0zLskq2YouCy7mRHAjhLHFs=",
+      "dev": true,
+      "requires": {
+        "xmlchars": "^2.1.1"
+      }
+    },
+    "schema-utils": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-1.0.0.tgz",
+      "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+      "requires": {
+        "ajv": "^6.1.0",
+        "ajv-errors": "^1.0.0",
+        "ajv-keywords": "^3.1.0"
+      }
+    },
+    "scss-tokenizer": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npm.taobao.org/scss-tokenizer/download/scss-tokenizer-0.2.3.tgz",
+      "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+      "requires": {
+        "js-base64": "^2.1.8",
+        "source-map": "^0.4.2"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.4.4",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz",
+          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "select-hose": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz",
+      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+      "dev": true
+    },
+    "selfsigned": {
+      "version": "1.10.11",
+      "resolved": "https://registry.nlark.com/selfsigned/download/selfsigned-1.10.11.tgz?cache=0&sync_timestamp=1620160245612&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.11.tgz",
+      "integrity": "sha1-JJKc2Qb+D0S20B+yOZmnOVN6y+k=",
+      "dev": true,
+      "requires": {
+        "node-forge": "^0.10.0"
+      }
+    },
+    "semver": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+      "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc="
+    },
+    "send": {
+      "version": "0.17.1",
+      "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz",
+      "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "~1.7.2",
+        "mime": "1.6.0",
+        "ms": "2.1.1",
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.1",
+        "statuses": "~1.5.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          },
+          "dependencies": {
+            "ms": {
+              "version": "2.0.0",
+              "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+              "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+              "dev": true
+            }
+          }
+        },
+        "mime": {
+          "version": "1.6.0",
+          "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz",
+          "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        }
+      }
+    },
+    "serialize-javascript": {
+      "version": "4.0.0",
+      "resolved": "https://registry.nlark.com/serialize-javascript/download/serialize-javascript-4.0.0.tgz",
+      "integrity": "sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao=",
+      "requires": {
+        "randombytes": "^2.1.0"
+      }
+    },
+    "serve-index": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz",
+      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.4",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "http-errors": {
+          "version": "1.6.3",
+          "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz",
+          "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+          "dev": true,
+          "requires": {
+            "depd": "~1.1.2",
+            "inherits": "2.0.3",
+            "setprototypeof": "1.1.0",
+            "statuses": ">= 1.4.0 < 2"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        },
+        "setprototypeof": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz",
+          "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=",
+          "dev": true
+        }
+      }
+    },
+    "serve-static": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz",
+      "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=",
+      "dev": true,
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.17.1"
+      }
+    },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+    },
+    "set-immediate-shim": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz",
+      "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
+    },
+    "set-value": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/set-value/download/set-value-2.0.1.tgz",
+      "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=",
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz",
+      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+    },
+    "setprototypeof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz",
+      "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM="
+    },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz",
+      "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "shallow-clone": {
+      "version": "3.0.1",
+      "resolved": "https://registry.nlark.com/shallow-clone/download/shallow-clone-3.0.1.tgz",
+      "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=",
+      "requires": {
+        "kind-of": "^6.0.2"
+      }
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
+      "requires": {
+        "shebang-regex": "^1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-1.0.0.tgz?cache=0&sync_timestamp=1628896304371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "dev": true
+    },
+    "shell-exec": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/shell-exec/download/shell-exec-1.0.2.tgz",
+      "integrity": "sha1-LpNhsP3h1z9HbEtmcfoXeF9pZ1Y=",
+      "dev": true
+    },
+    "shell-quote": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npm.taobao.org/shell-quote/download/shell-quote-1.7.2.tgz",
+      "integrity": "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I=",
+      "dev": true
+    },
+    "shelljs": {
+      "version": "0.8.4",
+      "resolved": "https://registry.nlark.com/shelljs/download/shelljs-0.8.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshelljs%2Fdownload%2Fshelljs-0.8.4.tgz",
+      "integrity": "sha1-3naE/ut2f4cWsyYHiooAh1iQ48I=",
+      "requires": {
+        "glob": "^7.0.0",
+        "interpret": "^1.0.0",
+        "rechoir": "^0.6.2"
+      }
+    },
+    "shellwords": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz",
+      "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=",
+      "dev": true,
+      "optional": true
+    },
+    "side-channel": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/side-channel/download/side-channel-1.0.4.tgz",
+      "integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.0",
+        "get-intrinsic": "^1.0.2",
+        "object-inspect": "^1.9.0"
+      }
+    },
+    "signal-exit": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz",
+      "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw="
+    },
+    "simple-swizzle": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz",
+      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.3.1"
+      },
+      "dependencies": {
+        "is-arrayish": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz",
+          "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=",
+          "dev": true
+        }
+      }
+    },
+    "sisteransi": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/sisteransi/download/sisteransi-1.0.5.tgz",
+      "integrity": "sha1-E01oEpd1ZDfMBcoBNw06elcQde0=",
+      "dev": true
+    },
+    "slash": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
+      "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+      "dev": true
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz",
+      "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
+      "requires": {
+        "base": "^0.11.1",
+        "debug": "^2.2.0",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "map-cache": "^0.2.2",
+        "source-map": "^0.5.6",
+        "source-map-resolve": "^0.5.0",
+        "use": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
+      "requires": {
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
+      "requires": {
+        "kind-of": "^3.2.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "socket.io": {
+      "version": "2.4.1",
+      "resolved": "https://registry.nlark.com/socket.io/download/socket.io-2.4.1.tgz?cache=0&sync_timestamp=1630308213568&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsocket.io%2Fdownload%2Fsocket.io-2.4.1.tgz",
+      "integrity": "sha1-la2GHJpSNp1/Gmis8NShsW2kUdI=",
+      "requires": {
+        "debug": "~4.1.0",
+        "engine.io": "~3.5.0",
+        "has-binary2": "~1.0.2",
+        "socket.io-adapter": "~1.1.0",
+        "socket.io-client": "2.4.0",
+        "socket.io-parser": "~3.4.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.nlark.com/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz",
+          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "socket.io-adapter": {
+      "version": "1.1.2",
+      "resolved": "https://registry.nlark.com/socket.io-adapter/download/socket.io-adapter-1.1.2.tgz?cache=0&sync_timestamp=1630131663074&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsocket.io-adapter%2Fdownload%2Fsocket.io-adapter-1.1.2.tgz",
+      "integrity": "sha1-qz8Nb2a4/H/KOVmrWZH4IiF4m+k="
+    },
+    "socket.io-client": {
+      "version": "2.4.0",
+      "resolved": "https://registry.nlark.com/socket.io-client/download/socket.io-client-2.4.0.tgz",
+      "integrity": "sha1-qvtdWUo8VaNDVVYvyK6iLtkRmjU=",
+      "requires": {
+        "backo2": "1.0.2",
+        "component-bind": "1.0.0",
+        "component-emitter": "~1.3.0",
+        "debug": "~3.1.0",
+        "engine.io-client": "~3.5.0",
+        "has-binary2": "~1.0.2",
+        "indexof": "0.0.1",
+        "parseqs": "0.0.6",
+        "parseuri": "0.0.6",
+        "socket.io-parser": "~3.3.0",
+        "to-array": "0.1.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "isarray": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz",
+          "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        },
+        "socket.io-parser": {
+          "version": "3.3.2",
+          "resolved": "https://registry.nlark.com/socket.io-parser/download/socket.io-parser-3.3.2.tgz",
+          "integrity": "sha1-74cgCdCtz3BPL76DAZGhR1KtULY=",
+          "requires": {
+            "component-emitter": "~1.3.0",
+            "debug": "~3.1.0",
+            "isarray": "2.0.1"
+          }
+        }
+      }
+    },
+    "socket.io-parser": {
+      "version": "3.4.1",
+      "resolved": "https://registry.nlark.com/socket.io-parser/download/socket.io-parser-3.4.1.tgz",
+      "integrity": "sha1-sGr4ODApdYN+qy3JgAN9okBU1ko=",
+      "requires": {
+        "component-emitter": "1.2.1",
+        "debug": "~4.1.0",
+        "isarray": "2.0.1"
+      },
+      "dependencies": {
+        "component-emitter": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz",
+          "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+        },
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.nlark.com/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz",
+          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "isarray": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz",
+          "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+        }
+      }
+    },
+    "sockjs": {
+      "version": "0.3.21",
+      "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.21.tgz",
+      "integrity": "sha1-s0/7mOeWkwtgoM+hGQTWozmn1Bc=",
+      "dev": true,
+      "requires": {
+        "faye-websocket": "^0.11.3",
+        "uuid": "^3.4.0",
+        "websocket-driver": "^0.7.4"
+      }
+    },
+    "sockjs-client": {
+      "version": "1.5.2",
+      "resolved": "https://registry.nlark.com/sockjs-client/download/sockjs-client-1.5.2.tgz",
+      "integrity": "sha1-S8SMLanOR2nxnccjOWtQ9cEjMKM=",
+      "dev": true,
+      "requires": {
+        "debug": "^3.2.6",
+        "eventsource": "^1.0.7",
+        "faye-websocket": "^0.11.3",
+        "inherits": "^2.0.4",
+        "json3": "^3.3.3",
+        "url-parse": "^1.5.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.2.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "sort-keys": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz",
+      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+      "dev": true,
+      "requires": {
+        "is-plain-obj": "^1.0.0"
+      },
+      "dependencies": {
+        "is-plain-obj": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz?cache=0&sync_timestamp=1618600554597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-1.1.0.tgz",
+          "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+          "dev": true
+        }
+      }
+    },
+    "source-list-map": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz",
+      "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ="
+    },
+    "source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+      "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+    },
+    "source-map-resolve": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz",
+      "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=",
+      "requires": {
+        "atob": "^2.1.2",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
+      }
+    },
+    "source-map-support": {
+      "version": "0.5.19",
+      "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz",
+      "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=",
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.1.tgz?cache=0&sync_timestamp=1612210508484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-url%2Fdownload%2Fsource-map-url-0.4.1.tgz",
+      "integrity": "sha1-CvZmBadFpaL5HPG7+KevvCg97FY="
+    },
+    "spdx-correct": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz",
+      "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=",
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz",
+      "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0="
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=",
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.10",
+      "resolved": "https://registry.nlark.com/spdx-license-ids/download/spdx-license-ids-3.0.10.tgz",
+      "integrity": "sha1-DZvszN5wA9bGWNSH3UijLwvzAUs="
+    },
+    "spdy": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz",
+      "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.0",
+        "handle-thing": "^2.0.0",
+        "http-deceiver": "^1.2.7",
+        "select-hose": "^2.0.0",
+        "spdy-transport": "^3.0.0"
+      }
+    },
+    "spdy-transport": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz",
+      "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.0",
+        "detect-node": "^2.0.4",
+        "hpack.js": "^2.1.6",
+        "obuf": "^1.1.2",
+        "readable-stream": "^3.0.6",
+        "wbuf": "^1.7.3"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz",
+      "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
+      "requires": {
+        "extend-shallow": "^3.0.0"
+      }
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz",
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+    },
+    "sshpk": {
+      "version": "1.16.1",
+      "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz",
+      "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=",
+      "requires": {
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
+      }
+    },
+    "ssri": {
+      "version": "6.0.2",
+      "resolved": "https://registry.nlark.com/ssri/download/ssri-6.0.2.tgz",
+      "integrity": "sha1-FXk5E08gRk5zAd26PpD/qPdyisU=",
+      "requires": {
+        "figgy-pudding": "^3.5.1"
+      }
+    },
+    "stable": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz",
+      "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=",
+      "dev": true
+    },
+    "stack-utils": {
+      "version": "1.0.5",
+      "resolved": "https://registry.nlark.com/stack-utils/download/stack-utils-1.0.5.tgz",
+      "integrity": "sha1-oZsLAZR+ACnI5FHV1hpJj1uxRxs=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^2.0.0"
+      },
+      "dependencies": {
+        "escape-string-regexp": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-2.0.0.tgz?cache=0&sync_timestamp=1618677243201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-2.0.0.tgz",
+          "integrity": "sha1-owME6Z2qMuI7L9IPUbq9B8/8o0Q=",
+          "dev": true
+        }
+      }
+    },
+    "stackframe": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz",
+      "integrity": "sha1-UkKUktY8YuuYmATBFVLj0i53kwM=",
+      "dev": true
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "requires": {
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "statuses": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1609654066899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz",
+      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+    },
+    "stdout-stream": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npm.taobao.org/stdout-stream/download/stdout-stream-1.4.1.tgz",
+      "integrity": "sha1-WsF0zdXNcmEEqgwLK9g4FdjVNd4=",
+      "requires": {
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "stealthy-require": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz",
+      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+      "dev": true
+    },
+    "stream-browserify": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz",
+      "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=",
+      "requires": {
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "stream-each": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz",
+      "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=",
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "stream-http": {
+      "version": "2.8.3",
+      "resolved": "https://registry.nlark.com/stream-http/download/stream-http-2.8.3.tgz",
+      "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=",
+      "requires": {
+        "builtin-status-codes": "^3.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.3.6",
+        "to-arraybuffer": "^1.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "stream-shift": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz",
+      "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0="
+    },
+    "strict-uri-encode": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz",
+      "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+      "dev": true
+    },
+    "stricter-htmlparser2": {
+      "version": "3.9.6",
+      "resolved": "https://registry.nlark.com/stricter-htmlparser2/download/stricter-htmlparser2-3.9.6.tgz",
+      "integrity": "sha1-/RlfXkvAmJxrFfx57KhcZAG7UEU=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^1.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.2",
+        "x-domhandler": "^2.4.2"
+      },
+      "dependencies": {
+        "entities": {
+          "version": "1.1.2",
+          "resolved": "https://registry.nlark.com/entities/download/entities-1.1.2.tgz?cache=0&sync_timestamp=1628508126700&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fentities%2Fdownload%2Fentities-1.1.2.tgz",
+          "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=",
+          "dev": true
+        }
+      }
+    },
+    "string-length": {
+      "version": "3.1.0",
+      "resolved": "https://registry.nlark.com/string-length/download/string-length-3.1.0.tgz",
+      "integrity": "sha1-EH74wjRW4Yeoq9SmEWL/SsbiWDc=",
+      "dev": true,
+      "requires": {
+        "astral-regex": "^1.0.0",
+        "strip-ansi": "^5.2.0"
+      },
+      "dependencies": {
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
+      }
+    },
+    "string-width": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz?cache=0&sync_timestamp=1618558856477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-2.1.1.tgz",
+      "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+      "requires": {
+        "is-fullwidth-code-point": "^2.0.0",
+        "strip-ansi": "^4.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "string.prototype.trimend": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz",
+      "integrity": "sha1-51rpDClCxjUEaGwYsoe0oLGkX4A=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      }
+    },
+    "string.prototype.trimstart": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.4.tgz?cache=0&sync_timestamp=1614127318238&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.4.tgz",
+      "integrity": "sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      }
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
+      "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "strip-ansi": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz",
+      "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^5.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz",
+          "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=",
+          "dev": true
+        }
+      }
+    },
+    "strip-bom": {
+      "version": "4.0.0",
+      "resolved": "https://registry.nlark.com/strip-bom/download/strip-bom-4.0.0.tgz?cache=0&sync_timestamp=1624608094529&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-bom%2Fdownload%2Fstrip-bom-4.0.0.tgz",
+      "integrity": "sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg=",
+      "dev": true
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "dev": true
+    },
+    "strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=",
+      "dev": true
+    },
+    "strip-indent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/strip-indent/download/strip-indent-2.0.0.tgz",
+      "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+      "dev": true
+    },
+    "strip-json-comments": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/strip-json-comments/download/strip-json-comments-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-2.0.1.tgz",
+      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+      "dev": true
+    },
+    "stylehacks": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/stylehacks/download/stylehacks-4.0.3.tgz",
+      "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.2",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1620752924836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "^5.2.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "supports-color": {
+      "version": "6.1.0",
+      "resolved": "https://registry.nlark.com/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
+      "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "supports-hyperlinks": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/supports-hyperlinks/download/supports-hyperlinks-2.2.0.tgz",
+      "integrity": "sha1-T3e0JIh2WJF3S3DHm6vYf5vVlLs=",
+      "dev": true,
+      "requires": {
+        "has-flag": "^4.0.0",
+        "supports-color": "^7.0.0"
+      },
+      "dependencies": {
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "svg-tags": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/svg-tags/download/svg-tags-1.0.0.tgz",
+      "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+      "dev": true
+    },
+    "svgo": {
+      "version": "1.3.2",
+      "resolved": "https://registry.nlark.com/svgo/download/svgo-1.3.2.tgz?cache=0&sync_timestamp=1630142321382&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsvgo%2Fdownload%2Fsvgo-1.3.2.tgz",
+      "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.1",
+        "coa": "^2.0.2",
+        "css-select": "^2.0.0",
+        "css-select-base-adapter": "^0.1.1",
+        "css-tree": "1.0.0-alpha.37",
+        "csso": "^4.0.2",
+        "js-yaml": "^3.13.1",
+        "mkdirp": "~0.5.1",
+        "object.values": "^1.1.0",
+        "sax": "~1.2.4",
+        "stable": "^0.1.8",
+        "unquote": "~1.1.1",
+        "util.promisify": "~1.0.0"
+      }
+    },
+    "symbol-tree": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz",
+      "integrity": "sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I=",
+      "dev": true
+    },
+    "tapable": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz?cache=0&sync_timestamp=1607088824436&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz",
+      "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I="
+    },
+    "tar": {
+      "version": "2.2.2",
+      "resolved": "https://registry.nlark.com/tar/download/tar-2.2.2.tgz?cache=0&sync_timestamp=1629994598621&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftar%2Fdownload%2Ftar-2.2.2.tgz",
+      "integrity": "sha1-DKiEhWLHKZuLRG/2pNYM27I+3EA=",
+      "requires": {
+        "block-stream": "*",
+        "fstream": "^1.0.12",
+        "inherits": "2"
+      }
+    },
+    "terminal-link": {
+      "version": "2.1.1",
+      "resolved": "https://registry.nlark.com/terminal-link/download/terminal-link-2.1.1.tgz",
+      "integrity": "sha1-FKZKJ6s8Dfkz6lRvulXy0HjtyZQ=",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^4.2.1",
+        "supports-hyperlinks": "^2.0.0"
+      }
+    },
+    "terser": {
+      "version": "4.8.0",
+      "resolved": "https://registry.nlark.com/terser/download/terser-4.8.0.tgz",
+      "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=",
+      "requires": {
+        "commander": "^2.20.0",
+        "source-map": "~0.6.1",
+        "source-map-support": "~0.5.12"
+      }
+    },
+    "terser-webpack-plugin": {
+      "version": "1.4.5",
+      "resolved": "https://registry.nlark.com/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz",
+      "integrity": "sha1-oheu+uozDnNP+sthIOwfoxLWBAs=",
+      "requires": {
+        "cacache": "^12.0.2",
+        "find-cache-dir": "^2.1.0",
+        "is-wsl": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^4.0.0",
+        "source-map": "^0.6.1",
+        "terser": "^4.1.2",
+        "webpack-sources": "^1.4.0",
+        "worker-farm": "^1.7.0"
+      }
+    },
+    "test-exclude": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npm.taobao.org/test-exclude/download/test-exclude-6.0.0.tgz",
+      "integrity": "sha1-BKhphmHYBepvopO2y55jrARO8V4=",
+      "dev": true,
+      "requires": {
+        "@istanbuljs/schema": "^0.1.2",
+        "glob": "^7.1.4",
+        "minimatch": "^3.0.4"
+      }
+    },
+    "thenify": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npm.taobao.org/thenify/download/thenify-3.3.1.tgz",
+      "integrity": "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz",
+      "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+      "dev": true,
+      "requires": {
+        "thenify": ">= 3.1.0 < 4"
+      }
+    },
+    "thread-loader": {
+      "version": "2.1.3",
+      "resolved": "https://registry.nlark.com/thread-loader/download/thread-loader-2.1.3.tgz?cache=0&sync_timestamp=1620664384427&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fthread-loader%2Fdownload%2Fthread-loader-2.1.3.tgz",
+      "integrity": "sha1-y9LBOfwrLebp0o9iKGq3cMGsvdo=",
+      "dev": true,
+      "requires": {
+        "loader-runner": "^2.3.1",
+        "loader-utils": "^1.1.0",
+        "neo-async": "^2.6.0"
+      }
+    },
+    "throat": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npm.taobao.org/throat/download/throat-5.0.0.tgz?cache=0&sync_timestamp=1611176753918&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthroat%2Fdownload%2Fthroat-5.0.0.tgz",
+      "integrity": "sha1-xRmSNYA6rRh1SmZ9ZZtecs4Wdks=",
+      "dev": true
+    },
+    "through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
+      "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+      "requires": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
+      }
+    },
+    "thunky": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz",
+      "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=",
+      "dev": true
+    },
+    "timers-browserify": {
+      "version": "2.0.12",
+      "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.12.tgz?cache=0&sync_timestamp=1603793743551&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftimers-browserify%2Fdownload%2Ftimers-browserify-2.0.12.tgz",
+      "integrity": "sha1-RKRcEfv0B/NPl7zNFXfGUjYbAO4=",
+      "requires": {
+        "setimmediate": "^1.0.4"
+      }
+    },
+    "timsort": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz",
+      "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+      "dev": true
+    },
+    "tmpl": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz",
+      "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+      "dev": true
+    },
+    "to-array": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz",
+      "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
+    },
+    "to-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz",
+      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+    },
+    "to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1628418855671&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz",
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz",
+      "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
+      "requires": {
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "to-regex-range": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      }
+    },
+    "toidentifier": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz",
+      "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM="
+    },
+    "toposort": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz",
+      "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
+      "dev": true
+    },
+    "tough-cookie": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz",
+      "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=",
+      "requires": {
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+      }
+    },
+    "tr46": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/tr46/download/tr46-1.0.1.tgz",
+      "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+      "dev": true,
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "trim-newlines": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/trim-newlines/download/trim-newlines-1.0.0.tgz",
+      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
+    },
+    "true-case-path": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/true-case-path/download/true-case-path-1.0.3.tgz",
+      "integrity": "sha1-+BO1qMhrQNpZYGcisUTjIleZ9H0=",
+      "requires": {
+        "glob": "^7.1.2"
+      }
+    },
+    "tryer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz",
+      "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=",
+      "dev": true
+    },
+    "ts-loader": {
+      "version": "6.2.2",
+      "resolved": "https://registry.nlark.com/ts-loader/download/ts-loader-6.2.2.tgz",
+      "integrity": "sha1-3/o4ebAaGh4KS4XiuEIdwN//HFg=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.3.0",
+        "enhanced-resolve": "^4.0.0",
+        "loader-utils": "^1.0.2",
+        "micromatch": "^4.0.0",
+        "semver": "^6.0.0"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.4",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054885525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz",
+          "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.1",
+            "picomatch": "^2.2.3"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "ts-pnp": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz",
+      "integrity": "sha1-pQCtCEsHmPHDBxrzkeZZEshrypI=",
+      "dev": true
+    },
+    "tslib": {
+      "version": "2.3.1",
+      "resolved": "https://registry.nlark.com/tslib/download/tslib-2.3.1.tgz",
+      "integrity": "sha1-6KM1rdXOrlGqJh0ypJAVjvBC7wE=",
+      "dev": true
+    },
+    "tslint": {
+      "version": "5.20.1",
+      "resolved": "https://registry.nlark.com/tslint/download/tslint-5.20.1.tgz",
+      "integrity": "sha1-5AHortoBUrxE3QfmFANPP4DGe30=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "builtin-modules": "^1.1.1",
+        "chalk": "^2.3.0",
+        "commander": "^2.12.1",
+        "diff": "^4.0.1",
+        "glob": "^7.1.1",
+        "js-yaml": "^3.13.1",
+        "minimatch": "^3.0.4",
+        "mkdirp": "^0.5.1",
+        "resolve": "^1.3.2",
+        "semver": "^5.3.0",
+        "tslib": "^1.8.0",
+        "tsutils": "^2.29.0"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.14.1",
+          "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz",
+          "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=",
+          "dev": true
+        }
+      }
+    },
+    "tsscmp": {
+      "version": "1.0.6",
+      "resolved": "https://registry.nlark.com/tsscmp/download/tsscmp-1.0.6.tgz",
+      "integrity": "sha1-hbmVg6w1iexL/vgltQAKqRHWBes="
+    },
+    "tsutils": {
+      "version": "2.29.0",
+      "resolved": "https://registry.npm.taobao.org/tsutils/download/tsutils-2.29.0.tgz?cache=0&sync_timestamp=1615138114650&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-2.29.0.tgz",
+      "integrity": "sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k=",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.8.1"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.14.1",
+          "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz",
+          "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=",
+          "dev": true
+        }
+      }
+    },
+    "tty-browserify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz",
+      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "requires": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+    },
+    "type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz",
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "requires": {
+        "prelude-ls": "~1.1.2"
+      }
+    },
+    "type-detect": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npm.taobao.org/type-detect/download/type-detect-4.0.8.tgz",
+      "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=",
+      "dev": true
+    },
+    "type-fest": {
+      "version": "0.6.0",
+      "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1630842470843&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz",
+      "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=",
+      "dev": true
+    },
+    "type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz",
+      "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
+      "requires": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      }
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+    },
+    "typedarray-to-buffer": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npm.taobao.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz",
+      "integrity": "sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=",
+      "dev": true,
+      "requires": {
+        "is-typedarray": "^1.0.0"
+      }
+    },
+    "typescript": {
+      "version": "3.9.10",
+      "resolved": "https://registry.nlark.com/typescript/download/typescript-3.9.10.tgz?cache=0&sync_timestamp=1630912742892&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftypescript%2Fdownload%2Ftypescript-3.9.10.tgz",
+      "integrity": "sha1-cPORCselHta+952ngAaQsZv3eLg=",
+      "dev": true
+    },
+    "uc.micro": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
+      "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
+    },
+    "uglify-js": {
+      "version": "3.4.10",
+      "resolved": "https://registry.nlark.com/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1627379738025&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz",
+      "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=",
+      "dev": true,
+      "requires": {
+        "commander": "~2.19.0",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.19.0",
+          "resolved": "https://registry.nlark.com/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1627358254258&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz",
+          "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=",
+          "dev": true
+        }
+      }
+    },
+    "unbox-primitive": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/unbox-primitive/download/unbox-primitive-1.0.1.tgz?cache=0&sync_timestamp=1616706302651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funbox-primitive%2Fdownload%2Funbox-primitive-1.0.1.tgz",
+      "integrity": "sha1-CF4hViXsMWJXTciFmr7nilmxRHE=",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1",
+        "has-bigints": "^1.0.1",
+        "has-symbols": "^1.0.2",
+        "which-boxed-primitive": "^1.0.2"
+      }
+    },
+    "uni-read-pages": {
+      "version": "1.0.5",
+      "resolved": "https://registry.nlark.com/uni-read-pages/download/uni-read-pages-1.0.5.tgz",
+      "integrity": "sha1-RSyNyqiXe7rvYAkJvpJsjZcEOHw="
+    },
+    "uni-simple-router": {
+      "version": "2.0.7",
+      "resolved": "https://registry.nlark.com/uni-simple-router/download/uni-simple-router-2.0.7.tgz",
+      "integrity": "sha1-BOC1vmzXM6HsudNaPb6C8n9IIE4="
+    },
+    "unicode-canonical-property-names-ecmascript": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+      "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg="
+    },
+    "unicode-match-property-ecmascript": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz",
+      "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=",
+      "requires": {
+        "unicode-canonical-property-names-ecmascript": "^1.0.4",
+        "unicode-property-aliases-ecmascript": "^1.0.4"
+      }
+    },
+    "unicode-match-property-value-ecmascript": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz",
+      "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE="
+    },
+    "unicode-property-aliases-ecmascript": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz",
+      "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ="
+    },
+    "union-value": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz",
+      "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=",
+      "requires": {
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^2.0.1"
+      }
+    },
+    "uniq": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz",
+      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+      "dev": true
+    },
+    "uniqs": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz",
+      "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+      "dev": true
+    },
+    "unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz",
+      "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=",
+      "requires": {
+        "unique-slug": "^2.0.0"
+      }
+    },
+    "unique-slug": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz",
+      "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=",
+      "requires": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1603179970052&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz",
+      "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY="
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+    },
+    "unquote": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz",
+      "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+      "dev": true
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz?cache=0&sync_timestamp=1616088539233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funset-value%2Fdownload%2Funset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "requires": {
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "requires": {
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "requires": {
+                "isarray": "1.0.0"
+              }
+            }
+          }
+        },
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+        }
+      }
+    },
+    "upath": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&sync_timestamp=1604768535464&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz",
+      "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ="
+    },
+    "update-check": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npm.taobao.org/update-check/download/update-check-1.5.4.tgz",
+      "integrity": "sha1-W1COJZVY8a19vItLBFfUydKMh0M=",
+      "dev": true,
+      "requires": {
+        "registry-auth-token": "3.3.2",
+        "registry-url": "3.1.0"
+      }
+    },
+    "upper-case": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz?cache=0&sync_timestamp=1606859943902&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupper-case%2Fdownload%2Fupper-case-1.1.3.tgz",
+      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+      "dev": true
+    },
+    "uri-js": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237530009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz",
+      "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=",
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "urijs": {
+      "version": "1.19.7",
+      "resolved": "https://registry.nlark.com/urijs/download/urijs-1.19.7.tgz",
+      "integrity": "sha1-T1lOWRE5KP6mPADOaI+zlbEWirk="
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+    },
+    "url": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz",
+      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+      "requires": {
+        "punycode": "1.3.2",
+        "querystring": "0.2.0"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz",
+          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+        }
+      }
+    },
+    "url-loader": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/url-loader/download/url-loader-2.3.0.tgz",
+      "integrity": "sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs=",
+      "requires": {
+        "loader-utils": "^1.2.3",
+        "mime": "^2.4.4",
+        "schema-utils": "^2.5.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "2.7.1",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz",
+          "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
+          "requires": {
+            "@types/json-schema": "^7.0.5",
+            "ajv": "^6.12.4",
+            "ajv-keywords": "^3.5.2"
+          }
+        }
+      }
+    },
+    "url-parse": {
+      "version": "1.5.3",
+      "resolved": "https://registry.nlark.com/url-parse/download/url-parse-1.5.3.tgz",
+      "integrity": "sha1-ccEwPTj7Zjmt4YPCmSyMwGht+GI=",
+      "dev": true,
+      "requires": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz",
+      "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8="
+    },
+    "util": {
+      "version": "0.11.1",
+      "resolved": "https://registry.nlark.com/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1622212943994&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.11.1.tgz",
+      "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=",
+      "requires": {
+        "inherits": "2.0.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+        }
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil-deprecate%2Fdownload%2Futil-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+    },
+    "util.promisify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.1.tgz?cache=0&sync_timestamp=1610159819836&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.1.tgz",
+      "integrity": "sha1-a693dLgO6w91INi4HQeYKlmruu4=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.17.2",
+        "has-symbols": "^1.0.1",
+        "object.getownpropertydescriptors": "^2.1.0"
+      }
+    },
+    "utila": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz",
+      "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+      "dev": true
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+      "dev": true
+    },
+    "uuid": {
+      "version": "3.4.0",
+      "resolved": "https://registry.nlark.com/uuid/download/uuid-3.4.0.tgz",
+      "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4="
+    },
+    "v8-to-istanbul": {
+      "version": "4.1.4",
+      "resolved": "https://registry.nlark.com/v8-to-istanbul/download/v8-to-istanbul-4.1.4.tgz",
+      "integrity": "sha1-uXk28hwOLZmW1JheXFFW6dTknNY=",
+      "dev": true,
+      "requires": {
+        "@types/istanbul-lib-coverage": "^2.0.1",
+        "convert-source-map": "^1.6.0",
+        "source-map": "^0.7.3"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.7.3",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz",
+          "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=",
+          "dev": true
+        }
+      }
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=",
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
+      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+    },
+    "vendors": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz?cache=0&sync_timestamp=1615203397897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvendors%2Fdownload%2Fvendors-1.0.4.tgz",
+      "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=",
+      "dev": true
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      },
+      "dependencies": {
+        "core-util-is": {
+          "version": "1.0.2",
+          "resolved": "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz?cache=0&sync_timestamp=1630420577662&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-util-is%2Fdownload%2Fcore-util-is-1.0.2.tgz",
+          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+        }
+      }
+    },
+    "vm-browserify": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz",
+      "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA="
+    },
+    "vue": {
+      "version": "2.6.14",
+      "resolved": "https://registry.nlark.com/vue/download/vue-2.6.14.tgz",
+      "integrity": "sha1-5RqlJQJQ1Wmj+606ilpofWA24jU="
+    },
+    "vue-baidu-map": {
+      "version": "0.21.22",
+      "resolved": "https://registry.npmjs.org/vue-baidu-map/-/vue-baidu-map-0.21.22.tgz",
+      "integrity": "sha512-WQMPCih4UTh0AZCKKH/OVOYnyAWjfRNeK6BIeoLmscyY5aF8zzlJhz/NOHLb3mdztIpB0Z6aohn4Jd9mfCSjQw==",
+      "requires": {
+        "bmaplib.curveline": "^1.0.0",
+        "bmaplib.heatmap": "^1.0.4",
+        "bmaplib.lushu": "^1.0.7",
+        "bmaplib.markerclusterer": "^1.0.13",
+        "markdown-it": "^8.4.0"
+      }
+    },
+    "vue-class-component": {
+      "version": "6.3.2",
+      "resolved": "https://registry.npm.taobao.org/vue-class-component/download/vue-class-component-6.3.2.tgz",
+      "integrity": "sha1-5gN+hNHfKvO95PRV5Qyhue7AK+Y="
+    },
+    "vue-hot-reload-api": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz",
+      "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI="
+    },
+    "vue-loader": {
+      "version": "15.9.8",
+      "resolved": "https://registry.nlark.com/vue-loader/download/vue-loader-15.9.8.tgz?cache=0&sync_timestamp=1628666767864&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.8.tgz",
+      "integrity": "sha1-Sw9gKvr2aplr4eU0+5YJ3EqxDmE=",
+      "requires": {
+        "@vue/component-compiler-utils": "^3.1.0",
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.1.0",
+        "vue-hot-reload-api": "^2.3.0",
+        "vue-style-loader": "^4.1.0"
+      }
+    },
+    "vue-loader-v16": {
+      "version": "npm:vue-loader@16.8.3",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
+      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^4.1.0",
+        "hash-sum": "^2.0.0",
+        "loader-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "hash-sum": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
+          "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
+          "dev": true,
+          "optional": true
+        },
+        "json5": {
+          "version": "2.2.3",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+          "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "vue-property-decorator": {
+      "version": "8.5.1",
+      "resolved": "https://registry.nlark.com/vue-property-decorator/download/vue-property-decorator-8.5.1.tgz",
+      "integrity": "sha1-VxqRz40rUH9TfXm/gnWvMYRXL/8=",
+      "requires": {
+        "vue-class-component": "^7.1.0"
+      },
+      "dependencies": {
+        "vue-class-component": {
+          "version": "7.2.6",
+          "resolved": "https://registry.npm.taobao.org/vue-class-component/download/vue-class-component-7.2.6.tgz",
+          "integrity": "sha1-hHHgN7jkdi9aRkaG4Z5a/HCFAuQ="
+        }
+      }
+    },
+    "vue-style-loader": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.3.tgz?cache=0&sync_timestamp=1614758618345&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-style-loader%2Fdownload%2Fvue-style-loader-4.1.3.tgz",
+      "integrity": "sha1-bVWGOlH6dXqyTonZNxRlByqnvDU=",
+      "requires": {
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.0.2"
+      }
+    },
+    "vue-template-compiler": {
+      "version": "2.6.14",
+      "resolved": "https://registry.nlark.com/vue-template-compiler/download/vue-template-compiler-2.6.14.tgz?cache=0&sync_timestamp=1623059845318&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-template-compiler%2Fdownload%2Fvue-template-compiler-2.6.14.tgz",
+      "integrity": "sha1-ovDn2YVnDULJye4NBE/tdpD092M=",
+      "requires": {
+        "de-indent": "^1.0.2",
+        "he": "^1.1.0"
+      }
+    },
+    "vue-template-es2015-compiler": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz",
+      "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU="
+    },
+    "vuex": {
+      "version": "3.6.2",
+      "resolved": "https://registry.nlark.com/vuex/download/vuex-3.6.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvuex%2Fdownload%2Fvuex-3.6.2.tgz",
+      "integrity": "sha1-I2vAhqhww655lG8QfxbeWdWJXnE="
+    },
+    "vuex-class": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npm.taobao.org/vuex-class/download/vuex-class-0.3.2.tgz",
+      "integrity": "sha1-x+lqB2wWghN9TSOo3P3GPyIOF6g="
+    },
+    "w3c-hr-time": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz",
+      "integrity": "sha1-ConN9cwVgi35w2BUNnaWPgzDCM0=",
+      "dev": true,
+      "requires": {
+        "browser-process-hrtime": "^1.0.0"
+      }
+    },
+    "w3c-xmlserializer": {
+      "version": "1.1.2",
+      "resolved": "https://registry.nlark.com/w3c-xmlserializer/download/w3c-xmlserializer-1.1.2.tgz",
+      "integrity": "sha1-MEhcp9cKb9BSQgo9Ev2Q5jOc55Q=",
+      "dev": true,
+      "requires": {
+        "domexception": "^1.0.1",
+        "webidl-conversions": "^4.0.2",
+        "xml-name-validator": "^3.0.0"
+      }
+    },
+    "walker": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz",
+      "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+      "dev": true,
+      "requires": {
+        "makeerror": "1.0.x"
+      }
+    },
+    "watchpack": {
+      "version": "1.7.5",
+      "resolved": "https://registry.nlark.com/watchpack/download/watchpack-1.7.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz",
+      "integrity": "sha1-EmfmxV4Lm1vkTCAjrtVDeiwmxFM=",
+      "requires": {
+        "chokidar": "^3.4.1",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0",
+        "watchpack-chokidar2": "^2.0.1"
+      }
+    },
+    "watchpack-chokidar2": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz?cache=0&sync_timestamp=1604989128919&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack-chokidar2%2Fdownload%2Fwatchpack-chokidar2-2.0.1.tgz",
+      "integrity": "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc=",
+      "optional": true,
+      "requires": {
+        "chokidar": "^2.1.8"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
+          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+          "optional": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
+              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+              "optional": true,
+              "requires": {
+                "remove-trailing-separator": "^1.0.1"
+              }
+            }
+          }
+        },
+        "binary-extensions": {
+          "version": "1.13.1",
+          "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1610299322955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz",
+          "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
+          "optional": true
+        },
+        "chokidar": {
+          "version": "2.1.8",
+          "resolved": "https://registry.nlark.com/chokidar/download/chokidar-2.1.8.tgz",
+          "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
+          "optional": true,
+          "requires": {
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.1",
+            "braces": "^2.3.2",
+            "fsevents": "^1.2.7",
+            "glob-parent": "^3.1.0",
+            "inherits": "^2.0.3",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^4.0.0",
+            "normalize-path": "^3.0.0",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.2.1",
+            "upath": "^1.1.1"
+          }
+        },
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1612536422255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz",
+          "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
+          }
+        },
+        "is-binary-path": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
+          "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+          "optional": true,
+          "requires": {
+            "binary-extensions": "^1.0.0"
+          }
+        },
+        "readdirp": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz?cache=0&sync_timestamp=1615717369278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz",
+          "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+          "optional": true,
+          "requires": {
+            "graceful-fs": "^4.1.11",
+            "micromatch": "^3.1.10",
+            "readable-stream": "^2.0.2"
+          }
+        }
+      }
+    },
+    "wbuf": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz",
+      "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=",
+      "dev": true,
+      "requires": {
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "wcwidth": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz",
+      "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+      "dev": true,
+      "requires": {
+        "defaults": "^1.0.3"
+      }
+    },
+    "webidl-conversions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz",
+      "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=",
+      "dev": true
+    },
+    "webpack": {
+      "version": "4.46.0",
+      "resolved": "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz?cache=0&sync_timestamp=1630683008873&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.46.0.tgz",
+      "integrity": "sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI=",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/wasm-edit": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "acorn": "^6.4.1",
+        "ajv": "^6.10.2",
+        "ajv-keywords": "^3.4.1",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^4.5.0",
+        "eslint-scope": "^4.0.3",
+        "json-parse-better-errors": "^1.0.2",
+        "loader-runner": "^2.4.0",
+        "loader-utils": "^1.2.3",
+        "memory-fs": "^0.4.1",
+        "micromatch": "^3.1.10",
+        "mkdirp": "^0.5.3",
+        "neo-async": "^2.6.1",
+        "node-libs-browser": "^2.2.1",
+        "schema-utils": "^1.0.0",
+        "tapable": "^1.1.3",
+        "terser-webpack-plugin": "^1.4.3",
+        "watchpack": "^1.7.4",
+        "webpack-sources": "^1.4.1"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.4.2",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz",
+          "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY="
+        }
+      }
+    },
+    "webpack-bundle-analyzer": {
+      "version": "3.9.0",
+      "resolved": "https://registry.nlark.com/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.9.0.tgz",
+      "integrity": "sha1-9vlNsQj7V05BWtMT3kGicH0z7zw=",
+      "dev": true,
+      "requires": {
+        "acorn": "^7.1.1",
+        "acorn-walk": "^7.1.1",
+        "bfj": "^6.1.1",
+        "chalk": "^2.4.1",
+        "commander": "^2.18.0",
+        "ejs": "^2.6.1",
+        "express": "^4.16.3",
+        "filesize": "^3.6.1",
+        "gzip-size": "^5.0.0",
+        "lodash": "^4.17.19",
+        "mkdirp": "^0.5.1",
+        "opener": "^1.5.1",
+        "ws": "^6.0.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "7.4.1",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz",
+          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+          "dev": true
+        }
+      }
+    },
+    "webpack-chain": {
+      "version": "6.5.1",
+      "resolved": "https://registry.npm.taobao.org/webpack-chain/download/webpack-chain-6.5.1.tgz?cache=0&sync_timestamp=1595813200961&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-6.5.1.tgz",
+      "integrity": "sha1-TycoTLu2N+PI+970Pu9YjU2GEgY=",
+      "dev": true,
+      "requires": {
+        "deepmerge": "^1.5.2",
+        "javascript-stringify": "^2.0.1"
+      }
+    },
+    "webpack-dev-middleware": {
+      "version": "3.7.3",
+      "resolved": "https://registry.nlark.com/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz",
+      "integrity": "sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU=",
+      "dev": true,
+      "requires": {
+        "memory-fs": "^0.4.1",
+        "mime": "^2.4.4",
+        "mkdirp": "^0.5.1",
+        "range-parser": "^1.2.1",
+        "webpack-log": "^2.0.0"
+      }
+    },
+    "webpack-dev-server": {
+      "version": "3.11.2",
+      "resolved": "https://registry.nlark.com/webpack-dev-server/download/webpack-dev-server-3.11.2.tgz?cache=0&sync_timestamp=1630431908381&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.2.tgz",
+      "integrity": "sha1-aV687Xakkp8NXef9c/r+GF/jNwg=",
+      "dev": true,
+      "requires": {
+        "ansi-html": "0.0.7",
+        "bonjour": "^3.5.0",
+        "chokidar": "^2.1.8",
+        "compression": "^1.7.4",
+        "connect-history-api-fallback": "^1.6.0",
+        "debug": "^4.1.1",
+        "del": "^4.1.1",
+        "express": "^4.17.1",
+        "html-entities": "^1.3.1",
+        "http-proxy-middleware": "0.19.1",
+        "import-local": "^2.0.0",
+        "internal-ip": "^4.3.0",
+        "ip": "^1.1.5",
+        "is-absolute-url": "^3.0.3",
+        "killable": "^1.0.1",
+        "loglevel": "^1.6.8",
+        "opn": "^5.5.0",
+        "p-retry": "^3.0.1",
+        "portfinder": "^1.0.26",
+        "schema-utils": "^1.0.0",
+        "selfsigned": "^1.10.8",
+        "semver": "^6.3.0",
+        "serve-index": "^1.9.1",
+        "sockjs": "^0.3.21",
+        "sockjs-client": "^1.5.0",
+        "spdy": "^4.0.2",
+        "strip-ansi": "^3.0.1",
+        "supports-color": "^6.1.0",
+        "url": "^0.11.0",
+        "webpack-dev-middleware": "^3.7.2",
+        "webpack-log": "^2.0.0",
+        "ws": "^6.2.1",
+        "yargs": "^13.3.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
+          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+          "dev": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
+              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+              "dev": true,
+              "requires": {
+                "remove-trailing-separator": "^1.0.1"
+              }
+            }
+          }
+        },
+        "binary-extensions": {
+          "version": "1.13.1",
+          "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1610299322955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz",
+          "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
+          "dev": true
+        },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        },
+        "chokidar": {
+          "version": "2.1.8",
+          "resolved": "https://registry.nlark.com/chokidar/download/chokidar-2.1.8.tgz",
+          "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
+          "dev": true,
+          "requires": {
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.1",
+            "braces": "^2.3.2",
+            "fsevents": "^1.2.7",
+            "glob-parent": "^3.1.0",
+            "inherits": "^2.0.3",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^4.0.0",
+            "normalize-path": "^3.0.0",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.2.1",
+            "upath": "^1.1.1"
+          }
+        },
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz",
+          "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+          "dev": true,
+          "requires": {
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1614682725186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+          "dev": true
+        },
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1612536422255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz",
+          "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
+          }
+        },
+        "http-proxy-middleware": {
+          "version": "0.19.1",
+          "resolved": "https://registry.nlark.com/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz",
+          "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=",
+          "dev": true,
+          "requires": {
+            "http-proxy": "^1.17.0",
+            "is-glob": "^4.0.0",
+            "lodash": "^4.17.11",
+            "micromatch": "^3.1.10"
+          }
+        },
+        "is-absolute-url": {
+          "version": "3.0.3",
+          "resolved": "https://registry.nlark.com/is-absolute-url/download/is-absolute-url-3.0.3.tgz?cache=0&sync_timestamp=1628691826939&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz",
+          "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=",
+          "dev": true
+        },
+        "is-binary-path": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
+          "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+          "dev": true,
+          "requires": {
+            "binary-extensions": "^1.0.0"
+          }
+        },
+        "readdirp": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz?cache=0&sync_timestamp=1615717369278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz",
+          "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.11",
+            "micromatch": "^3.1.10",
+            "readable-stream": "^2.0.2"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463603361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1618558856477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz?cache=0&sync_timestamp=1618558923406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz",
+          "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553351145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
+        "yargs": {
+          "version": "13.3.2",
+          "resolved": "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz",
+          "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
+          "dev": true,
+          "requires": {
+            "cliui": "^5.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^3.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.2"
+          }
+        },
+        "yargs-parser": {
+          "version": "13.1.2",
+          "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1624233275366&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz",
+          "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
+        }
+      }
+    },
+    "webpack-log": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz?cache=0&sync_timestamp=1615477439589&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz",
+      "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=",
+      "dev": true,
+      "requires": {
+        "ansi-colors": "^3.0.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "webpack-merge": {
+      "version": "4.2.2",
+      "resolved": "https://registry.nlark.com/webpack-merge/download/webpack-merge-4.2.2.tgz",
+      "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.15"
+      }
+    },
+    "webpack-sources": {
+      "version": "1.4.3",
+      "resolved": "https://registry.nlark.com/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1627898061491&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz",
+      "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=",
+      "requires": {
+        "source-list-map": "^2.0.0",
+        "source-map": "~0.6.1"
+      }
+    },
+    "websocket-driver": {
+      "version": "0.7.4",
+      "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.4.tgz",
+      "integrity": "sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A=",
+      "dev": true,
+      "requires": {
+        "http-parser-js": ">=0.5.1",
+        "safe-buffer": ">=5.1.0",
+        "websocket-extensions": ">=0.1.1"
+      }
+    },
+    "websocket-extensions": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz",
+      "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=",
+      "dev": true
+    },
+    "whatwg-encoding": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz",
+      "integrity": "sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA=",
+      "dev": true,
+      "requires": {
+        "iconv-lite": "0.4.24"
+      }
+    },
+    "whatwg-mimetype": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz",
+      "integrity": "sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78=",
+      "dev": true
+    },
+    "whatwg-url": {
+      "version": "7.1.0",
+      "resolved": "https://registry.nlark.com/whatwg-url/download/whatwg-url-7.1.0.tgz",
+      "integrity": "sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY=",
+      "dev": true,
+      "requires": {
+        "lodash.sortby": "^4.7.0",
+        "tr46": "^1.0.1",
+        "webidl-conversions": "^4.0.2"
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz",
+      "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "which-boxed-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz?cache=0&sync_timestamp=1614855347940&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich-boxed-primitive%2Fdownload%2Fwhich-boxed-primitive-1.0.2.tgz",
+      "integrity": "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=",
+      "dev": true,
+      "requires": {
+        "is-bigint": "^1.0.1",
+        "is-boolean-object": "^1.1.0",
+        "is-number-object": "^1.0.4",
+        "is-string": "^1.0.5",
+        "is-symbol": "^1.0.3"
+      }
+    },
+    "which-module": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz",
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+    },
+    "wide-align": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz",
+      "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=",
+      "requires": {
+        "string-width": "^1.0.2 || 2"
+      }
+    },
+    "word-wrap": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz",
+      "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w="
+    },
+    "worker-farm": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz",
+      "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=",
+      "requires": {
+        "errno": "~0.1.7"
+      }
+    },
+    "worker-rpc": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/worker-rpc/download/worker-rpc-0.1.1.tgz",
+      "integrity": "sha1-y1Zb1tcHGo8WZgaGBR6WmtMvVNU=",
+      "dev": true,
+      "requires": {
+        "microevent.ts": "~0.1.1"
+      }
+    },
+    "wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1618558923406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz",
+      "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1618558856477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz",
+          "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        }
+      }
+    },
+    "wrap-loader": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/wrap-loader/download/wrap-loader-0.2.0.tgz",
+      "integrity": "sha1-ggn4fsgAR6ZXoq2rvP1iz61/Cq4=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0"
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz?cache=0&sync_timestamp=1619133505879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrappy%2Fdownload%2Fwrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+    },
+    "write-file-atomic": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-3.0.3.tgz",
+      "integrity": "sha1-Vr1cWlxwSBzRnFcb05q5ZaXeVug=",
+      "dev": true,
+      "requires": {
+        "imurmurhash": "^0.1.4",
+        "is-typedarray": "^1.0.0",
+        "signal-exit": "^3.0.2",
+        "typedarray-to-buffer": "^3.1.5"
+      }
+    },
+    "ws": {
+      "version": "6.2.2",
+      "resolved": "https://registry.nlark.com/ws/download/ws-6.2.2.tgz?cache=0&sync_timestamp=1630167206236&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-6.2.2.tgz",
+      "integrity": "sha1-3Vzb1XqZeZFgl2UtePHMX66gwy4=",
+      "dev": true,
+      "requires": {
+        "async-limiter": "~1.0.0"
+      }
+    },
+    "x-domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npm.taobao.org/x-domhandler/download/x-domhandler-2.4.2.tgz",
+      "integrity": "sha1-Ia+y1xl3EYaI5J4FwwiUSXzj1ek=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "1"
+      }
+    },
+    "xml-name-validator": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz",
+      "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=",
+      "dev": true
+    },
+    "xmlchars": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/xmlchars/download/xmlchars-2.2.0.tgz",
+      "integrity": "sha1-Bg/hvLf5x2/ioX24apvDq4lCEMs=",
+      "dev": true
+    },
+    "xmlhttprequest-ssl": {
+      "version": "1.6.3",
+      "resolved": "https://registry.nlark.com/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.6.3.tgz",
+      "integrity": "sha1-A7cThzsBZZ36LBxdBWBlsn3cLeY="
+    },
+    "xregexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.nlark.com/xregexp/download/xregexp-4.0.0.tgz",
+      "integrity": "sha1-5pgYneSd0qGMxWh7BeF8jkOUMCA=",
+      "dev": true
+    },
+    "xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz",
+      "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q="
+    },
+    "y18n": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.3.tgz",
+      "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8="
+    },
+    "yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz",
+      "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0="
+    },
+    "yaml": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+      "dev": true,
+      "optional": true
+    },
+    "yargs": {
+      "version": "16.2.0",
+      "resolved": "https://registry.nlark.com/yargs/download/yargs-16.2.0.tgz",
+      "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=",
+      "dev": true,
+      "requires": {
+        "cliui": "^7.0.2",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.0",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^20.2.2"
+      },
+      "dependencies": {
+        "cliui": {
+          "version": "7.0.4",
+          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-7.0.4.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-7.0.4.tgz",
+          "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=",
+          "dev": true,
+          "requires": {
+            "string-width": "^4.2.0",
+            "strip-ansi": "^6.0.0",
+            "wrap-ansi": "^7.0.0"
+          }
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1618558856477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz",
+          "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "y18n": {
+          "version": "5.0.8",
+          "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.8.tgz",
+          "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=",
+          "dev": true
+        }
+      }
+    },
+    "yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1624233275366&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz",
+      "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=",
+      "dev": true
+    },
+    "yeast": {
+      "version": "0.1.2",
+      "resolved": "https://registry.nlark.com/yeast/download/yeast-0.1.2.tgz",
+      "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
+    },
+    "ylru": {
+      "version": "1.2.1",
+      "resolved": "https://registry.nlark.com/ylru/download/ylru-1.2.1.tgz",
+      "integrity": "sha1-9Xa2M0FUeYnB3nuiiHYJI7J/6E8="
+    },
+    "yorkie": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz",
+      "integrity": "sha1-kkEZEtQ1IU4SxRwq4Qk+VLa7g9k=",
+      "dev": true,
+      "requires": {
+        "execa": "^0.8.0",
+        "is-ci": "^1.0.10",
+        "normalize-path": "^1.0.0",
+        "strip-indent": "^2.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "0.8.0",
+          "resolved": "https://registry.nlark.com/execa/download/execa-0.8.0.tgz",
+          "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^5.0.1",
+            "get-stream": "^3.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        },
+        "normalize-path": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz",
+          "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
+          "dev": true
+        }
+      }
+    }
+  }
+}

+ 111 - 0
package.json

@@ -0,0 +1,111 @@
+{
+  "name": "uni-app",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "npm run dev:h5",
+    "build": "npm run build:h5",
+    "build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build",
+    "build:custom": "cross-env NODE_ENV=production uniapp-cli custom",
+    "build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
+    "build:mp-360": "cross-env NODE_ENV=production UNI_PLATFORM=mp-360 vue-cli-service uni-build",
+    "build:mp-alipay": "cross-env NODE_ENV=production UNI_PLATFORM=mp-alipay vue-cli-service uni-build",
+    "build:mp-baidu": "cross-env NODE_ENV=production UNI_PLATFORM=mp-baidu vue-cli-service uni-build",
+    "build:mp-kuaishou": "cross-env NODE_ENV=production UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build",
+    "build:mp-qq": "cross-env NODE_ENV=production UNI_PLATFORM=mp-qq vue-cli-service uni-build",
+    "build:mp-toutiao": "cross-env NODE_ENV=production UNI_PLATFORM=mp-toutiao vue-cli-service uni-build",
+    "build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build",
+    "build:quickapp-native": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-native vue-cli-service uni-build",
+    "build:quickapp-webview": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview vue-cli-service uni-build",
+    "build:quickapp-webview-huawei": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build",
+    "build:quickapp-webview-union": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build",
+    "dev:app-plus": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch",
+    "dev:custom": "cross-env NODE_ENV=development uniapp-cli custom",
+    "dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
+    "dev:mp-360": "cross-env NODE_ENV=development UNI_PLATFORM=mp-360 vue-cli-service uni-build --watch",
+    "dev:mp-alipay": "cross-env NODE_ENV=development UNI_PLATFORM=mp-alipay vue-cli-service uni-build --watch",
+    "dev:mp-baidu": "cross-env NODE_ENV=development UNI_PLATFORM=mp-baidu vue-cli-service uni-build --watch",
+    "dev:mp-kuaishou": "cross-env NODE_ENV=development UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build --watch",
+    "dev:mp-qq": "cross-env NODE_ENV=development UNI_PLATFORM=mp-qq vue-cli-service uni-build --watch",
+    "dev:mp-toutiao": "cross-env NODE_ENV=development UNI_PLATFORM=mp-toutiao vue-cli-service uni-build --watch",
+    "dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch",
+    "dev:quickapp-native": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-native vue-cli-service uni-build --watch",
+    "dev:quickapp-webview": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview vue-cli-service uni-build --watch",
+    "dev:quickapp-webview-huawei": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build --watch",
+    "dev:quickapp-webview-union": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build --watch",
+    "info": "node node_modules/@dcloudio/vue-cli-plugin-uni/commands/info.js",
+    "serve:quickapp-native": "node node_modules/@dcloudio/uni-quickapp-native/bin/serve.js",
+    "test:android": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=android jest -i",
+    "test:h5": "cross-env UNI_PLATFORM=h5 jest -i",
+    "test:ios": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=ios jest -i",
+    "test:mp-baidu": "cross-env UNI_PLATFORM=mp-baidu jest -i",
+    "test:mp-weixin": "cross-env UNI_PLATFORM=mp-weixin jest -i"
+  },
+  "dependencies": {
+    "@dcloudio/uni-app-plus": "^2.0.0-32220210818002",
+    "@dcloudio/uni-h5": "^2.0.0-32220210818002",
+    "@dcloudio/uni-helper-json": "*",
+    "@dcloudio/uni-i18n": "^2.0.0-32220210818002",
+    "@dcloudio/uni-mp-360": "^2.0.0-32220210818002",
+    "@dcloudio/uni-mp-alipay": "^2.0.0-32220210818002",
+    "@dcloudio/uni-mp-baidu": "^2.0.0-32220210818002",
+    "@dcloudio/uni-mp-kuaishou": "^2.0.0-32220210818002",
+    "@dcloudio/uni-mp-qq": "^2.0.0-32220210818002",
+    "@dcloudio/uni-mp-toutiao": "^2.0.0-32220210818002",
+    "@dcloudio/uni-mp-vue": "^2.0.0-32220210818002",
+    "@dcloudio/uni-mp-weixin": "^2.0.0-32220210818002",
+    "@dcloudio/uni-quickapp-native": "^2.0.0-32220210818002",
+    "@dcloudio/uni-quickapp-webview": "^2.0.0-32220210818002",
+    "@dcloudio/uni-stat": "^2.0.0-32220210818002",
+    "@icon-park/vue": "^1.4.1",
+    "@types/lodash": "^4.14.172",
+    "@vue/shared": "^3.0.0",
+    "core-js": "^3.6.5",
+    "dayjs": "^1.11.9",
+    "flyio": "^0.6.2",
+    "lodash": "^4.17.21",
+    "node-sass": "^4.14.1",
+    "regenerator-runtime": "^0.12.1",
+    "sass-loader": "^7.3.1",
+    "uni-read-pages": "^1.0.5",
+    "uni-simple-router": "^2.0.7",
+    "vue": "^2.6.11",
+    "vue-baidu-map": "^0.21.22",
+    "vue-class-component": "^6.3.2",
+    "vue-property-decorator": "^8.0.0",
+    "vuex": "^3.2.0",
+    "vuex-class": "^0.3.2"
+  },
+  "devDependencies": {
+    "@babel/plugin-syntax-typescript": "^7.2.0",
+    "@babel/runtime": "~7.12.0",
+    "@dcloudio/types": "*",
+    "@dcloudio/uni-automator": "^2.0.0-32220210818002",
+    "@dcloudio/uni-cli-shared": "^2.0.0-32220210818002",
+    "@dcloudio/uni-migration": "^2.0.0-32220210818002",
+    "@dcloudio/uni-template-compiler": "^2.0.0-32220210818002",
+    "@dcloudio/vue-cli-plugin-hbuilderx": "^2.0.0-32220210818002",
+    "@dcloudio/vue-cli-plugin-uni": "^2.0.0-32220210818002",
+    "@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.0-32220210818002",
+    "@dcloudio/webpack-uni-mp-loader": "^2.0.0-32220210818002",
+    "@dcloudio/webpack-uni-pages-loader": "^2.0.0-32220210818002",
+    "@vue/cli-plugin-babel": "~4.5.0",
+    "@vue/cli-plugin-typescript": "*",
+    "@vue/cli-service": "~4.5.0",
+    "babel-plugin-import": "^1.11.0",
+    "cross-env": "^7.0.2",
+    "jest": "^25.4.0",
+    "mini-types": "*",
+    "miniprogram-api-typings": "*",
+    "postcss-comment": "^2.0.0",
+    "typescript": "^3.0.0",
+    "vue-template-compiler": "^2.6.11"
+  },
+  "browserslist": [
+    "Android >= 4",
+    "ios >= 8"
+  ],
+  "uni-app": {
+    "scripts": {}
+  }
+}

+ 22 - 0
postcss.config.js

@@ -0,0 +1,22 @@
+const path = require('path')
+module.exports = {
+  parser: require('postcss-comment'),
+  plugins: [
+    require('postcss-import')({
+      resolve (id, basedir, importOptions) {
+        if (id.startsWith('~@/')) {
+          return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3))
+        } else if (id.startsWith('@/')) {
+          return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2))
+        } else if (id.startsWith('/') && !id.startsWith('//')) {
+          return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1))
+        }
+        return id
+      }
+    }),
+    require('autoprefixer')({
+      remove: process.env.UNI_PLATFORM !== 'h5'
+    }),
+    require('@dcloudio/vue-cli-plugin-uni/packages/postcss')
+  ]
+}

+ 29 - 0
public/index.html

@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge">
+        <title>
+            <%= htmlWebpackPlugin.options.title %>
+        </title>
+        <script>
+            document.addEventListener('DOMContentLoaded', function() {
+                document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
+            })
+            var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
+            document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+        </script>
+		<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
+        <link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
+    </head>
+
+    <body>
+        <noscript>
+            <strong>Please enable JavaScript to continue.</strong>
+        </noscript>
+        <div id="app"></div>
+        <!-- built files will be auto injected -->
+    </body>
+
+</html>

+ 61 - 0
src/App.vue

@@ -0,0 +1,61 @@
+<script>
+	import Vue from 'vue';
+	export default {
+		mpType: 'app',
+		globalData: {
+			NavHeight: 0,
+			windowHeight: 0,
+			isIPX: false,
+			statusBarHeight: 0
+		},
+
+		onLaunch: function() {
+			// console.log('App Launch');
+			this.$nextTick(function() {
+				uni.hideTabBar();
+			});
+			uni.getSystemInfo({
+				success: res => {
+					console.log(res);
+					this.globalData.statusBarHeight = res.statusBarHeight;
+					this.globalData.NavHeight = res.statusBarHeight + 42;
+					this.globalData.windowHeight = res.windowHeight;
+					if (res.statusBarHeight > 20 && res.platform.toUpperCase() === 'IOS') {
+						console.log('Device is iPhoneX!!!');
+						// 底部安全距离为 68rpx  34px
+						this.globalData.isIPX = true;
+					}
+				}
+			});
+		},
+		onShow: function() {
+			// console.log('App Show');
+		},
+		onHide: function() {
+			// console.log('App Hide');
+		}
+	};
+</script>
+
+<style lang="scss">
+	/* 在线链接服务仅供平台体验和调试使用,平台不承诺服务的稳定性,企业客户需下载字体包自行发布使用并做好备份。 */
+	@font-face {
+		font-family: 'iconfont';
+		/* Project id 3695491 */
+		src: url('https://at.alicdn.com/t/c/font_3695491_hk38bgiibu.woff2?t=1683873775480') format('woff2'),
+			url('https://at.alicdn.com/t/c/font_3695491_hk38bgiibu.woff?t=1683873775480') format('woff'),
+			url('https://at.alicdn.com/t/c/font_3695491_hk38bgiibu.ttf?t=1683873775480') format('truetype');
+	}
+
+	/* 在线链接服务仅供平台体验和调试使用,平台不承诺服务的稳定性,企业客户需下载字体包自行发布使用并做好备份。 */
+	@font-face {
+	  font-family: 'iconfont';  /* Project id 4211324 */
+	  src: url('https://at.alicdn.com/t/c/font_4211324_zu66h3z03f9.woff2?t=1694758748366') format('woff2'),
+	       url('https://at.alicdn.com/t/c/font_4211324_zu66h3z03f9.woff?t=1694758748366') format('woff'),
+	       url('https://at.alicdn.com/t/c/font_4211324_zu66h3z03f9.ttf?t=1694758748366') format('truetype');
+	}
+
+	page {
+		background-color: #FAFAFA;
+	}
+</style>

+ 289 - 0
src/common/api.ts

@@ -0,0 +1,289 @@
+// import { $http } from '@/common/http';
+
+
+export default {
+	login: '/b/shop/user/login',						//登录
+	register: '/b/shop/user/register',				//注册
+	logout: '/admin/signout',						//退出
+	Qrcode: '/common/wx/mini/code',					//生成二维码
+	sendCode: '/common/send/sms/code',				//发送验证码
+	verifyCode: '/common/verify/sms/code', 					//验证短信验证码
+	
+	tokenLogin: '/user/user/token/login',
+
+	setPayPwd: '/user/user/pay/password/set', //设置支付密码
+	setPwd: '/b/shop/user/set/pass', //设置登录密码
+	
+	setUserInfo: '/user/user/member/set', //设置会员姓名、日期、所在地 
+
+	bindReferrer: '/user/user/bind/referrer', 		//绑定临时上级
+	getShareInfo: '/user/setup/share/info', 		//C端分享设置详情
+	updateUserInfo: '/user/user/update/info',//更新个人信息
+	isPayPassword: '/user/user/pay/password/check',
+	
+	getVersion: '/user/setup/check/version', //获取app当前版本号
+
+	// 商品相关=====================
+	getBannerList: '/user/setup/banner/get',		//轮播图
+	// getCategoryList: '/user/goods/groupings/list', 	// 分类列表
+	getGoodsList: '/user/goods/list', 				// 商品列表
+	getGoodsInfo: '/user/goods/info', 				// 商品详情
+	getCategoryList: '/user/goods/sort/list', 			//分类列表
+
+	// 购物车
+	carGoodsList: '/user/cart/list', 				// 购物车列表
+	addCarGoods: '/user/cart/update', 				// 加入购物车
+	batchUpdateCarGoods: '/user/cart/batch/update', //批量更新购物车
+
+	// 地址相关=====================
+	addressList: '/user/address/list', 				// 地址列表
+	addressDetail: '/user/address/info', 			// 地址详情
+	addressAdd: '/user/address/add', 				// 地址添加
+	addressEdit: '/user/address/update', 			// 地址编辑
+	deleteAddress: '/user/address/del', 			// 地址删除
+	addressDefault: '/user/address/set/default', 	// 地址设置默认
+	getArea: '/common/allarea',						//地区编码, //获取省市区地址
+
+
+	// 订单相关=====================
+	orderList: '/user/order/list', 					// 订单列表
+	orderDetail: '/user/order/info', 				// 订单详情
+	logistics: '/user/order/query/logistic', 		// 物流信息
+	cancelOrder: '/user/order/cancel', 				// 取消订单
+	confirmOrder: '/user/order/confirm', 			// 确认收货
+	submitOrder: '/user/order/query/payment', 		//计算订单应付金额
+	createOrder: '/user/order/create', 				// 创建订单
+	getPayParmas: '/user/pay/create',				// 拉取支付参数
+	closePay: '/user/pay/close', 					//关闭支付
+	getOrderNum: '/b/order/count/num', 			//查询各状态订单数量
+	
+	getLogisticsInfo: '/user/order/query/logistic', //获取物流信息
+
+	// 用户
+	// getBalance: '/user/fund/balance/get',
+	isRealName: '/user/user/authentication/check', //检查是否实名认证
+	getUserInfo: '/user/user/info',//查询个人信息
+
+	// 提现
+	setWithdrawInfo: '/user/sell/datum/add',
+	// getWithdrawInfo: '/user/sell/datum/info',
+	applyWithdraw: '/user/sell/log/add',
+	getDrawInfo: '/user/draw/info',
+	
+	
+	getKpiDrawInfo: '/user/draw/kpi/info',
+	setKpiWithdrawInfo: '/user/draw/kpi/data/add',
+	getKpiWithdrawInfo: '/user/draw/kpi/data/info',
+	applyKpiWithdraw: '/user/draw/kpi/log/add',
+	
+	transferApply: '/user/fund/transfer/execute',
+
+
+	// 售后
+	applyAfterSale: '/user/order/after/sale/apply',
+	getAfterSalePayment: '/user/order/after/sale/calculate',
+
+
+	getAfterSaleList: '/user/order/after/sale/list',
+	getAfterSaleDetail: '/user/order/after/sale/info',
+	cancelAfterSale: '/user/order/after/sale/repeal/apply',
+	getCompanyList: '/user/order/after/sale/return/company/list',
+	setCompanyInfo: '/user/order/after/sale/update/return/proof',
+	
+	
+	realName: '/user/user/authentication',
+	
+	getFansList: '/user/user/fans/list',
+	
+	// getQuotaInfo: '/user/quota/info',
+	
+	getFundLogs: '/user/fund/logs',
+	getFundTypeList: '/user/fund/type/list',
+	
+	
+	getRebateSum: '/user/rebate/query/sum/data',
+	bindOpenId: '/user/user/bind/wx',
+	widthdrawLogs: '/user/draw/log/list',
+	
+	
+	
+	
+	
+	
+	
+	
+	applyAgent: '/user/user/agent/apply',
+	getAgentInfo: '/user/user/agent/info',
+	
+	
+	
+	getShopManageInfo: '/user/shop/manage/info',
+	updateShopManage: '/user/shop/manage/update',
+	addShopManage: '/user/shop/manage/add',
+	
+	
+	
+	
+	getClassroomPosterInfo: '/user/classroom/poster/info',
+	getClassroomSortList: '/user/classroom/sort/list',
+	getClassroomInfo: '/user/classroom/article/info',
+	getClassroomArticleList: '/user/classroom/article/list',
+	
+	
+	getDictionaryList: '/user/dictionary/item/list/son',
+	
+	
+	getApplyVip: '/user/user/apply/vip/top',
+	
+	openQuota: '/user/quota/open',
+	
+	getQuotaInfo: '/user/quota/info',
+	
+	
+	getRebateInfoList: '/user/rebate/info/list',
+	getRebateTypeList: '/user/rebate/info/type/list',
+	
+	
+	
+	getBalance: '/user/fund/info/personal/center/balance',
+	
+	getWalletInfo: '/user/fund/info/wallet/data',
+	
+	
+	getFundInfoSum: '/user/fund/info/sum',
+	getFundInfoList: '/user/fund/info/list',
+	
+	getKpiList: '/user/kpi/list',
+	getKpiStatistics: '/user/kpi/statistics',
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	// 我的
+	
+	getBusinessList: '/user/shop/manage/list/my', //我的商家列表
+	
+	getRebateTotal: '/user/rebate/query/total', // 查询总奖励金额
+	getRebateLog: '/user/rebate/query/log', // 查询奖励明细
+	getGroupKpi: '/user/rebate/query/group/kpi', // 查询当月团队业绩
+	getBankCard: '/user/rebate/bank/get', // 查询银行卡
+	bindBankCard: '/user/rebate/bank/bind', // 绑定银行
+	
+	isBusiness: '/user/shop/manage/check', //检查用户是否为商家
+	
+	// 商家入驻
+	getBusinessTypeList: '/user/shop/type/list', //商家类型
+	addBusiness: '/user/shop/manage/add', //商家入驻
+	getBusinessInfo: '/user/shop/manage/info', //入驻商家详情
+	updateBusinessInfo: '/user/shop/manage/update', //编辑商家入驻信息
+	getBusinessDetail: '/user/shop/manage/info/area', //入驻商家详情
+	
+	getExamineList: '/user/shop/manage/list', //商家审核列表
+	examinePass: '/user/shop/manage/pass', //商家审核通过
+	examineRefuse: '/user/shop/manage/refuse', //商家审核拒绝
+	examineInfo: '/user/shop/manage/res', //商家审核详情
+	
+	getMemberInfo: '/user/user/member/info', //会员资料详情
+	// setPwd: '/user/user/Login/password/set', //设置登录密码
+	// setPayPwd: '/user/user/pay/password/set', //设置支付密码
+	// getBalance: '/user/fund/get/balance/and/integral', //查询余额、积分、是否设置安全密码
+	
+	getHuazhi: '/user/fund/get/integral/and/gold/detail', //查询积分、金券详情
+	getFunList: '/user/fund/list', //资金记录列表
+	getDataSum: '/user/fund/sum', //资金数据统计
+	getGoldPrice: '/user/fund/get/official/gold/price', //查询金券兑换产品系数
+	
+	reward: '/user/fund/reward', //商家打赏
+	
+	areaBusiness: '/user/shop/manage/list/area', //区域商家列表
+	
+	yyzxyl: '/user/user/company/all',	//运营中心列表
+	zyyzxyl: '/user/user/company/son/all', //子运营中心列表
+	
+	getRatio: '/user/fund/transfer/query/ratio', //查询转账手续费率
+	
+	transfer: '/user/fund/transfer/execute', //互转
+	
+	// 分公司
+	applyInfo1: '/user/user/company/son/info',
+	applyAdd1: '/user/user/company/son/apply',
+	applyUpdate1: '/user/user/company/son/update',
+	
+	applyInfo2: '/user/user/company/info',
+	applyAdd2: '/user/user/company/apply',
+	applyUpdate2: '/user/user/company/update',
+	
+	realNameInfo: '/user/user/authentication/info', //实名认证详情
+	// realName: '/user/user/authentication', //实名认证
+	// isRealName: '/user/user/authentication/check', //检查是否实名认证
+	// setUserInfo: '/user/user/member/set', //设置会员姓名、日期、所在地 
+	
+	xxRecharge: '/user/fund/balance/offline/recharge/apply', //线下充值申请
+	xxRechargeRecord: '/user/fund/balance/offline/recharge/list', //线下充值记录
+	
+	getShopTypeList: '/user/goods/merchant/list', //商家类型列表
+	getShopList: '/user/shop/type/manage/list', //商圈-商家列表
+	
+	getPurchaseList: '/user/fund/purchase/list', //求购信息列表
+	purchaseIssue: '/user/fund/purchase/issue', //发布求购信息
+	updatePurchaseIssue: '/user/fund/purchase/issue/update',
+	purchaseRevocation: '/user/fund/purchase/revocation', //撤销求购信息
+	purchaseDelete: '/user/fund/purchase/delete', //删除求购信息
+	purchaseFinish: '/user/fund/purchase/finish', //完成求购
+	
+	getShareCode: '/common/create/share/qr', //获取分享二维码
+	
+	getGroupSum: '/user/fund/info/team/kpi/sum', //查询团队数据统计
+	
+	getMessage: '/user/fund/purchase/list/message',
+	
+	
+	getWithdrawInfo: '/user/sell/datum/info',
+	addWithdraw: '/user/sell/datum/add',
+	withdraw: '/user/sell/log/add',
+	getNewsList: '/user/setup/news/list',
+	getNewsInfo: '/user/setup/news/info',
+	getMessageList: '/user/messageHall/article/list',
+	getMessageListMy: '/user/messageHall/article/list/my',
+	deleteMessage: '/user/messageHall/article/delete',
+	addMessage: '/user/messageHall/article/add',
+	updateMessage: '/user/messageHall/article/update',
+	
+	getUserRoleCenterList: '/user/userRole/center/list',
+	getCartNum: '/user/cart/num',
+	
+	
+	getFundTypeMap: '/user/fund/info/type/map',
+	getFundList: '/user/fund/info/list',
+	
+	
+	
+	
+	
+	
+	getAuditGoodsList: '/b/goods/audit/list',
+	getCategoryListB: '/b/goods/sort/list',
+	addGood: '/b/goods/add',
+	updateGood: '/b/goods/edit',
+	getGoodInfoB: '/b/goods/info',
+	getGoodsListB: '/b/goods/list',
+	updateGoodTwig: '/b/goods/set/twig',
+	updateGoodStatus: '/b/goods/set/status',
+	deleteGoodB: '/b/goods/delete',
+	
+	
+	
+	getShopInfo: '/b/shop/info',
+	setShopGoldAlert: '/b/shop/gold/alert/set',
+	addNoDelivery: '/b/shop/no/delivery/create',
+	deleteNoDelivery: '/b/shop/no/delivery/delete',
+	getNoDeliveryList: '/b/shop/no/delivery/list',
+	getWxIncomList: '/b/pay/wx/income/info/list',
+	setRewardRatio:'/b/shop/set/reward/ratio',
+}

+ 36 - 0
src/common/constants.ts

@@ -0,0 +1,36 @@
+const EDITOR_CONTAINER_PADDING = 20;
+const LOGIN_URL = '/pages/login/login';
+const PHONE_LOGIN_URL = '/pages/login/phone-login';
+const OSS_STATIC = 'https://xsd-img.datouit.com/static/';
+const MAP_KEY = '5K7BZ-OSO6O-UZKW5-SDZHI-FEZ3T-IMBV4'; //腾讯地图key
+const ANDROID_KEY = 'e2d09a80a04949a797afa3878af75e25';// 高德地图的android的key
+const WX_KEY = 'd8e87fb5aaadb382dc03a4166b2fb5ad';// 高德地图的微信小程序key
+const AREA_OSS = 'https://dt-test-dev-img.datounet.com/area/allArea20.json';
+const PHONENNUMBER = '19120699313';
+const APP_BASE_URL= 'https://xsd-img.datouit.com/app/';
+const EMAIL = 'cmcnc@qq.com';
+const APPID = '';
+const PAYCODE = '';
+
+function RegPhone(str: string) {
+	let regu = /^[1][0-9]{10}$/;
+	let re = new RegExp(regu);
+	return re.test(str);
+}
+
+export {
+	EDITOR_CONTAINER_PADDING,
+	LOGIN_URL,
+	OSS_STATIC,
+	MAP_KEY,
+	RegPhone,
+	PHONE_LOGIN_URL,
+	WX_KEY,
+	ANDROID_KEY,
+	AREA_OSS,
+	PHONENNUMBER,
+	APP_BASE_URL,
+	EMAIL,
+	APPID,
+	PAYCODE
+};

+ 41 - 0
src/common/error.ts

@@ -0,0 +1,41 @@
+import { router } from '@/router';
+import { LOGIN_URL, PHONE_LOGIN_URL } from '@/common/constants';
+import Store, { types } from '@/common/store/index.ts';
+
+const error_handle = function (err : any) : void {
+	console.log(err, 123);
+	let retcode = parseInt(err.code);
+	if (retcode === 1001) {
+		toLogin();
+		Store.commit(types.LOGOUT);
+	}
+	// uni.showModal({
+	// 	content: err.msg,
+	// 	confirmText: '知道了',
+	// });
+	if(retcode === 3000){
+		return;
+	}
+	setTimeout(() => {
+		uni.showToast({ title: err.msg, duration: 2000, icon: 'none' });
+	}, 100);
+};
+
+const toLogin = function () {
+	// #ifdef MP-WEIXIN
+	router.push({
+		path: LOGIN_URL
+	});
+	// #endif
+	// #ifndef MP-WEIXIN
+	router.push({
+		path: PHONE_LOGIN_URL
+	});
+	// #endif
+	Store.commit(`base/${types.LOGOUT}`);
+	// router.pushTab({
+	// 	path: '/pages/front/front'
+	// });
+}
+
+export default error_handle;

+ 21 - 0
src/common/http/config.ts

@@ -0,0 +1,21 @@
+let baseUrl = '';
+
+const VUE_APP_REMOTE_HOST = process.env.VUE_APP_REMOTE_HOST;
+
+// #ifndef H5
+// #endif
+baseUrl = `https://${VUE_APP_REMOTE_HOST}`;
+
+// #ifdef H5
+if(location.host === 'xsd-shop-dev.datounet.com'){
+	baseUrl = `https://xsd-api-dev-go.datounet.com`;
+}
+// #endif
+
+
+const config = {
+  baseUrl,
+  dataType: 'text',
+};
+
+export default config;

+ 158 - 0
src/common/http/http.ts

@@ -0,0 +1,158 @@
+import map from 'lodash/map';
+import set from 'lodash/set';
+import get from 'lodash/get';
+import isFunction from 'lodash/isFunction';
+import error_handle from '@/common/error';
+
+// const reset_config = function reset_config(settting:any):any ;
+
+class Http {
+	config = {
+		baseUrl: '',
+		header: {},
+	}
+
+	interceptor = {
+		request(config:any):any {
+			const req_config = config;
+			set(req_config, 'header.X-Requested-With', 'XMLHttpRequest');
+			// set(req_config, 'header.mobileapp', 'true');
+			const token = uni.getStorageSync('token');
+			set(req_config, 'header.Authorization', token);
+			return req_config;
+		},
+		// response(res) {},
+	}
+
+	set_config(config:any):void {
+		Object.keys(config).forEach((key:string):void => {
+			(this as any).config[key] = config[key];
+		});
+	}
+
+	post(settting:any):any {
+		return this.ajax({
+			...settting,
+			method: 'POST'
+		});
+	}
+
+	get(settting:any):any {
+		return this.ajax({
+			...settting,
+			method: 'GET'
+		});
+	}
+	
+	put(settting:any):any {
+		return this.ajax({
+			...settting,
+			method: 'PUT'
+		});
+	}
+	
+	delete(settting:any):any {
+		return this.ajax({
+			...settting,
+			method: 'DELETE'
+		});
+	}
+
+	async upPic(setting:any):Promise<any> {
+		// console.log(444444)
+		let settingCopy = {
+			type: 2,
+			url: '/common/upload',
+			...setting
+		};
+		if (!settingCopy.filePath) {
+			return
+		}
+		const data = {
+			prefix: "other"
+		}
+		return this.get({
+			url: settingCopy.url,
+			data,
+			headers: {
+				'content-type': 'application/x-www-form-urlencoded'
+			},
+		}).then((result:any) => {
+			// console.log(111111111)
+			return new Promise((resolve, reject) => {
+				uni.uploadFile({
+					url: result.host,
+					filePath: settingCopy.filePath,
+					name: 'file',
+					formData: {
+						name: settingCopy.filePath,
+						key: result.dir,
+						OSSAccessKeyId: result.accessid,
+						policy: result.policy,
+						signature: result.signature,
+						expire: result.expire,
+						callback: result.callback,
+						dir: 'admin/'
+					},
+					success(res) {
+						const _result = JSON.parse(res.data)
+						// console.log(2222222)
+						resolve(result.host + '/' + _result.url)
+					},
+					fail(res) {
+						// console.log(333333333)
+						reject(res)
+					}
+				})
+			})
+		})
+	}
+
+	ajax(settting:any):any {
+		return new Promise((resolve, reject) => {
+			const conf = this.reset_config(settting);
+			uni.request({
+				...conf,
+				success: (res) => {
+					const data = JSON.parse(res.data as string);
+					if (data.code === 200) {
+						resolve(data.data);
+					} else {
+						error_handle(data);
+						reject(data);
+					}
+				},
+				fail: (err) => {
+					error_handle(err);
+					reject(err);
+				},
+			});
+		});
+	}
+	
+	reset_config(settting:any):any {
+		let {
+			baseUrl,
+			...other_configs
+		} = this.config;
+		const {
+			url,
+			...other_settings
+		} = settting;
+		if(settting.hasOwnProperty("baseUrl")){
+			baseUrl = settting.baseUrl;
+		}
+		const new_url = baseUrl + url;
+		let config = {
+			url: new_url,
+			...other_configs,
+			...other_settings,
+		};
+		if (isFunction(this.interceptor.request)) {
+			config = this.interceptor.request(config);
+		}
+		return config;
+	}
+}
+
+export default Http;

+ 17 - 0
src/common/http/index.ts

@@ -0,0 +1,17 @@
+import Http from './http';
+import config from './config';
+import api from '../api';
+const $http = new Http();
+$http.set_config(config);
+
+const install = (Vue:any) => {
+  const VueCopy = Vue;
+  VueCopy.prototype.$api = {...api};
+  VueCopy.prototype.$http = $http;
+};
+
+export default { install };
+
+export {
+  $http,
+}

+ 5379 - 0
src/common/jsencrypt.js

@@ -0,0 +1,5379 @@
+(function(global, factory) {
+	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+		typeof define === 'function' && define.amd ? define(['exports'], factory) :
+		(factory((global.JSEncrypt = {})));
+}(this, (function(exports) {
+	'use strict';
+	var navigator2 = {
+		appName: 'Netscape',
+		userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
+	};
+	//  用来替换window2
+	var window2 = {
+		ASN1: null,
+		Base64: null,
+		Hex: null,
+		crypto: null,
+		href: null
+	};
+	var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
+
+	function int2char(n) {
+		return BI_RM.charAt(n);
+	}
+	//#region BIT_OPERATIONS
+	// (public) this & a
+	function op_and(x, y) {
+		return x & y;
+	}
+	// (public) this | a
+	function op_or(x, y) {
+		return x | y;
+	}
+	// (public) this ^ a
+	function op_xor(x, y) {
+		return x ^ y;
+	}
+	// (public) this & ~a
+	function op_andnot(x, y) {
+		return x & ~y;
+	}
+	// return index of lowest 1-bit in x, x < 2^31
+	function lbit(x) {
+		if (x == 0) {
+			return -1;
+		}
+		var r = 0;
+		if ((x & 0xffff) == 0) {
+			x >>= 16;
+			r += 16;
+		}
+		if ((x & 0xff) == 0) {
+			x >>= 8;
+			r += 8;
+		}
+		if ((x & 0xf) == 0) {
+			x >>= 4;
+			r += 4;
+		}
+		if ((x & 3) == 0) {
+			x >>= 2;
+			r += 2;
+		}
+		if ((x & 1) == 0) {
+			++r;
+		}
+		return r;
+	}
+	// return number of 1 bits in x
+	function cbit(x) {
+		var r = 0;
+		while (x != 0) {
+			x &= x - 1;
+			++r;
+		}
+		return r;
+	}
+	//#endregion BIT_OPERATIONS
+
+	var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+	var b64pad = "=";
+
+	function hex2b64(h) {
+		var i;
+		var c;
+		var ret = "";
+		for (i = 0; i + 3 <= h.length; i += 3) {
+			c = parseInt(h.substring(i, i + 3), 16);
+			ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);
+		}
+		if (i + 1 == h.length) {
+			c = parseInt(h.substring(i, i + 1), 16);
+			ret += b64map.charAt(c << 2);
+		} else if (i + 2 == h.length) {
+			c = parseInt(h.substring(i, i + 2), 16);
+			ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);
+		}
+		while ((ret.length & 3) > 0) {
+			ret += b64pad;
+		}
+		return ret;
+	}
+	// convert a base64 string to hex
+	function b64tohex(s) {
+		var ret = "";
+		var i;
+		var k = 0; // b64 state, 0-3
+		var slop = 0;
+		for (i = 0; i < s.length; ++i) {
+			if (s.charAt(i) == b64pad) {
+				break;
+			}
+			var v = b64map.indexOf(s.charAt(i));
+			if (v < 0) {
+				continue;
+			}
+			if (k == 0) {
+				ret += int2char(v >> 2);
+				slop = v & 3;
+				k = 1;
+			} else if (k == 1) {
+				ret += int2char((slop << 2) | (v >> 4));
+				slop = v & 0xf;
+				k = 2;
+			} else if (k == 2) {
+				ret += int2char(slop);
+				ret += int2char(v >> 2);
+				slop = v & 3;
+				k = 3;
+			} else {
+				ret += int2char((slop << 2) | (v >> 4));
+				ret += int2char(v & 0xf);
+				k = 0;
+			}
+		}
+		if (k == 1) {
+			ret += int2char(slop << 2);
+		}
+		return ret;
+	}
+
+	/*! *****************************************************************************
+	Copyright (c) Microsoft Corporation. All rights reserved.
+	Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of the
+	License at http://www.apache.org/licenses/LICENSE-2.0
+
+	THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+	KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
+	WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
+	MERCHANTABLITY OR NON-INFRINGEMENT.
+
+	See the Apache Version 2.0 License for specific language governing permissions
+	and limitations under the License.
+	***************************************************************************** */
+	/* global Reflect, Promise */
+
+	var extendStatics = function(d, b) {
+		extendStatics = Object.setPrototypeOf ||
+			({
+					__proto__: []
+				}
+				instanceof Array && function(d, b) {
+					d.__proto__ = b;
+				}) ||
+			function(d, b) {
+				for (var p in b)
+					if (b.hasOwnProperty(p)) d[p] = b[p];
+			};
+		return extendStatics(d, b);
+	};
+
+	function __extends(d, b) {
+		extendStatics(d, b);
+
+		function __() {
+			this.constructor = d;
+		}
+		d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	}
+
+	// Hex JavaScript decoder
+	// Copyright (c) 2008-2013 Lapo Luchini <lapo@lapo.it>
+	// Permission to use, copy, modify, and/or distribute this software for any
+	// purpose with or without fee is hereby granted, provided that the above
+	// copyright notice and this permission notice appear in all copies.
+	//
+	// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+	// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+	// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+	// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+	// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+	// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+	// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+	/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
+	var decoder;
+	var Hex = {
+		decode: function(a) {
+			var i;
+			if (decoder === undefined) {
+				var hex = "0123456789ABCDEF";
+				var ignore = " \f\n\r\t\u00A0\u2028\u2029";
+				decoder = {};
+				for (i = 0; i < 16; ++i) {
+					decoder[hex.charAt(i)] = i;
+				}
+				hex = hex.toLowerCase();
+				for (i = 10; i < 16; ++i) {
+					decoder[hex.charAt(i)] = i;
+				}
+				for (i = 0; i < ignore.length; ++i) {
+					decoder[ignore.charAt(i)] = -1;
+				}
+			}
+			var out = [];
+			var bits = 0;
+			var char_count = 0;
+			for (i = 0; i < a.length; ++i) {
+				var c = a.charAt(i);
+				if (c == "=") {
+					break;
+				}
+				c = decoder[c];
+				if (c == -1) {
+					continue;
+				}
+				if (c === undefined) {
+					throw new Error("Illegal character at offset " + i);
+				}
+				bits |= c;
+				if (++char_count >= 2) {
+					out[out.length] = bits;
+					bits = 0;
+					char_count = 0;
+				} else {
+					bits <<= 4;
+				}
+			}
+			if (char_count) {
+				throw new Error("Hex encoding incomplete: 4 bits missing");
+			}
+			return out;
+		}
+	};
+
+	// Base64 JavaScript decoder
+	// Copyright (c) 2008-2013 Lapo Luchini <lapo@lapo.it>
+	// Permission to use, copy, modify, and/or distribute this software for any
+	// purpose with or without fee is hereby granted, provided that the above
+	// copyright notice and this permission notice appear in all copies.
+	//
+	// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+	// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+	// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+	// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+	// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+	// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+	// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+	/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
+	var decoder$1;
+	var Base64 = {
+		decode: function(a) {
+			var i;
+			if (decoder$1 === undefined) {
+				var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+				var ignore = "= \f\n\r\t\u00A0\u2028\u2029";
+				decoder$1 = Object.create(null);
+				for (i = 0; i < 64; ++i) {
+					decoder$1[b64.charAt(i)] = i;
+				}
+				for (i = 0; i < ignore.length; ++i) {
+					decoder$1[ignore.charAt(i)] = -1;
+				}
+			}
+			var out = [];
+			var bits = 0;
+			var char_count = 0;
+			for (i = 0; i < a.length; ++i) {
+				var c = a.charAt(i);
+				if (c == "=") {
+					break;
+				}
+				c = decoder$1[c];
+				if (c == -1) {
+					continue;
+				}
+				if (c === undefined) {
+					throw new Error("Illegal character at offset " + i);
+				}
+				bits |= c;
+				if (++char_count >= 4) {
+					out[out.length] = (bits >> 16);
+					out[out.length] = (bits >> 8) & 0xFF;
+					out[out.length] = bits & 0xFF;
+					bits = 0;
+					char_count = 0;
+				} else {
+					bits <<= 6;
+				}
+			}
+			switch (char_count) {
+				case 1:
+					throw new Error("Base64 encoding incomplete: at least 2 bits missing");
+				case 2:
+					out[out.length] = (bits >> 10);
+					break;
+				case 3:
+					out[out.length] = (bits >> 16);
+					out[out.length] = (bits >> 8) & 0xFF;
+					break;
+			}
+			return out;
+		},
+		re: /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/,
+		unarmor: function(a) {
+			var m = Base64.re.exec(a);
+			if (m) {
+				if (m[1]) {
+					a = m[1];
+				} else if (m[2]) {
+					a = m[2];
+				} else {
+					throw new Error("RegExp out of sync");
+				}
+			}
+			return Base64.decode(a);
+		}
+	};
+
+	// Big integer base-10 printing library
+	// Copyright (c) 2014 Lapo Luchini <lapo@lapo.it>
+	// Permission to use, copy, modify, and/or distribute this software for any
+	// purpose with or without fee is hereby granted, provided that the above
+	// copyright notice and this permission notice appear in all copies.
+	//
+	// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+	// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+	// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+	// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+	// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+	// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+	// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+	/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
+	var max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256
+	var Int10 = /** @class */ (function() {
+		function Int10(value) {
+			this.buf = [+value || 0];
+		}
+		Int10.prototype.mulAdd = function(m, c) {
+			// assert(m <= 256)
+			var b = this.buf;
+			var l = b.length;
+			var i;
+			var t;
+			for (i = 0; i < l; ++i) {
+				t = b[i] * m + c;
+				if (t < max) {
+					c = 0;
+				} else {
+					c = 0 | (t / max);
+					t -= c * max;
+				}
+				b[i] = t;
+			}
+			if (c > 0) {
+				b[i] = c;
+			}
+		};
+		Int10.prototype.sub = function(c) {
+			// assert(m <= 256)
+			var b = this.buf;
+			var l = b.length;
+			var i;
+			var t;
+			for (i = 0; i < l; ++i) {
+				t = b[i] - c;
+				if (t < 0) {
+					t += max;
+					c = 1;
+				} else {
+					c = 0;
+				}
+				b[i] = t;
+			}
+			while (b[b.length - 1] === 0) {
+				b.pop();
+			}
+		};
+		Int10.prototype.toString = function(base) {
+			if ((base || 10) != 10) {
+				throw new Error("only base 10 is supported");
+			}
+			var b = this.buf;
+			var s = b[b.length - 1].toString();
+			for (var i = b.length - 2; i >= 0; --i) {
+				s += (max + b[i]).toString().substring(1);
+			}
+			return s;
+		};
+		Int10.prototype.valueOf = function() {
+			var b = this.buf;
+			var v = 0;
+			for (var i = b.length - 1; i >= 0; --i) {
+				v = v * max + b[i];
+			}
+			return v;
+		};
+		Int10.prototype.simplify = function() {
+			var b = this.buf;
+			return (b.length == 1) ? b[0] : this;
+		};
+		return Int10;
+	}());
+
+	// ASN.1 JavaScript decoder
+	var ellipsis = "\u2026";
+	var reTimeS =
+		/^(\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/;
+	var reTimeL =
+		/^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/;
+
+	function stringCut(str, len) {
+		if (str.length > len) {
+			str = str.substring(0, len) + ellipsis;
+		}
+		return str;
+	}
+	var Stream = /** @class */ (function() {
+		function Stream(enc, pos) {
+			this.hexDigits = "0123456789ABCDEF";
+			if (enc instanceof Stream) {
+				this.enc = enc.enc;
+				this.pos = enc.pos;
+			} else {
+				// enc should be an array or a binary string
+				this.enc = enc;
+				this.pos = pos;
+			}
+		}
+		Stream.prototype.get = function(pos) {
+			if (pos === undefined) {
+				pos = this.pos++;
+			}
+			if (pos >= this.enc.length) {
+				throw new Error("Requesting byte offset " + pos + " on a stream of length " +
+					this.enc.length);
+			}
+			return ("string" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];
+		};
+		Stream.prototype.hexByte = function(b) {
+			return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);
+		};
+		Stream.prototype.hexDump = function(start, end, raw) {
+			var s = "";
+			for (var i = start; i < end; ++i) {
+				s += this.hexByte(this.get(i));
+				if (raw !== true) {
+					switch (i & 0xF) {
+						case 0x7:
+							s += "  ";
+							break;
+						case 0xF:
+							s += "\n";
+							break;
+						default:
+							s += " ";
+					}
+				}
+			}
+			return s;
+		};
+		Stream.prototype.isASCII = function(start, end) {
+			for (var i = start; i < end; ++i) {
+				var c = this.get(i);
+				if (c < 32 || c > 176) {
+					return false;
+				}
+			}
+			return true;
+		};
+		Stream.prototype.parseStringISO = function(start, end) {
+			var s = "";
+			for (var i = start; i < end; ++i) {
+				s += String.fromCharCode(this.get(i));
+			}
+			return s;
+		};
+		Stream.prototype.parseStringUTF = function(start, end) {
+			var s = "";
+			for (var i = start; i < end;) {
+				var c = this.get(i++);
+				if (c < 128) {
+					s += String.fromCharCode(c);
+				} else if ((c > 191) && (c < 224)) {
+					s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));
+				} else {
+					s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) <<
+						6) | (this.get(i++) & 0x3F));
+				}
+			}
+			return s;
+		};
+		Stream.prototype.parseStringBMP = function(start, end) {
+			var str = "";
+			var hi;
+			var lo;
+			for (var i = start; i < end;) {
+				hi = this.get(i++);
+				lo = this.get(i++);
+				str += String.fromCharCode((hi << 8) | lo);
+			}
+			return str;
+		};
+		Stream.prototype.parseTime = function(start, end, shortYear) {
+			var s = this.parseStringISO(start, end);
+			var m = (shortYear ? reTimeS : reTimeL).exec(s);
+			if (!m) {
+				return "Unrecognized time: " + s;
+			}
+			if (shortYear) {
+				// to avoid querying the timer, use the fixed range [1970, 2069]
+				// it will conform with ITU X.400 [-10, +40] sliding window2 until 2030
+				m[1] = +m[1];
+				m[1] += (+m[1] < 70) ? 2000 : 1900;
+			}
+			s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4];
+			if (m[5]) {
+				s += ":" + m[5];
+				if (m[6]) {
+					s += ":" + m[6];
+					if (m[7]) {
+						s += "." + m[7];
+					}
+				}
+			}
+			if (m[8]) {
+				s += " UTC";
+				if (m[8] != "Z") {
+					s += m[8];
+					if (m[9]) {
+						s += ":" + m[9];
+					}
+				}
+			}
+			return s;
+		};
+		Stream.prototype.parseInteger = function(start, end) {
+			var v = this.get(start);
+			var neg = (v > 127);
+			var pad = neg ? 255 : 0;
+			var len;
+			var s = "";
+			// skip unuseful bits (not allowed in DER)
+			while (v == pad && ++start < end) {
+				v = this.get(start);
+			}
+			len = end - start;
+			if (len === 0) {
+				return neg ? -1 : 0;
+			}
+			// show bit length of huge integers
+			if (len > 4) {
+				s = v;
+				len <<= 3;
+				while (((+s ^ pad) & 0x80) == 0) {
+					s = +s << 1;
+					--len;
+				}
+				s = "(" + len + " bit)\n";
+			}
+			// decode the integer
+			if (neg) {
+				v = v - 256;
+			}
+			var n = new Int10(v);
+			for (var i = start + 1; i < end; ++i) {
+				n.mulAdd(256, this.get(i));
+			}
+			return s + n.toString();
+		};
+		Stream.prototype.parseBitString = function(start, end, maxLength) {
+			var unusedBit = this.get(start);
+			var lenBit = ((end - start - 1) << 3) - unusedBit;
+			var intro = "(" + lenBit + " bit)\n";
+			var s = "";
+			for (var i = start + 1; i < end; ++i) {
+				var b = this.get(i);
+				var skip = (i == end - 1) ? unusedBit : 0;
+				for (var j = 7; j >= skip; --j) {
+					s += (b >> j) & 1 ? "1" : "0";
+				}
+				if (s.length > maxLength) {
+					return intro + stringCut(s, maxLength);
+				}
+			}
+			return intro + s;
+		};
+		Stream.prototype.parseOctetString = function(start, end, maxLength) {
+			if (this.isASCII(start, end)) {
+				return stringCut(this.parseStringISO(start, end), maxLength);
+			}
+			var len = end - start;
+			var s = "(" + len + " byte)\n";
+			maxLength /= 2; // we work in bytes
+			if (len > maxLength) {
+				end = start + maxLength;
+			}
+			for (var i = start; i < end; ++i) {
+				s += this.hexByte(this.get(i));
+			}
+			if (len > maxLength) {
+				s += ellipsis;
+			}
+			return s;
+		};
+		Stream.prototype.parseOID = function(start, end, maxLength) {
+			var s = "";
+			var n = new Int10();
+			var bits = 0;
+			for (var i = start; i < end; ++i) {
+				var v = this.get(i);
+				n.mulAdd(128, v & 0x7F);
+				bits += 7;
+				if (!(v & 0x80)) { // finished
+					if (s === "") {
+						n = n.simplify();
+						if (n instanceof Int10) {
+							n.sub(80);
+							s = "2." + n.toString();
+						} else {
+							var m = n < 80 ? n < 40 ? 0 : 1 : 2;
+							s = m + "." + (n - m * 40);
+						}
+					} else {
+						s += "." + n.toString();
+					}
+					if (s.length > maxLength) {
+						return stringCut(s, maxLength);
+					}
+					n = new Int10();
+					bits = 0;
+				}
+			}
+			if (bits > 0) {
+				s += ".incomplete";
+			}
+			return s;
+		};
+		return Stream;
+	}());
+	var ASN1 = /** @class */ (function() {
+		function ASN1(stream, header, length, tag, sub) {
+			if (!(tag instanceof ASN1Tag)) {
+				throw new Error("Invalid tag value.");
+			}
+			this.stream = stream;
+			this.header = header;
+			this.length = length;
+			this.tag = tag;
+			this.sub = sub;
+		}
+		ASN1.prototype.typeName = function() {
+			switch (this.tag.tagClass) {
+				case 0: // universal
+					switch (this.tag.tagNumber) {
+						case 0x00:
+							return "EOC";
+						case 0x01:
+							return "BOOLEAN";
+						case 0x02:
+							return "INTEGER";
+						case 0x03:
+							return "BIT_STRING";
+						case 0x04:
+							return "OCTET_STRING";
+						case 0x05:
+							return "NULL";
+						case 0x06:
+							return "OBJECT_IDENTIFIER";
+						case 0x07:
+							return "ObjectDescriptor";
+						case 0x08:
+							return "EXTERNAL";
+						case 0x09:
+							return "REAL";
+						case 0x0A:
+							return "ENUMERATED";
+						case 0x0B:
+							return "EMBEDDED_PDV";
+						case 0x0C:
+							return "UTF8String";
+						case 0x10:
+							return "SEQUENCE";
+						case 0x11:
+							return "SET";
+						case 0x12:
+							return "NumericString";
+						case 0x13:
+							return "PrintableString"; // ASCII subset
+						case 0x14:
+							return "TeletexString"; // aka T61String
+						case 0x15:
+							return "VideotexString";
+						case 0x16:
+							return "IA5String"; // ASCII
+						case 0x17:
+							return "UTCTime";
+						case 0x18:
+							return "GeneralizedTime";
+						case 0x19:
+							return "GraphicString";
+						case 0x1A:
+							return "VisibleString"; // ASCII subset
+						case 0x1B:
+							return "GeneralString";
+						case 0x1C:
+							return "UniversalString";
+						case 0x1E:
+							return "BMPString";
+					}
+					return "Universal_" + this.tag.tagNumber.toString();
+				case 1:
+					return "Application_" + this.tag.tagNumber.toString();
+				case 2:
+					return "[" + this.tag.tagNumber.toString() + "]"; // Context
+				case 3:
+					return "Private_" + this.tag.tagNumber.toString();
+			}
+		};
+		ASN1.prototype.content = function(maxLength) {
+			if (this.tag === undefined) {
+				return null;
+			}
+			if (maxLength === undefined) {
+				maxLength = Infinity;
+			}
+			var content = this.posContent();
+			var len = Math.abs(this.length);
+			if (!this.tag.isUniversal()) {
+				if (this.sub !== null) {
+					return "(" + this.sub.length + " elem)";
+				}
+				return this.stream.parseOctetString(content, content + len, maxLength);
+			}
+			switch (this.tag.tagNumber) {
+				case 0x01: // BOOLEAN
+					return (this.stream.get(content) === 0) ? "false" : "true";
+				case 0x02: // INTEGER
+					return this.stream.parseInteger(content, content + len);
+				case 0x03: // BIT_STRING
+					return this.sub ? "(" + this.sub.length + " elem)" :
+						this.stream.parseBitString(content, content + len, maxLength);
+				case 0x04: // OCTET_STRING
+					return this.sub ? "(" + this.sub.length + " elem)" :
+						this.stream.parseOctetString(content, content + len, maxLength);
+					// case 0x05: // NULL
+				case 0x06: // OBJECT_IDENTIFIER
+					return this.stream.parseOID(content, content + len, maxLength);
+					// case 0x07: // ObjectDescriptor
+					// case 0x08: // EXTERNAL
+					// case 0x09: // REAL
+					// case 0x0A: // ENUMERATED
+					// case 0x0B: // EMBEDDED_PDV
+				case 0x10: // SEQUENCE
+				case 0x11: // SET
+					if (this.sub !== null) {
+						return "(" + this.sub.length + " elem)";
+					} else {
+						return "(no elem)";
+					}
+					case 0x0C: // UTF8String
+						return stringCut(this.stream.parseStringUTF(content, content + len),
+							maxLength);
+					case 0x12: // NumericString
+					case 0x13: // PrintableString
+					case 0x14: // TeletexString
+					case 0x15: // VideotexString
+					case 0x16: // IA5String
+						// case 0x19: // GraphicString
+					case 0x1A: // VisibleString
+						// case 0x1B: // GeneralString
+						// case 0x1C: // UniversalString
+						return stringCut(this.stream.parseStringISO(content, content + len),
+							maxLength);
+					case 0x1E: // BMPString
+						return stringCut(this.stream.parseStringBMP(content, content + len),
+							maxLength);
+					case 0x17: // UTCTime
+					case 0x18: // GeneralizedTime
+						return this.stream.parseTime(content, content + len, (this.tag
+							.tagNumber == 0x17));
+			}
+			return null;
+		};
+		ASN1.prototype.toString = function() {
+			return this.typeName() + "@" + this.stream.pos + "[header:" + this.header +
+				",length:" + this.length + ",sub:" + ((this.sub === null) ? "null" : this.sub
+					.length) + "]";
+		};
+		ASN1.prototype.toPrettyString = function(indent) {
+			if (indent === undefined) {
+				indent = "";
+			}
+			var s = indent + this.typeName() + " @" + this.stream.pos;
+			if (this.length >= 0) {
+				s += "+";
+			}
+			s += this.length;
+			if (this.tag.tagConstructed) {
+				s += " (constructed)";
+			} else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag
+					.tagNumber == 0x04))) && (this.sub !== null)) {
+				s += " (encapsulates)";
+			}
+			s += "\n";
+			if (this.sub !== null) {
+				indent += "  ";
+				for (var i = 0, max = this.sub.length; i < max; ++i) {
+					s += this.sub[i].toPrettyString(indent);
+				}
+			}
+			return s;
+		};
+		ASN1.prototype.posStart = function() {
+			return this.stream.pos;
+		};
+		ASN1.prototype.posContent = function() {
+			return this.stream.pos + this.header;
+		};
+		ASN1.prototype.posEnd = function() {
+			return this.stream.pos + this.header + Math.abs(this.length);
+		};
+		ASN1.prototype.toHexString = function() {
+			return this.stream.hexDump(this.posStart(), this.posEnd(), true);
+		};
+		ASN1.decodeLength = function(stream) {
+			var buf = stream.get();
+			var len = buf & 0x7F;
+			if (len == buf) {
+				return len;
+			}
+			// no reason to use Int10, as it would be a huge buffer anyways
+			if (len > 6) {
+				throw new Error("Length over 48 bits not supported at position " + (stream.pos -
+					1));
+			}
+			if (len === 0) {
+				return null;
+			} // undefined
+			buf = 0;
+			for (var i = 0; i < len; ++i) {
+				buf = (buf * 256) + stream.get();
+			}
+			return buf;
+		};
+		/**
+		 * Retrieve the hexadecimal value (as a string) of the current ASN.1 element
+		 * @returns {string}
+		 * @public
+		 */
+		ASN1.prototype.getHexStringValue = function() {
+			var hexString = this.toHexString();
+			var offset = this.header * 2;
+			var length = this.length * 2;
+			return hexString.substr(offset, length);
+		};
+		ASN1.decode = function(str) {
+			var stream;
+			if (!(str instanceof Stream)) {
+				stream = new Stream(str, 0);
+			} else {
+				stream = str;
+			}
+			var streamStart = new Stream(stream);
+			var tag = new ASN1Tag(stream);
+			var len = ASN1.decodeLength(stream);
+			var start = stream.pos;
+			var header = start - streamStart.pos;
+			var sub = null;
+			var getSub = function() {
+				var ret = [];
+				if (len !== null) {
+					// definite length
+					var end = start + len;
+					while (stream.pos < end) {
+						ret[ret.length] = ASN1.decode(stream);
+					}
+					if (stream.pos != end) {
+						throw new Error(
+							"Content size is not correct for container starting at offset " +
+							start);
+					}
+				} else {
+					// undefined length
+					try {
+						for (;;) {
+							var s = ASN1.decode(stream);
+							if (s.tag.isEOC()) {
+								break;
+							}
+							ret[ret.length] = s;
+						}
+						len = start - stream
+						.pos; // undefined lengths are represented as negative values
+					} catch (e) {
+						throw new Error(
+							"Exception while decoding undefined length content: " + e);
+					}
+				}
+				return ret;
+			};
+			if (tag.tagConstructed) {
+				// must have valid content
+				sub = getSub();
+			} else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber ==
+				0x04))) {
+				// sometimes BitString and OctetString are used to encapsulate ASN.1
+				try {
+					if (tag.tagNumber == 0x03) {
+						if (stream.get() != 0) {
+							throw new Error("BIT STRINGs with unused bits cannot encapsulate.");
+						}
+					}
+					sub = getSub();
+					for (var i = 0; i < sub.length; ++i) {
+						if (sub[i].tag.isEOC()) {
+							throw new Error("EOC is not supposed to be actual content.");
+						}
+					}
+				} catch (e) {
+					// but silently ignore when they don't
+					sub = null;
+				}
+			}
+			if (sub === null) {
+				if (len === null) {
+					throw new Error(
+						"We can't skip over an invalid tag with undefined length at offset " +
+						start);
+				}
+				stream.pos = start + Math.abs(len);
+			}
+			return new ASN1(streamStart, header, len, tag, sub);
+		};
+		return ASN1;
+	}());
+	var ASN1Tag = /** @class */ (function() {
+		function ASN1Tag(stream) {
+			var buf = stream.get();
+			this.tagClass = buf >> 6;
+			this.tagConstructed = ((buf & 0x20) !== 0);
+			this.tagNumber = buf & 0x1F;
+			if (this.tagNumber == 0x1F) { // long tag
+				var n = new Int10();
+				do {
+					buf = stream.get();
+					n.mulAdd(128, buf & 0x7F);
+				} while (buf & 0x80);
+				this.tagNumber = n.simplify();
+			}
+		}
+		ASN1Tag.prototype.isUniversal = function() {
+			return this.tagClass === 0x00;
+		};
+		ASN1Tag.prototype.isEOC = function() {
+			return this.tagClass === 0x00 && this.tagNumber === 0x00;
+		};
+		return ASN1Tag;
+	}());
+
+	// Copyright (c) 2005  Tom Wu
+	// Bits per digit
+	var dbits;
+	// JavaScript engine analysis
+	var canary = 0xdeadbeefcafe;
+	var j_lm = ((canary & 0xffffff) == 0xefcafe);
+	//#region
+	var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83,
+		89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181,
+		191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283,
+		293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409,
+		419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523,
+		541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647,
+		653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773,
+		787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
+		919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
+	];
+	var lplim = (1 << 26) / lowprimes[lowprimes.length - 1];
+	//#endregion
+	// (public) Constructor
+	var BigInteger = /** @class */ (function() {
+		function BigInteger(a, b, c) {
+			if (a != null) {
+				if ("number" == typeof a) {
+					this.fromNumber(a, b, c);
+				} else if (b == null && "string" != typeof a) {
+					this.fromString(a, 256);
+				} else {
+					this.fromString(a, b);
+				}
+			}
+		}
+		//#region PUBLIC
+		// BigInteger.prototype.toString = bnToString;
+		// (public) return string representation in given radix
+		BigInteger.prototype.toString = function(b) {
+			if (this.s < 0) {
+				return "-" + this.negate().toString(b);
+			}
+			var k;
+			if (b == 16) {
+				k = 4;
+			} else if (b == 8) {
+				k = 3;
+			} else if (b == 2) {
+				k = 1;
+			} else if (b == 32) {
+				k = 5;
+			} else if (b == 4) {
+				k = 2;
+			} else {
+				return this.toRadix(b);
+			}
+			var km = (1 << k) - 1;
+			var d;
+			var m = false;
+			var r = "";
+			var i = this.t;
+			var p = this.DB - (i * this.DB) % k;
+			if (i-- > 0) {
+				if (p < this.DB && (d = this[i] >> p) > 0) {
+					m = true;
+					r = int2char(d);
+				}
+				while (i >= 0) {
+					if (p < k) {
+						d = (this[i] & ((1 << p) - 1)) << (k - p);
+						d |= this[--i] >> (p += this.DB - k);
+					} else {
+						d = (this[i] >> (p -= k)) & km;
+						if (p <= 0) {
+							p += this.DB;
+							--i;
+						}
+					}
+					if (d > 0) {
+						m = true;
+					}
+					if (m) {
+						r += int2char(d);
+					}
+				}
+			}
+			return m ? r : "0";
+		};
+		// BigInteger.prototype.negate = bnNegate;
+		// (public) -this
+		BigInteger.prototype.negate = function() {
+			var r = nbi();
+			BigInteger.ZERO.subTo(this, r);
+			return r;
+		};
+		// BigInteger.prototype.abs = bnAbs;
+		// (public) |this|
+		BigInteger.prototype.abs = function() {
+			return (this.s < 0) ? this.negate() : this;
+		};
+		// BigInteger.prototype.compareTo = bnCompareTo;
+		// (public) return + if this > a, - if this < a, 0 if equal
+		BigInteger.prototype.compareTo = function(a) {
+			var r = this.s - a.s;
+			if (r != 0) {
+				return r;
+			}
+			var i = this.t;
+			r = i - a.t;
+			if (r != 0) {
+				return (this.s < 0) ? -r : r;
+			}
+			while (--i >= 0) {
+				if ((r = this[i] - a[i]) != 0) {
+					return r;
+				}
+			}
+			return 0;
+		};
+		// BigInteger.prototype.bitLength = bnBitLength;
+		// (public) return the number of bits in "this"
+		BigInteger.prototype.bitLength = function() {
+			if (this.t <= 0) {
+				return 0;
+			}
+			return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));
+		};
+		// BigInteger.prototype.mod = bnMod;
+		// (public) this mod a
+		BigInteger.prototype.mod = function(a) {
+			var r = nbi();
+			this.abs().divRemTo(a, null, r);
+			if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {
+				a.subTo(r, r);
+			}
+			return r;
+		};
+		// BigInteger.prototype.modPowInt = bnModPowInt;
+		// (public) this^e % m, 0 <= e < 2^32
+		BigInteger.prototype.modPowInt = function(e, m) {
+			var z;
+			if (e < 256 || m.isEven()) {
+				z = new Classic(m);
+			} else {
+				z = new Montgomery(m);
+			}
+			return this.exp(e, z);
+		};
+		// BigInteger.prototype.clone = bnClone;
+		// (public)
+		BigInteger.prototype.clone = function() {
+			var r = nbi();
+			this.copyTo(r);
+			return r;
+		};
+		// BigInteger.prototype.intValue = bnIntValue;
+		// (public) return value as integer
+		BigInteger.prototype.intValue = function() {
+			if (this.s < 0) {
+				if (this.t == 1) {
+					return this[0] - this.DV;
+				} else if (this.t == 0) {
+					return -1;
+				}
+			} else if (this.t == 1) {
+				return this[0];
+			} else if (this.t == 0) {
+				return 0;
+			}
+			// assumes 16 < DB < 32
+			return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];
+		};
+		// BigInteger.prototype.byteValue = bnByteValue;
+		// (public) return value as byte
+		BigInteger.prototype.byteValue = function() {
+			return (this.t == 0) ? this.s : (this[0] << 24) >> 24;
+		};
+		// BigInteger.prototype.shortValue = bnShortValue;
+		// (public) return value as short (assumes DB>=16)
+		BigInteger.prototype.shortValue = function() {
+			return (this.t == 0) ? this.s : (this[0] << 16) >> 16;
+		};
+		// BigInteger.prototype.signum = bnSigNum;
+		// (public) 0 if this == 0, 1 if this > 0
+		BigInteger.prototype.signum = function() {
+			if (this.s < 0) {
+				return -1;
+			} else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {
+				return 0;
+			} else {
+				return 1;
+			}
+		};
+		// BigInteger.prototype.toByteArray = bnToByteArray;
+		// (public) convert to bigendian byte array
+		BigInteger.prototype.toByteArray = function() {
+			var i = this.t;
+			var r = [];
+			r[0] = this.s;
+			var p = this.DB - (i * this.DB) % 8;
+			var d;
+			var k = 0;
+			if (i-- > 0) {
+				if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {
+					r[k++] = d | (this.s << (this.DB - p));
+				}
+				while (i >= 0) {
+					if (p < 8) {
+						d = (this[i] & ((1 << p) - 1)) << (8 - p);
+						d |= this[--i] >> (p += this.DB - 8);
+					} else {
+						d = (this[i] >> (p -= 8)) & 0xff;
+						if (p <= 0) {
+							p += this.DB;
+							--i;
+						}
+					}
+					if ((d & 0x80) != 0) {
+						d |= -256;
+					}
+					if (k == 0 && (this.s & 0x80) != (d & 0x80)) {
+						++k;
+					}
+					if (k > 0 || d != this.s) {
+						r[k++] = d;
+					}
+				}
+			}
+			return r;
+		};
+		// BigInteger.prototype.equals = bnEquals;
+		BigInteger.prototype.equals = function(a) {
+			return (this.compareTo(a) == 0);
+		};
+		// BigInteger.prototype.min = bnMin;
+		BigInteger.prototype.min = function(a) {
+			return (this.compareTo(a) < 0) ? this : a;
+		};
+		// BigInteger.prototype.max = bnMax;
+		BigInteger.prototype.max = function(a) {
+			return (this.compareTo(a) > 0) ? this : a;
+		};
+		// BigInteger.prototype.and = bnAnd;
+		BigInteger.prototype.and = function(a) {
+			var r = nbi();
+			this.bitwiseTo(a, op_and, r);
+			return r;
+		};
+		// BigInteger.prototype.or = bnOr;
+		BigInteger.prototype.or = function(a) {
+			var r = nbi();
+			this.bitwiseTo(a, op_or, r);
+			return r;
+		};
+		// BigInteger.prototype.xor = bnXor;
+		BigInteger.prototype.xor = function(a) {
+			var r = nbi();
+			this.bitwiseTo(a, op_xor, r);
+			return r;
+		};
+		// BigInteger.prototype.andNot = bnAndNot;
+		BigInteger.prototype.andNot = function(a) {
+			var r = nbi();
+			this.bitwiseTo(a, op_andnot, r);
+			return r;
+		};
+		// BigInteger.prototype.not = bnNot;
+		// (public) ~this
+		BigInteger.prototype.not = function() {
+			var r = nbi();
+			for (var i = 0; i < this.t; ++i) {
+				r[i] = this.DM & ~this[i];
+			}
+			r.t = this.t;
+			r.s = ~this.s;
+			return r;
+		};
+		// BigInteger.prototype.shiftLeft = bnShiftLeft;
+		// (public) this << n
+		BigInteger.prototype.shiftLeft = function(n) {
+			var r = nbi();
+			if (n < 0) {
+				this.rShiftTo(-n, r);
+			} else {
+				this.lShiftTo(n, r);
+			}
+			return r;
+		};
+		// BigInteger.prototype.shiftRight = bnShiftRight;
+		// (public) this >> n
+		BigInteger.prototype.shiftRight = function(n) {
+			var r = nbi();
+			if (n < 0) {
+				this.lShiftTo(-n, r);
+			} else {
+				this.rShiftTo(n, r);
+			}
+			return r;
+		};
+		// BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
+		// (public) returns index of lowest 1-bit (or -1 if none)
+		BigInteger.prototype.getLowestSetBit = function() {
+			for (var i = 0; i < this.t; ++i) {
+				if (this[i] != 0) {
+					return i * this.DB + lbit(this[i]);
+				}
+			}
+			if (this.s < 0) {
+				return this.t * this.DB;
+			}
+			return -1;
+		};
+		// BigInteger.prototype.bitCount = bnBitCount;
+		// (public) return number of set bits
+		BigInteger.prototype.bitCount = function() {
+			var r = 0;
+			var x = this.s & this.DM;
+			for (var i = 0; i < this.t; ++i) {
+				r += cbit(this[i] ^ x);
+			}
+			return r;
+		};
+		// BigInteger.prototype.testBit = bnTestBit;
+		// (public) true iff nth bit is set
+		BigInteger.prototype.testBit = function(n) {
+			var j = Math.floor(n / this.DB);
+			if (j >= this.t) {
+				return (this.s != 0);
+			}
+			return ((this[j] & (1 << (n % this.DB))) != 0);
+		};
+		// BigInteger.prototype.setBit = bnSetBit;
+		// (public) this | (1<<n)
+		BigInteger.prototype.setBit = function(n) {
+			return this.changeBit(n, op_or);
+		};
+		// BigInteger.prototype.clearBit = bnClearBit;
+		// (public) this & ~(1<<n)
+		BigInteger.prototype.clearBit = function(n) {
+			return this.changeBit(n, op_andnot);
+		};
+		// BigInteger.prototype.flipBit = bnFlipBit;
+		// (public) this ^ (1<<n)
+		BigInteger.prototype.flipBit = function(n) {
+			return this.changeBit(n, op_xor);
+		};
+		// BigInteger.prototype.add = bnAdd;
+		// (public) this + a
+		BigInteger.prototype.add = function(a) {
+			var r = nbi();
+			this.addTo(a, r);
+			return r;
+		};
+		// BigInteger.prototype.subtract = bnSubtract;
+		// (public) this - a
+		BigInteger.prototype.subtract = function(a) {
+			var r = nbi();
+			this.subTo(a, r);
+			return r;
+		};
+		// BigInteger.prototype.multiply = bnMultiply;
+		// (public) this * a
+		BigInteger.prototype.multiply = function(a) {
+			var r = nbi();
+			this.multiplyTo(a, r);
+			return r;
+		};
+		// BigInteger.prototype.divide = bnDivide;
+		// (public) this / a
+		BigInteger.prototype.divide = function(a) {
+			var r = nbi();
+			this.divRemTo(a, r, null);
+			return r;
+		};
+		// BigInteger.prototype.remainder = bnRemainder;
+		// (public) this % a
+		BigInteger.prototype.remainder = function(a) {
+			var r = nbi();
+			this.divRemTo(a, null, r);
+			return r;
+		};
+		// BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
+		// (public) [this/a,this%a]
+		BigInteger.prototype.divideAndRemainder = function(a) {
+			var q = nbi();
+			var r = nbi();
+			this.divRemTo(a, q, r);
+			return [q, r];
+		};
+		// BigInteger.prototype.modPow = bnModPow;
+		// (public) this^e % m (HAC 14.85)
+		BigInteger.prototype.modPow = function(e, m) {
+			console.log(arguments)
+			var i = e.bitLength();
+			var k;
+			var r = nbv(1);
+			var z;
+			if (i <= 0) {
+				return r;
+			} else if (i < 18) {
+				k = 1;
+			} else if (i < 48) {
+				k = 3;
+			} else if (i < 144) {
+				k = 4;
+			} else if (i < 768) {
+				k = 5;
+			} else {
+				k = 6;
+			}
+			if (i < 8) {
+				z = new Classic(m);
+			} else if (m.isEven()) {
+				z = new Barrett(m);
+			} else {
+				z = new Montgomery(m);
+			}
+			// precomputation
+			var g = [];
+			var n = 3;
+			var k1 = k - 1;
+			var km = (1 << k) - 1;
+			g[1] = z.convert(this);
+			if (k > 1) {
+				var g2 = nbi();
+				z.sqrTo(g[1], g2);
+				while (n <= km) {
+					g[n] = nbi();
+					z.mulTo(g2, g[n - 2], g[n]);
+					n += 2;
+				}
+			}
+			var j = e.t - 1;
+			var w;
+			var is1 = true;
+			var r2 = nbi();
+			var t;
+			i = nbits(e[j]) - 1;
+			while (j >= 0) {
+				if (i >= k1) {
+					w = (e[j] >> (i - k1)) & km;
+				} else {
+					w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);
+					if (j > 0) {
+						w |= e[j - 1] >> (this.DB + i - k1);
+					}
+				}
+				n = k;
+				while ((w & 1) == 0) {
+					w >>= 1;
+					--n;
+				}
+				if ((i -= n) < 0) {
+					i += this.DB;
+					--j;
+				}
+				if (is1) { // ret == 1, don't bother squaring or multiplying it
+					g[w].copyTo(r);
+					is1 = false;
+				} else {
+					while (n > 1) {
+						z.sqrTo(r, r2);
+						z.sqrTo(r2, r);
+						n -= 2;
+					}
+					if (n > 0) {
+						z.sqrTo(r, r2);
+					} else {
+						t = r;
+						r = r2;
+						r2 = t;
+					}
+					z.mulTo(r2, g[w], r);
+				}
+				while (j >= 0 && (e[j] & (1 << i)) == 0) {
+					z.sqrTo(r, r2);
+					t = r;
+					r = r2;
+					r2 = t;
+					if (--i < 0) {
+						i = this.DB - 1;
+						--j;
+					}
+				}
+			}
+			return z.revert(r);
+		};
+		// BigInteger.prototype.modInverse = bnModInverse;
+		// (public) 1/this % m (HAC 14.61)
+		BigInteger.prototype.modInverse = function(m) {
+			var ac = m.isEven();
+			if ((this.isEven() && ac) || m.signum() == 0) {
+				return BigInteger.ZERO;
+			}
+			var u = m.clone();
+			var v = this.clone();
+			var a = nbv(1);
+			var b = nbv(0);
+			var c = nbv(0);
+			var d = nbv(1);
+			while (u.signum() != 0) {
+				while (u.isEven()) {
+					u.rShiftTo(1, u);
+					if (ac) {
+						if (!a.isEven() || !b.isEven()) {
+							a.addTo(this, a);
+							b.subTo(m, b);
+						}
+						a.rShiftTo(1, a);
+					} else if (!b.isEven()) {
+						b.subTo(m, b);
+					}
+					b.rShiftTo(1, b);
+				}
+				while (v.isEven()) {
+					v.rShiftTo(1, v);
+					if (ac) {
+						if (!c.isEven() || !d.isEven()) {
+							c.addTo(this, c);
+							d.subTo(m, d);
+						}
+						c.rShiftTo(1, c);
+					} else if (!d.isEven()) {
+						d.subTo(m, d);
+					}
+					d.rShiftTo(1, d);
+				}
+				if (u.compareTo(v) >= 0) {
+					u.subTo(v, u);
+					if (ac) {
+						a.subTo(c, a);
+					}
+					b.subTo(d, b);
+				} else {
+					v.subTo(u, v);
+					if (ac) {
+						c.subTo(a, c);
+					}
+					d.subTo(b, d);
+				}
+			}
+			if (v.compareTo(BigInteger.ONE) != 0) {
+				return BigInteger.ZERO;
+			}
+			if (d.compareTo(m) >= 0) {
+				return d.subtract(m);
+			}
+			if (d.signum() < 0) {
+				d.addTo(m, d);
+			} else {
+				return d;
+			}
+			if (d.signum() < 0) {
+				return d.add(m);
+			} else {
+				return d;
+			}
+		};
+		// BigInteger.prototype.pow = bnPow;
+		// (public) this^e
+		BigInteger.prototype.pow = function(e) {
+			return this.exp(e, new NullExp());
+		};
+		// BigInteger.prototype.gcd = bnGCD;
+		// (public) gcd(this,a) (HAC 14.54)
+		BigInteger.prototype.gcd = function(a) {
+			var x = (this.s < 0) ? this.negate() : this.clone();
+			var y = (a.s < 0) ? a.negate() : a.clone();
+			if (x.compareTo(y) < 0) {
+				var t = x;
+				x = y;
+				y = t;
+			}
+			var i = x.getLowestSetBit();
+			var g = y.getLowestSetBit();
+			if (g < 0) {
+				return x;
+			}
+			if (i < g) {
+				g = i;
+			}
+			if (g > 0) {
+				x.rShiftTo(g, x);
+				y.rShiftTo(g, y);
+			}
+			while (x.signum() > 0) {
+				if ((i = x.getLowestSetBit()) > 0) {
+					x.rShiftTo(i, x);
+				}
+				if ((i = y.getLowestSetBit()) > 0) {
+					y.rShiftTo(i, y);
+				}
+				if (x.compareTo(y) >= 0) {
+					x.subTo(y, x);
+					x.rShiftTo(1, x);
+				} else {
+					y.subTo(x, y);
+					y.rShiftTo(1, y);
+				}
+			}
+			if (g > 0) {
+				y.lShiftTo(g, y);
+			}
+			return y;
+		};
+		// BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
+		// (public) test primality with certainty >= 1-.5^t
+		BigInteger.prototype.isProbablePrime = function(t) {
+			var i;
+			var x = this.abs();
+			if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
+				for (i = 0; i < lowprimes.length; ++i) {
+					if (x[0] == lowprimes[i]) {
+						return true;
+					}
+				}
+				return false;
+			}
+			if (x.isEven()) {
+				return false;
+			}
+			i = 1;
+			while (i < lowprimes.length) {
+				var m = lowprimes[i];
+				var j = i + 1;
+				while (j < lowprimes.length && m < lplim) {
+					m *= lowprimes[j++];
+				}
+				m = x.modInt(m);
+				while (i < j) {
+					if (m % lowprimes[i++] == 0) {
+						return false;
+					}
+				}
+			}
+			return x.millerRabin(t);
+		};
+		//#endregion PUBLIC
+		//#region PROTECTED
+		// BigInteger.prototype.copyTo = bnpCopyTo;
+		// (protected) copy this to r
+		BigInteger.prototype.copyTo = function(r) {
+			for (var i = this.t - 1; i >= 0; --i) {
+				r[i] = this[i];
+			}
+			r.t = this.t;
+			r.s = this.s;
+		};
+		// BigInteger.prototype.fromInt = bnpFromInt;
+		// (protected) set from integer value x, -DV <= x < DV
+		BigInteger.prototype.fromInt = function(x) {
+			this.t = 1;
+			this.s = (x < 0) ? -1 : 0;
+			if (x > 0) {
+				this[0] = x;
+			} else if (x < -1) {
+				this[0] = x + this.DV;
+			} else {
+				this.t = 0;
+			}
+		};
+		// BigInteger.prototype.fromString = bnpFromString;
+		// (protected) set from string and radix
+		BigInteger.prototype.fromString = function(s, b) {
+			var k;
+			if (b == 16) {
+				k = 4;
+			} else if (b == 8) {
+				k = 3;
+			} else if (b == 256) {
+				k = 8;
+				/* byte array */
+			} else if (b == 2) {
+				k = 1;
+			} else if (b == 32) {
+				k = 5;
+			} else if (b == 4) {
+				k = 2;
+			} else {
+				this.fromRadix(s, b);
+				return;
+			}
+			this.t = 0;
+			this.s = 0;
+			var i = s.length;
+			var mi = false;
+			var sh = 0;
+			while (--i >= 0) {
+				var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);
+				if (x < 0) {
+					if (s.charAt(i) == "-") {
+						mi = true;
+					}
+					continue;
+				}
+				mi = false;
+				if (sh == 0) {
+					this[this.t++] = x;
+				} else if (sh + k > this.DB) {
+					this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;
+					this[this.t++] = (x >> (this.DB - sh));
+				} else {
+					this[this.t - 1] |= x << sh;
+				}
+				sh += k;
+				if (sh >= this.DB) {
+					sh -= this.DB;
+				}
+			}
+			if (k == 8 && ((+s[0]) & 0x80) != 0) {
+				this.s = -1;
+				if (sh > 0) {
+					this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;
+				}
+			}
+			this.clamp();
+			if (mi) {
+				BigInteger.ZERO.subTo(this, this);
+			}
+		};
+		// BigInteger.prototype.clamp = bnpClamp;
+		// (protected) clamp off excess high words
+		BigInteger.prototype.clamp = function() {
+			var c = this.s & this.DM;
+			while (this.t > 0 && this[this.t - 1] == c) {
+				--this.t;
+			}
+		};
+		// BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
+		// (protected) r = this << n*DB
+		BigInteger.prototype.dlShiftTo = function(n, r) {
+			var i;
+			for (i = this.t - 1; i >= 0; --i) {
+				r[i + n] = this[i];
+			}
+			for (i = n - 1; i >= 0; --i) {
+				r[i] = 0;
+			}
+			r.t = this.t + n;
+			r.s = this.s;
+		};
+		// BigInteger.prototype.drShiftTo = bnpDRShiftTo;
+		// (protected) r = this >> n*DB
+		BigInteger.prototype.drShiftTo = function(n, r) {
+			for (var i = n; i < this.t; ++i) {
+				r[i - n] = this[i];
+			}
+			r.t = Math.max(this.t - n, 0);
+			r.s = this.s;
+		};
+		// BigInteger.prototype.lShiftTo = bnpLShiftTo;
+		// (protected) r = this << n
+		BigInteger.prototype.lShiftTo = function(n, r) {
+			var bs = n % this.DB;
+			var cbs = this.DB - bs;
+			var bm = (1 << cbs) - 1;
+			var ds = Math.floor(n / this.DB);
+			var c = (this.s << bs) & this.DM;
+			for (var i = this.t - 1; i >= 0; --i) {
+				r[i + ds + 1] = (this[i] >> cbs) | c;
+				c = (this[i] & bm) << bs;
+			}
+			for (var i = ds - 1; i >= 0; --i) {
+				r[i] = 0;
+			}
+			r[ds] = c;
+			r.t = this.t + ds + 1;
+			r.s = this.s;
+			r.clamp();
+		};
+		// BigInteger.prototype.rShiftTo = bnpRShiftTo;
+		// (protected) r = this >> n
+		BigInteger.prototype.rShiftTo = function(n, r) {
+			r.s = this.s;
+			var ds = Math.floor(n / this.DB);
+			if (ds >= this.t) {
+				r.t = 0;
+				return;
+			}
+			var bs = n % this.DB;
+			var cbs = this.DB - bs;
+			var bm = (1 << bs) - 1;
+			r[0] = this[ds] >> bs;
+			for (var i = ds + 1; i < this.t; ++i) {
+				r[i - ds - 1] |= (this[i] & bm) << cbs;
+				r[i - ds] = this[i] >> bs;
+			}
+			if (bs > 0) {
+				r[this.t - ds - 1] |= (this.s & bm) << cbs;
+			}
+			r.t = this.t - ds;
+			r.clamp();
+		};
+		// BigInteger.prototype.subTo = bnpSubTo;
+		// (protected) r = this - a
+		BigInteger.prototype.subTo = function(a, r) {
+			var i = 0;
+			var c = 0;
+			var m = Math.min(a.t, this.t);
+			while (i < m) {
+				c += this[i] - a[i];
+				r[i++] = c & this.DM;
+				c >>= this.DB;
+			}
+			if (a.t < this.t) {
+				c -= a.s;
+				while (i < this.t) {
+					c += this[i];
+					r[i++] = c & this.DM;
+					c >>= this.DB;
+				}
+				c += this.s;
+			} else {
+				c += this.s;
+				while (i < a.t) {
+					c -= a[i];
+					r[i++] = c & this.DM;
+					c >>= this.DB;
+				}
+				c -= a.s;
+			}
+			r.s = (c < 0) ? -1 : 0;
+			if (c < -1) {
+				r[i++] = this.DV + c;
+			} else if (c > 0) {
+				r[i++] = c;
+			}
+			r.t = i;
+			r.clamp();
+		};
+		// BigInteger.prototype.multiplyTo = bnpMultiplyTo;
+		// (protected) r = this * a, r != this,a (HAC 14.12)
+		// "this" should be the larger one if appropriate.
+		BigInteger.prototype.multiplyTo = function(a, r) {
+			var x = this.abs();
+			var y = a.abs();
+			var i = x.t;
+			r.t = i + y.t;
+			while (--i >= 0) {
+				r[i] = 0;
+			}
+			for (i = 0; i < y.t; ++i) {
+				r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);
+			}
+			r.s = 0;
+			r.clamp();
+			if (this.s != a.s) {
+				BigInteger.ZERO.subTo(r, r);
+			}
+		};
+		// BigInteger.prototype.squareTo = bnpSquareTo;
+		// (protected) r = this^2, r != this (HAC 14.16)
+		BigInteger.prototype.squareTo = function(r) {
+			var x = this.abs();
+			var i = r.t = 2 * x.t;
+			while (--i >= 0) {
+				r[i] = 0;
+			}
+			for (i = 0; i < x.t - 1; ++i) {
+				var c = x.am(i, x[i], r, 2 * i, 0, 1);
+				if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x
+					.DV) {
+					r[i + x.t] -= x.DV;
+					r[i + x.t + 1] = 1;
+				}
+			}
+			if (r.t > 0) {
+				r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);
+			}
+			r.s = 0;
+			r.clamp();
+		};
+		// BigInteger.prototype.divRemTo = bnpDivRemTo;
+		// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
+		// r != q, this != m.  q or r may be null.
+		BigInteger.prototype.divRemTo = function(m, q, r) {
+			var pm = m.abs();
+			if (pm.t <= 0) {
+				return;
+			}
+			var pt = this.abs();
+			if (pt.t < pm.t) {
+				if (q != null) {
+					q.fromInt(0);
+				}
+				if (r != null) {
+					this.copyTo(r);
+				}
+				return;
+			}
+			if (r == null) {
+				r = nbi();
+			}
+			var y = nbi();
+			var ts = this.s;
+			var ms = m.s;
+			var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus
+			if (nsh > 0) {
+				pm.lShiftTo(nsh, y);
+				pt.lShiftTo(nsh, r);
+			} else {
+				pm.copyTo(y);
+				pt.copyTo(r);
+			}
+			var ys = y.t;
+			var y0 = y[ys - 1];
+			if (y0 == 0) {
+				return;
+			}
+			var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);
+			var d1 = this.FV / yt;
+			var d2 = (1 << this.F1) / yt;
+			var e = 1 << this.F2;
+			var i = r.t;
+			var j = i - ys;
+			var t = (q == null) ? nbi() : q;
+			y.dlShiftTo(j, t);
+			if (r.compareTo(t) >= 0) {
+				r[r.t++] = 1;
+				r.subTo(t, r);
+			}
+			BigInteger.ONE.dlShiftTo(ys, t);
+			t.subTo(y, y); // "negative" y so we can replace sub with am later
+			while (y.t < ys) {
+				y[y.t++] = 0;
+			}
+			while (--j >= 0) {
+				// Estimate quotient digit
+				var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);
+				if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
+					y.dlShiftTo(j, t);
+					r.subTo(t, r);
+					while (r[i] < --qd) {
+						r.subTo(t, r);
+					}
+				}
+			}
+			if (q != null) {
+				r.drShiftTo(ys, q);
+				if (ts != ms) {
+					BigInteger.ZERO.subTo(q, q);
+				}
+			}
+			r.t = ys;
+			r.clamp();
+			if (nsh > 0) {
+				r.rShiftTo(nsh, r);
+			} // Denormalize remainder
+			if (ts < 0) {
+				BigInteger.ZERO.subTo(r, r);
+			}
+		};
+		// BigInteger.prototype.invDigit = bnpInvDigit;
+		// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
+		// justification:
+		//         xy == 1 (mod m)
+		//         xy =  1+km
+		//   xy(2-xy) = (1+km)(1-km)
+		// x[y(2-xy)] = 1-k^2m^2
+		// x[y(2-xy)] == 1 (mod m^2)
+		// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
+		// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
+		// JS multiply "overflows" differently from C/C++, so care is needed here.
+		BigInteger.prototype.invDigit = function() {
+			if (this.t < 1) {
+				return 0;
+			}
+			var x = this[0];
+			if ((x & 1) == 0) {
+				return 0;
+			}
+			var y = x & 3; // y == 1/x mod 2^2
+			y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
+			y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
+			y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
+			// last step - calculate inverse mod DV directly;
+			// assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
+			y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
+			// we really want the negative inverse, and -DV < y < DV
+			return (y > 0) ? this.DV - y : -y;
+		};
+		// BigInteger.prototype.isEven = bnpIsEven;
+		// (protected) true iff this is even
+		BigInteger.prototype.isEven = function() {
+			return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;
+		};
+		// BigInteger.prototype.exp = bnpExp;
+		// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
+		BigInteger.prototype.exp = function(e, z) {
+			if (e > 0xffffffff || e < 1) {
+				return BigInteger.ONE;
+			}
+			var r = nbi();
+			var r2 = nbi();
+			var g = z.convert(this);
+			var i = nbits(e) - 1;
+			g.copyTo(r);
+			while (--i >= 0) {
+				z.sqrTo(r, r2);
+				if ((e & (1 << i)) > 0) {
+					z.mulTo(r2, g, r);
+				} else {
+					var t = r;
+					r = r2;
+					r2 = t;
+				}
+			}
+			return z.revert(r);
+		};
+		// BigInteger.prototype.chunkSize = bnpChunkSize;
+		// (protected) return x s.t. r^x < DV
+		BigInteger.prototype.chunkSize = function(r) {
+			return Math.floor(Math.LN2 * this.DB / Math.log(r));
+		};
+		// BigInteger.prototype.toRadix = bnpToRadix;
+		// (protected) convert to radix string
+		BigInteger.prototype.toRadix = function(b) {
+			if (b == null) {
+				b = 10;
+			}
+			if (this.signum() == 0 || b < 2 || b > 36) {
+				return "0";
+			}
+			var cs = this.chunkSize(b);
+			var a = Math.pow(b, cs);
+			var d = nbv(a);
+			var y = nbi();
+			var z = nbi();
+			var r = "";
+			this.divRemTo(d, y, z);
+			while (y.signum() > 0) {
+				r = (a + z.intValue()).toString(b).substr(1) + r;
+				y.divRemTo(d, y, z);
+			}
+			return z.intValue().toString(b) + r;
+		};
+		// BigInteger.prototype.fromRadix = bnpFromRadix;
+		// (protected) convert from radix string
+		BigInteger.prototype.fromRadix = function(s, b) {
+			this.fromInt(0);
+			if (b == null) {
+				b = 10;
+			}
+			var cs = this.chunkSize(b);
+			var d = Math.pow(b, cs);
+			var mi = false;
+			var j = 0;
+			var w = 0;
+			for (var i = 0; i < s.length; ++i) {
+				var x = intAt(s, i);
+				if (x < 0) {
+					if (s.charAt(i) == "-" && this.signum() == 0) {
+						mi = true;
+					}
+					continue;
+				}
+				w = b * w + x;
+				if (++j >= cs) {
+					this.dMultiply(d);
+					this.dAddOffset(w, 0);
+					j = 0;
+					w = 0;
+				}
+			}
+			if (j > 0) {
+				this.dMultiply(Math.pow(b, j));
+				this.dAddOffset(w, 0);
+			}
+			if (mi) {
+				BigInteger.ZERO.subTo(this, this);
+			}
+		};
+		// BigInteger.prototype.fromNumber = bnpFromNumber;
+		// (protected) alternate constructor
+		BigInteger.prototype.fromNumber = function(a, b, c) {
+			if ("number" == typeof b) {
+				// new BigInteger(int,int,RNG)
+				if (a < 2) {
+					this.fromInt(1);
+				} else {
+					this.fromNumber(a, c);
+					if (!this.testBit(a - 1)) {
+						// force MSB set
+						this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);
+					}
+					if (this.isEven()) {
+						this.dAddOffset(1, 0);
+					} // force odd
+					while (!this.isProbablePrime(b)) {
+						this.dAddOffset(2, 0);
+						if (this.bitLength() > a) {
+							this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);
+						}
+					}
+				}
+			} else {
+				// new BigInteger(int,RNG)
+				var x = [];
+				var t = a & 7;
+				x.length = (a >> 3) + 1;
+				b.nextBytes(x);
+				if (t > 0) {
+					x[0] &= ((1 << t) - 1);
+				} else {
+					x[0] = 0;
+				}
+				this.fromString(x, 256);
+			}
+		};
+		// BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
+		// (protected) r = this op a (bitwise)
+		BigInteger.prototype.bitwiseTo = function(a, op, r) {
+			var i;
+			var f;
+			var m = Math.min(a.t, this.t);
+			for (i = 0; i < m; ++i) {
+				r[i] = op(this[i], a[i]);
+			}
+			if (a.t < this.t) {
+				f = a.s & this.DM;
+				for (i = m; i < this.t; ++i) {
+					r[i] = op(this[i], f);
+				}
+				r.t = this.t;
+			} else {
+				f = this.s & this.DM;
+				for (i = m; i < a.t; ++i) {
+					r[i] = op(f, a[i]);
+				}
+				r.t = a.t;
+			}
+			r.s = op(this.s, a.s);
+			r.clamp();
+		};
+		// BigInteger.prototype.changeBit = bnpChangeBit;
+		// (protected) this op (1<<n)
+		BigInteger.prototype.changeBit = function(n, op) {
+			var r = BigInteger.ONE.shiftLeft(n);
+			this.bitwiseTo(r, op, r);
+			return r;
+		};
+		// BigInteger.prototype.addTo = bnpAddTo;
+		// (protected) r = this + a
+		BigInteger.prototype.addTo = function(a, r) {
+			var i = 0;
+			var c = 0;
+			var m = Math.min(a.t, this.t);
+			while (i < m) {
+				c += this[i] + a[i];
+				r[i++] = c & this.DM;
+				c >>= this.DB;
+			}
+			if (a.t < this.t) {
+				c += a.s;
+				while (i < this.t) {
+					c += this[i];
+					r[i++] = c & this.DM;
+					c >>= this.DB;
+				}
+				c += this.s;
+			} else {
+				c += this.s;
+				while (i < a.t) {
+					c += a[i];
+					r[i++] = c & this.DM;
+					c >>= this.DB;
+				}
+				c += a.s;
+			}
+			r.s = (c < 0) ? -1 : 0;
+			if (c > 0) {
+				r[i++] = c;
+			} else if (c < -1) {
+				r[i++] = this.DV + c;
+			}
+			r.t = i;
+			r.clamp();
+		};
+		// BigInteger.prototype.dMultiply = bnpDMultiply;
+		// (protected) this *= n, this >= 0, 1 < n < DV
+		BigInteger.prototype.dMultiply = function(n) {
+			this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);
+			++this.t;
+			this.clamp();
+		};
+		// BigInteger.prototype.dAddOffset = bnpDAddOffset;
+		// (protected) this += n << w words, this >= 0
+		BigInteger.prototype.dAddOffset = function(n, w) {
+			if (n == 0) {
+				return;
+			}
+			while (this.t <= w) {
+				this[this.t++] = 0;
+			}
+			this[w] += n;
+			while (this[w] >= this.DV) {
+				this[w] -= this.DV;
+				if (++w >= this.t) {
+					this[this.t++] = 0;
+				}
+				++this[w];
+			}
+		};
+		// BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
+		// (protected) r = lower n words of "this * a", a.t <= n
+		// "this" should be the larger one if appropriate.
+		BigInteger.prototype.multiplyLowerTo = function(a, n, r) {
+			var i = Math.min(this.t + a.t, n);
+			r.s = 0; // assumes a,this >= 0
+			r.t = i;
+			while (i > 0) {
+				r[--i] = 0;
+			}
+			for (var j = r.t - this.t; i < j; ++i) {
+				r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);
+			}
+			for (var j = Math.min(a.t, n); i < j; ++i) {
+				this.am(0, a[i], r, i, 0, n - i);
+			}
+			r.clamp();
+		};
+		// BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
+		// (protected) r = "this * a" without lower n words, n > 0
+		// "this" should be the larger one if appropriate.
+		BigInteger.prototype.multiplyUpperTo = function(a, n, r) {
+			--n;
+			var i = r.t = this.t + a.t - n;
+			r.s = 0; // assumes a,this >= 0
+			while (--i >= 0) {
+				r[i] = 0;
+			}
+			for (i = Math.max(n - this.t, 0); i < a.t; ++i) {
+				r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);
+			}
+			r.clamp();
+			r.drShiftTo(1, r);
+		};
+		// BigInteger.prototype.modInt = bnpModInt;
+		// (protected) this % n, n < 2^26
+		BigInteger.prototype.modInt = function(n) {
+			if (n <= 0) {
+				return 0;
+			}
+			var d = this.DV % n;
+			var r = (this.s < 0) ? n - 1 : 0;
+			if (this.t > 0) {
+				if (d == 0) {
+					r = this[0] % n;
+				} else {
+					for (var i = this.t - 1; i >= 0; --i) {
+						r = (d * r + this[i]) % n;
+					}
+				}
+			}
+			return r;
+		};
+		// BigInteger.prototype.millerRabin = bnpMillerRabin;
+		// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
+		BigInteger.prototype.millerRabin = function(t) {
+			var n1 = this.subtract(BigInteger.ONE);
+			var k = n1.getLowestSetBit();
+			if (k <= 0) {
+				return false;
+			}
+			var r = n1.shiftRight(k);
+			t = (t + 1) >> 1;
+			if (t > lowprimes.length) {
+				t = lowprimes.length;
+			}
+			var a = nbi();
+			for (var i = 0; i < t; ++i) {
+				// Pick bases at random, instead of starting at 2
+				a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);
+				var y = a.modPow(r, this);
+				if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
+					var j = 1;
+					while (j++ < k && y.compareTo(n1) != 0) {
+						y = y.modPowInt(2, this);
+						if (y.compareTo(BigInteger.ONE) == 0) {
+							return false;
+						}
+					}
+					if (y.compareTo(n1) != 0) {
+						return false;
+					}
+				}
+			}
+			return true;
+		};
+		// BigInteger.prototype.square = bnSquare;
+		// (public) this^2
+		BigInteger.prototype.square = function() {
+			var r = nbi();
+			this.squareTo(r);
+			return r;
+		};
+		//#region ASYNC
+		// Public API method
+		BigInteger.prototype.gcda = function(a, callback) {
+			var x = (this.s < 0) ? this.negate() : this.clone();
+			var y = (a.s < 0) ? a.negate() : a.clone();
+			if (x.compareTo(y) < 0) {
+				var t = x;
+				x = y;
+				y = t;
+			}
+			var i = x.getLowestSetBit();
+			var g = y.getLowestSetBit();
+			if (g < 0) {
+				callback(x);
+				return;
+			}
+			if (i < g) {
+				g = i;
+			}
+			if (g > 0) {
+				x.rShiftTo(g, x);
+				y.rShiftTo(g, y);
+			}
+			// Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.
+			var gcda1 = function() {
+				if ((i = x.getLowestSetBit()) > 0) {
+					x.rShiftTo(i, x);
+				}
+				if ((i = y.getLowestSetBit()) > 0) {
+					y.rShiftTo(i, y);
+				}
+				if (x.compareTo(y) >= 0) {
+					x.subTo(y, x);
+					x.rShiftTo(1, x);
+				} else {
+					y.subTo(x, y);
+					y.rShiftTo(1, y);
+				}
+				if (!(x.signum() > 0)) {
+					if (g > 0) {
+						y.lShiftTo(g, y);
+					}
+					setTimeout(function() {
+						callback(y);
+					}, 0); // escape
+				} else {
+					setTimeout(gcda1, 0);
+				}
+			};
+			setTimeout(gcda1, 10);
+		};
+		// (protected) alternate constructor
+		BigInteger.prototype.fromNumberAsync = function(a, b, c, callback) {
+			if ("number" == typeof b) {
+				if (a < 2) {
+					this.fromInt(1);
+				} else {
+					this.fromNumber(a, c);
+					if (!this.testBit(a - 1)) {
+						this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);
+					}
+					if (this.isEven()) {
+						this.dAddOffset(1, 0);
+					}
+					var bnp_1 = this;
+					var bnpfn1_1 = function() {
+						bnp_1.dAddOffset(2, 0);
+						if (bnp_1.bitLength() > a) {
+							bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1);
+						}
+						if (bnp_1.isProbablePrime(b)) {
+							setTimeout(function() {
+								callback();
+							}, 0); // escape
+						} else {
+							setTimeout(bnpfn1_1, 0);
+						}
+					};
+					setTimeout(bnpfn1_1, 0);
+				}
+			} else {
+				var x = [];
+				var t = a & 7;
+				x.length = (a >> 3) + 1;
+				b.nextBytes(x);
+				if (t > 0) {
+					x[0] &= ((1 << t) - 1);
+				} else {
+					x[0] = 0;
+				}
+				this.fromString(x, 256);
+			}
+		};
+		return BigInteger;
+	}());
+	//#region REDUCERS
+	//#region NullExp
+	var NullExp = /** @class */ (function() {
+		function NullExp() {}
+		// NullExp.prototype.convert = nNop;
+		NullExp.prototype.convert = function(x) {
+			return x;
+		};
+		// NullExp.prototype.revert = nNop;
+		NullExp.prototype.revert = function(x) {
+			return x;
+		};
+		// NullExp.prototype.mulTo = nMulTo;
+		NullExp.prototype.mulTo = function(x, y, r) {
+			x.multiplyTo(y, r);
+		};
+		// NullExp.prototype.sqrTo = nSqrTo;
+		NullExp.prototype.sqrTo = function(x, r) {
+			x.squareTo(r);
+		};
+		return NullExp;
+	}());
+	// Modular reduction using "classic" algorithm
+	var Classic = /** @class */ (function() {
+		function Classic(m) {
+			this.m = m;
+		}
+		// Classic.prototype.convert = cConvert;
+		Classic.prototype.convert = function(x) {
+			if (x.s < 0 || x.compareTo(this.m) >= 0) {
+				return x.mod(this.m);
+			} else {
+				return x;
+			}
+		};
+		// Classic.prototype.revert = cRevert;
+		Classic.prototype.revert = function(x) {
+			return x;
+		};
+		// Classic.prototype.reduce = cReduce;
+		Classic.prototype.reduce = function(x) {
+			x.divRemTo(this.m, null, x);
+		};
+		// Classic.prototype.mulTo = cMulTo;
+		Classic.prototype.mulTo = function(x, y, r) {
+			x.multiplyTo(y, r);
+			this.reduce(r);
+		};
+		// Classic.prototype.sqrTo = cSqrTo;
+		Classic.prototype.sqrTo = function(x, r) {
+			x.squareTo(r);
+			this.reduce(r);
+		};
+		return Classic;
+	}());
+	//#endregion
+	//#region Montgomery
+	// Montgomery reduction
+	var Montgomery = /** @class */ (function() {
+		function Montgomery(m) {
+			this.m = m;
+			this.mp = m.invDigit();
+			this.mpl = this.mp & 0x7fff;
+			this.mph = this.mp >> 15;
+			this.um = (1 << (m.DB - 15)) - 1;
+			this.mt2 = 2 * m.t;
+		}
+		// Montgomery.prototype.convert = montConvert;
+		// xR mod m
+		Montgomery.prototype.convert = function(x) {
+			var r = nbi();
+			x.abs().dlShiftTo(this.m.t, r);
+			r.divRemTo(this.m, null, r);
+			if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {
+				this.m.subTo(r, r);
+			}
+			return r;
+		};
+		// Montgomery.prototype.revert = montRevert;
+		// x/R mod m
+		Montgomery.prototype.revert = function(x) {
+			var r = nbi();
+			x.copyTo(r);
+			this.reduce(r);
+			return r;
+		};
+		// Montgomery.prototype.reduce = montReduce;
+		// x = x/R mod m (HAC 14.32)
+		Montgomery.prototype.reduce = function(x) {
+			while (x.t <= this.mt2) {
+				// pad x so am has enough room later
+				x[x.t++] = 0;
+			}
+			for (var i = 0; i < this.m.t; ++i) {
+				// faster way of calculating u0 = x[i]*mp mod DV
+				var j = x[i] & 0x7fff;
+				var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this
+					.um) << 15)) & x.DM;
+				// use am to combine the multiply-shift-add into one call
+				j = i + this.m.t;
+				x[j] += this.m.am(0, u0, x, i, 0, this.m.t);
+				// propagate carry
+				while (x[j] >= x.DV) {
+					x[j] -= x.DV;
+					x[++j]++;
+				}
+			}
+			x.clamp();
+			x.drShiftTo(this.m.t, x);
+			if (x.compareTo(this.m) >= 0) {
+				x.subTo(this.m, x);
+			}
+		};
+		// Montgomery.prototype.mulTo = montMulTo;
+		// r = "xy/R mod m"; x,y != r
+		Montgomery.prototype.mulTo = function(x, y, r) {
+			x.multiplyTo(y, r);
+			this.reduce(r);
+		};
+		// Montgomery.prototype.sqrTo = montSqrTo;
+		// r = "x^2/R mod m"; x != r
+		Montgomery.prototype.sqrTo = function(x, r) {
+			x.squareTo(r);
+			this.reduce(r);
+		};
+		return Montgomery;
+	}());
+	//#endregion Montgomery
+	//#region Barrett
+	// Barrett modular reduction
+	var Barrett = /** @class */ (function() {
+		function Barrett(m) {
+			this.m = m;
+			// setup Barrett
+			this.r2 = nbi();
+			this.q3 = nbi();
+			BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);
+			this.mu = this.r2.divide(m);
+		}
+		// Barrett.prototype.convert = barrettConvert;
+		Barrett.prototype.convert = function(x) {
+			if (x.s < 0 || x.t > 2 * this.m.t) {
+				return x.mod(this.m);
+			} else if (x.compareTo(this.m) < 0) {
+				return x;
+			} else {
+				var r = nbi();
+				x.copyTo(r);
+				this.reduce(r);
+				return r;
+			}
+		};
+		// Barrett.prototype.revert = barrettRevert;
+		Barrett.prototype.revert = function(x) {
+			return x;
+		};
+		// Barrett.prototype.reduce = barrettReduce;
+		// x = x mod m (HAC 14.42)
+		Barrett.prototype.reduce = function(x) {
+			x.drShiftTo(this.m.t - 1, this.r2);
+			if (x.t > this.m.t + 1) {
+				x.t = this.m.t + 1;
+				x.clamp();
+			}
+			this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);
+			this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);
+			while (x.compareTo(this.r2) < 0) {
+				x.dAddOffset(1, this.m.t + 1);
+			}
+			x.subTo(this.r2, x);
+			while (x.compareTo(this.m) >= 0) {
+				x.subTo(this.m, x);
+			}
+		};
+		// Barrett.prototype.mulTo = barrettMulTo;
+		// r = x*y mod m; x,y != r
+		Barrett.prototype.mulTo = function(x, y, r) {
+			x.multiplyTo(y, r);
+			this.reduce(r);
+		};
+		// Barrett.prototype.sqrTo = barrettSqrTo;
+		// r = x^2 mod m; x != r
+		Barrett.prototype.sqrTo = function(x, r) {
+			x.squareTo(r);
+			this.reduce(r);
+		};
+		return Barrett;
+	}());
+	//#endregion
+	//#endregion REDUCERS
+	// return new, unset BigInteger
+	function nbi() {
+		return new BigInteger(null);
+	}
+
+	function parseBigInt(str, r) {
+		return new BigInteger(str, r);
+	}
+	// am: Compute w_j += (x*this_i), propagate carries,
+	// c is initial carry, returns final carry.
+	// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
+	// We need to select the fastest one that works in this environment.
+	// am1: use a single mult and divide to get the high bits,
+	// max digit bits should be 26 because
+	// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
+	function am1(i, x, w, j, c, n) {
+		while (--n >= 0) {
+			var v = x * this[i++] + w[j] + c;
+			c = Math.floor(v / 0x4000000);
+			w[j++] = v & 0x3ffffff;
+		}
+		return c;
+	}
+	// am2 avoids a big mult-and-extract completely.
+	// Max digit bits should be <= 30 because we do bitwise ops
+	// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
+	function am2(i, x, w, j, c, n) {
+		var xl = x & 0x7fff;
+		var xh = x >> 15;
+		while (--n >= 0) {
+			var l = this[i] & 0x7fff;
+			var h = this[i++] >> 15;
+			var m = xh * l + h * xl;
+			l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);
+			c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);
+			w[j++] = l & 0x3fffffff;
+		}
+		return c;
+	}
+	// Alternately, set max digit bits to 28 since some
+	// browsers slow down when dealing with 32-bit numbers.
+	function am3(i, x, w, j, c, n) {
+		var xl = x & 0x3fff;
+		var xh = x >> 14;
+		while (--n >= 0) {
+			var l = this[i] & 0x3fff;
+			var h = this[i++] >> 14;
+			var m = xh * l + h * xl;
+			l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;
+			c = (l >> 28) + (m >> 14) + xh * h;
+			w[j++] = l & 0xfffffff;
+		}
+		return c;
+	}
+	var inBrowser = typeof navigator2 !== "undefined";
+	if (inBrowser && j_lm && (navigator2.appName == "Microsoft Internet Explorer")) {
+		BigInteger.prototype.am = am2;
+		dbits = 30;
+	} else if (inBrowser && j_lm && (navigator2.appName != "Netscape")) {
+		BigInteger.prototype.am = am1;
+		dbits = 26;
+	} else { // Mozilla/Netscape seems to prefer am3
+		BigInteger.prototype.am = am3;
+		dbits = 28;
+	}
+	BigInteger.prototype.DB = dbits;
+	BigInteger.prototype.DM = ((1 << dbits) - 1);
+	BigInteger.prototype.DV = (1 << dbits);
+	var BI_FP = 52;
+	BigInteger.prototype.FV = Math.pow(2, BI_FP);
+	BigInteger.prototype.F1 = BI_FP - dbits;
+	BigInteger.prototype.F2 = 2 * dbits - BI_FP;
+	// Digit conversions
+	var BI_RC = [];
+	var rr;
+	var vv;
+	rr = "0".charCodeAt(0);
+	for (vv = 0; vv <= 9; ++vv) {
+		BI_RC[rr++] = vv;
+	}
+	rr = "a".charCodeAt(0);
+	for (vv = 10; vv < 36; ++vv) {
+		BI_RC[rr++] = vv;
+	}
+	rr = "A".charCodeAt(0);
+	for (vv = 10; vv < 36; ++vv) {
+		BI_RC[rr++] = vv;
+	}
+
+	function intAt(s, i) {
+		var c = BI_RC[s.charCodeAt(i)];
+		return (c == null) ? -1 : c;
+	}
+	// return bigint initialized to value
+	function nbv(i) {
+		var r = nbi();
+		r.fromInt(i);
+		return r;
+	}
+	// returns bit length of the integer x
+	function nbits(x) {
+		var r = 1;
+		var t;
+		if ((t = x >>> 16) != 0) {
+			x = t;
+			r += 16;
+		}
+		if ((t = x >> 8) != 0) {
+			x = t;
+			r += 8;
+		}
+		if ((t = x >> 4) != 0) {
+			x = t;
+			r += 4;
+		}
+		if ((t = x >> 2) != 0) {
+			x = t;
+			r += 2;
+		}
+		if ((t = x >> 1) != 0) {
+			x = t;
+			r += 1;
+		}
+		return r;
+	}
+	// "constants"
+	BigInteger.ZERO = nbv(0);
+	BigInteger.ONE = nbv(1);
+
+	// prng4.js - uses Arcfour as a PRNG
+	var Arcfour = /** @class */ (function() {
+		function Arcfour() {
+			this.i = 0;
+			this.j = 0;
+			this.S = [];
+		}
+		// Arcfour.prototype.init = ARC4init;
+		// Initialize arcfour context from key, an array of ints, each from [0..255]
+		Arcfour.prototype.init = function(key) {
+			var i;
+			var j;
+			var t;
+			for (i = 0; i < 256; ++i) {
+				this.S[i] = i;
+			}
+			j = 0;
+			for (i = 0; i < 256; ++i) {
+				j = (j + this.S[i] + key[i % key.length]) & 255;
+				t = this.S[i];
+				this.S[i] = this.S[j];
+				this.S[j] = t;
+			}
+			this.i = 0;
+			this.j = 0;
+		};
+		// Arcfour.prototype.next = ARC4next;
+		Arcfour.prototype.next = function() {
+			var t;
+			this.i = (this.i + 1) & 255;
+			this.j = (this.j + this.S[this.i]) & 255;
+			t = this.S[this.i];
+			this.S[this.i] = this.S[this.j];
+			this.S[this.j] = t;
+			return this.S[(t + this.S[this.i]) & 255];
+		};
+		return Arcfour;
+	}());
+	// Plug in your RNG constructor here
+	function prng_newstate() {
+		return new Arcfour();
+	}
+	// Pool size must be a multiple of 4 and greater than 32.
+	// An array of bytes the size of the pool will be passed to init()
+	var rng_psize = 256;
+
+	// Random number generator - requires a PRNG backend, e.g. prng4.js
+	var rng_state;
+	var rng_pool = null;
+	var rng_pptr;
+	// Initialize the pool with junk if needed.
+	if (rng_pool == null) {
+		rng_pool = [];
+		rng_pptr = 0;
+		var t = void 0;
+		if (window2.crypto && window2.crypto.getRandomValues) {
+			// Extract entropy (2048 bits) from RNG if available
+			var z = new Uint32Array(256);
+			window2.crypto.getRandomValues(z);
+			for (t = 0; t < z.length; ++t) {
+				rng_pool[rng_pptr++] = z[t] & 255;
+			}
+		}
+		// Use mouse events for entropy, if we do not have enough entropy by the time
+		// we need it, entropy will be generated by Math.random.
+		var onMouseMoveListener_1 = function(ev) {
+			this.count = this.count || 0;
+			if (this.count >= 256 || rng_pptr >= rng_psize) {
+				if (window2.removeEventListener) {
+					window2.removeEventListener("mousemove", onMouseMoveListener_1, false);
+				} else if (window2.detachEvent) {
+					window2.detachEvent("onmousemove", onMouseMoveListener_1);
+				}
+				return;
+			}
+			try {
+				var mouseCoordinates = ev.x + ev.y;
+				rng_pool[rng_pptr++] = mouseCoordinates & 255;
+				this.count += 1;
+			} catch (e) {
+				// Sometimes Firefox will deny permission to access event properties for some reason. Ignore.
+			}
+		};
+		if (window2.addEventListener) {
+			window2.addEventListener("mousemove", onMouseMoveListener_1, false);
+		} else if (window2.attachEvent) {
+			window2.attachEvent("onmousemove", onMouseMoveListener_1);
+		}
+	}
+
+	function rng_get_byte() {
+		if (rng_state == null) {
+			rng_state = prng_newstate();
+			// At this point, we may not have collected enough entropy.  If not, fall back to Math.random
+			while (rng_pptr < rng_psize) {
+				var random = Math.floor(65536 * Math.random());
+				rng_pool[rng_pptr++] = random & 255;
+			}
+			rng_state.init(rng_pool);
+			for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {
+				rng_pool[rng_pptr] = 0;
+			}
+			rng_pptr = 0;
+		}
+		// TODO: allow reseeding after first request
+		return rng_state.next();
+	}
+	var SecureRandom = /** @class */ (function() {
+		function SecureRandom() {}
+		SecureRandom.prototype.nextBytes = function(ba) {
+			for (var i = 0; i < ba.length; ++i) {
+				ba[i] = rng_get_byte();
+			}
+		};
+		return SecureRandom;
+	}());
+
+	// Depends on jsbn.js and rng.js
+	// function linebrk(s,n) {
+	//   var ret = "";
+	//   var i = 0;
+	//   while(i + n < s.length) {
+	//     ret += s.substring(i,i+n) + "\n";
+	//     i += n;
+	//   }
+	//   return ret + s.substring(i,s.length);
+	// }
+	// function byte2Hex(b) {
+	//   if(b < 0x10)
+	//     return "0" + b.toString(16);
+	//   else
+	//     return b.toString(16);
+	// }
+	function pkcs1pad1(s, n) {
+		if (n < s.length + 22) {
+			console.error("Message too long for RSA");
+			return null;
+		}
+		var len = n - s.length - 6;
+		var filler = "";
+		for (var f = 0; f < len; f += 2) {
+			filler += "ff";
+		}
+		var m = "0001" + filler + "00" + s;
+		return parseBigInt(m, 16);
+	}
+	// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint
+	function pkcs1pad2(s, n) {
+		if (n < s.length + 11) { // TODO: fix for utf-8
+			console.error("Message too long for RSA");
+			return null;
+		}
+		var ba = [];
+		var i = s.length - 1;
+		while (i >= 0 && n > 0) {
+			var c = s.charCodeAt(i--);
+			if (c < 128) { // encode using utf-8
+				ba[--n] = c;
+			} else if ((c > 127) && (c < 2048)) {
+				ba[--n] = (c & 63) | 128;
+				ba[--n] = (c >> 6) | 192;
+			} else {
+				ba[--n] = (c & 63) | 128;
+				ba[--n] = ((c >> 6) & 63) | 128;
+				ba[--n] = (c >> 12) | 224;
+			}
+		}
+		ba[--n] = 0;
+		var rng = new SecureRandom();
+		var x = [];
+		while (n > 2) { // random non-zero pad
+			x[0] = 0;
+			while (x[0] == 0) {
+				rng.nextBytes(x);
+			}
+			ba[--n] = x[0];
+		}
+		ba[--n] = 2;
+		ba[--n] = 0;
+		return new BigInteger(ba);
+	}
+	// "empty" RSA key constructor
+	var RSAKey = /** @class */ (function() {
+		function RSAKey() {
+			this.n = null;
+			this.e = 0;
+			this.d = null;
+			this.p = null;
+			this.q = null;
+			this.dmp1 = null;
+			this.dmq1 = null;
+			this.coeff = null;
+		}
+		//#region PROTECTED
+		// protected
+		// RSAKey.prototype.doPublic = RSADoPublic;
+		// Perform raw public operation on "x": return x^e (mod n)
+		RSAKey.prototype.doPublic = function(x) {
+			return x.modPowInt(this.e, this.n);
+		};
+		// RSAKey.prototype.doPrivate = RSADoPrivate;
+		// Perform raw private operation on "x": return x^d (mod n)
+		RSAKey.prototype.doPrivate = function(x) {
+			console.log('p',this.p,'q',this.q)
+			console.log('d',this.d,'n',this.n)
+			if (this.p == null || this.q == null) {
+				
+				return x.modPow(this.d, this.n);
+				
+			}
+			// TODO: re-calculate any missing CRT params
+			var xp = x.mod(this.p).modPow(this.dmp1, this.p);
+			var xq = x.mod(this.q).modPow(this.dmq1, this.q);
+			while (xp.compareTo(xq) < 0) {
+				xp = xp.add(this.p);
+			}
+			return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);
+		};
+		//#endregion PROTECTED
+		//#region PUBLIC
+		// RSAKey.prototype.setPublic = RSASetPublic;
+		// Set the public key fields N and e from hex strings
+		RSAKey.prototype.setPublic = function(N, E) {
+			if (N != null && E != null && N.length > 0 && E.length > 0) {
+				this.n = parseBigInt(N, 16);
+				this.e = parseInt(E, 16);
+			} else {
+				console.error("Invalid RSA public key");
+			}
+		};
+		// RSAKey.prototype.encrypt = RSAEncrypt;
+		// Return the PKCS#1 RSA encryption of "text" as an even-length hex string
+		RSAKey.prototype.encrypt = function(text) {
+			var m = pkcs1pad2(text, (this.n.bitLength() + 7) >> 3);
+			if (m == null) {
+				return null;
+			}
+			var c = this.doPublic(m);
+			if (c == null) {
+				return null;
+			}
+			var h = c.toString(16);
+			if ((h.length & 1) == 0) {
+				return h;
+			} else {
+				return "0" + h;
+			}
+		};
+		// RSAKey.prototype.setPrivate = RSASetPrivate;
+		// Set the private key fields N, e, and d from hex strings
+		RSAKey.prototype.setPrivate = function(N, E, D) {
+			if (N != null && E != null && N.length > 0 && E.length > 0) {
+				this.n = parseBigInt(N, 16);
+				this.e = parseInt(E, 16);
+				this.d = parseBigInt(D, 16);
+			} else {
+				console.error("Invalid RSA private key");
+			}
+		};
+		// RSAKey.prototype.setPrivateEx = RSASetPrivateEx;
+		// Set the private key fields N, e, d and CRT params from hex strings
+		RSAKey.prototype.setPrivateEx = function(N, E, D, P, Q, DP, DQ, C) {
+			if (N != null && E != null && N.length > 0 && E.length > 0) {
+				this.n = parseBigInt(N, 16);
+				this.e = parseInt(E, 16);
+				this.d = parseBigInt(D, 16);
+				this.p = parseBigInt(P, 16);
+				this.q = parseBigInt(Q, 16);
+				this.dmp1 = parseBigInt(DP, 16);
+				this.dmq1 = parseBigInt(DQ, 16);
+				this.coeff = parseBigInt(C, 16);
+			} else {
+				console.error("Invalid RSA private key");
+			}
+		};
+		// RSAKey.prototype.generate = RSAGenerate;
+		// Generate a new random private key B bits long, using public expt E
+		RSAKey.prototype.generate = function(B, E) {
+			var rng = new SecureRandom();
+			var qs = B >> 1;
+			this.e = parseInt(E, 16);
+			var ee = new BigInteger(E, 16);
+			for (;;) {
+				for (;;) {
+					this.p = new BigInteger(B - qs, 1, rng);
+					if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) ==
+						0 && this.p.isProbablePrime(10)) {
+						break;
+					}
+				}
+				for (;;) {
+					this.q = new BigInteger(qs, 1, rng);
+					if (this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) ==
+						0 && this.q.isProbablePrime(10)) {
+						break;
+					}
+				}
+				if (this.p.compareTo(this.q) <= 0) {
+					var t = this.p;
+					this.p = this.q;
+					this.q = t;
+				}
+				var p1 = this.p.subtract(BigInteger.ONE);
+				var q1 = this.q.subtract(BigInteger.ONE);
+				var phi = p1.multiply(q1);
+				if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {
+					this.n = this.p.multiply(this.q);
+					this.d = ee.modInverse(phi);
+					this.dmp1 = this.d.mod(p1);
+					this.dmq1 = this.d.mod(q1);
+					this.coeff = this.q.modInverse(this.p);
+					break;
+				}
+			}
+		};
+		// RSAKey.prototype.decrypt = RSADecrypt;
+		// Return the PKCS#1 RSA decryption of "ctext".
+		// "ctext" is an even-length hex string and the output is a plain string.
+		RSAKey.prototype.decrypt = function(ctext) {
+			var c = parseBigInt(ctext, 16);
+			var m = this.doPrivate(c);
+			if (m == null) {
+				return null;
+			}
+			return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);
+		};
+		// Generate a new random private key B bits long, using public expt E
+		RSAKey.prototype.generateAsync = function(B, E, callback) {
+			var rng = new SecureRandom();
+			var qs = B >> 1;
+			this.e = parseInt(E, 16);
+			var ee = new BigInteger(E, 16);
+			var rsa = this;
+			// These functions have non-descript names because they were originally for(;;) loops.
+			// I don't know about cryptography to give them better names than loop1-4.
+			var loop1 = function() {
+				var loop4 = function() {
+					if (rsa.p.compareTo(rsa.q) <= 0) {
+						var t = rsa.p;
+						rsa.p = rsa.q;
+						rsa.q = t;
+					}
+					var p1 = rsa.p.subtract(BigInteger.ONE);
+					var q1 = rsa.q.subtract(BigInteger.ONE);
+					var phi = p1.multiply(q1);
+					if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {
+						rsa.n = rsa.p.multiply(rsa.q);
+						rsa.d = ee.modInverse(phi);
+						rsa.dmp1 = rsa.d.mod(p1);
+						rsa.dmq1 = rsa.d.mod(q1);
+						rsa.coeff = rsa.q.modInverse(rsa.p);
+						setTimeout(function() {
+							callback();
+						}, 0); // escape
+					} else {
+						setTimeout(loop1, 0);
+					}
+				};
+				var loop3 = function() {
+					rsa.q = nbi();
+					rsa.q.fromNumberAsync(qs, 1, rng, function() {
+						rsa.q.subtract(BigInteger.ONE).gcda(ee, function(r) {
+							if (r.compareTo(BigInteger.ONE) == 0 && rsa
+								.q.isProbablePrime(10)) {
+								setTimeout(loop4, 0);
+							} else {
+								setTimeout(loop3, 0);
+							}
+						});
+					});
+				};
+				var loop2 = function() {
+					rsa.p = nbi();
+					rsa.p.fromNumberAsync(B - qs, 1, rng, function() {
+						rsa.p.subtract(BigInteger.ONE).gcda(ee, function(r) {
+							if (r.compareTo(BigInteger.ONE) == 0 && rsa
+								.p.isProbablePrime(10)) {
+								setTimeout(loop3, 0);
+							} else {
+								setTimeout(loop2, 0);
+							}
+						});
+					});
+				};
+				setTimeout(loop2, 0);
+			};
+			setTimeout(loop1, 0);
+		};
+		RSAKey.prototype.sign = function(text, digestMethod, digestName) {
+			console.log(digestMethod)
+			var header = getDigestHeader(digestName);
+			var digest = header + digestMethod(text).toString();
+			var m = pkcs1pad1(digest, this.n.bitLength() / 4);
+			if (m == null) {
+				return null;
+			}
+			console.log("m",m.toString())
+			var c = this.doPrivate(m);
+			if (c == null) {
+				return null;
+			}
+			var h = c.toString(16);
+			if ((h.length & 1) == 0) {
+				return h;
+			} else {
+				return "0" + h;
+			}
+		};
+		RSAKey.prototype.verify = function(text, signature, digestMethod) {
+			var c = parseBigInt(signature, 16);
+			var m = this.doPublic(c);
+			if (m == null) {
+				return null;
+			}
+			var unpadded = m.toString(16).replace(/^1f+00/, "");
+			var digest = removeDigestHeader(unpadded);
+			return digest == digestMethod(text).toString();
+		};
+		return RSAKey;
+	}());
+	// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext
+	function pkcs1unpad2(d, n) {
+		var b = d.toByteArray();
+		var i = 0;
+		while (i < b.length && b[i] == 0) {
+			++i;
+		}
+		if (b.length - i != n - 1 || b[i] != 2) {
+			return null;
+		}
+		++i;
+		while (b[i] != 0) {
+			if (++i >= b.length) {
+				return null;
+			}
+		}
+		var ret = "";
+		while (++i < b.length) {
+			var c = b[i] & 255;
+			if (c < 128) { // utf-8 decode
+				ret += String.fromCharCode(c);
+			} else if ((c > 191) && (c < 224)) {
+				ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));
+				++i;
+			} else {
+				ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));
+				i += 2;
+			}
+		}
+		return ret;
+	}
+	// https://tools.ietf.org/html/rfc3447#page-43
+	var DIGEST_HEADERS = {
+		md2: "3020300c06082a864886f70d020205000410",
+		md5: "3020300c06082a864886f70d020505000410",
+		sha1: "3021300906052b0e03021a05000414",
+		sha224: "302d300d06096086480165030402040500041c",
+		sha256: "3031300d060960864801650304020105000420",
+		sha384: "3041300d060960864801650304020205000430",
+		sha512: "3051300d060960864801650304020305000440",
+		ripemd160: "3021300906052b2403020105000414",
+	};
+
+	function getDigestHeader(name) {
+		return DIGEST_HEADERS[name] || "";
+	}
+
+	function removeDigestHeader(str) {
+		for (var name_1 in DIGEST_HEADERS) {
+			if (DIGEST_HEADERS.hasOwnProperty(name_1)) {
+				var header = DIGEST_HEADERS[name_1];
+				var len = header.length;
+				if (str.substr(0, len) == header) {
+					return str.substr(len);
+				}
+			}
+		}
+		return str;
+	}
+	// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string
+	// function RSAEncryptB64(text) {
+	//  var h = this.encrypt(text);
+	//  if(h) return hex2b64(h); else return null;
+	// }
+	// public
+	// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;
+
+	/*!
+	Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+	Code licensed under the BSD License:
+	http://developer.yahoo.com/yui/license.html
+	version: 2.9.0
+	*/
+	var YAHOO = {};
+	YAHOO.lang = {
+		/**
+		 * Utility to set up the prototype, constructor and superclass properties to
+		 * support an inheritance strategy that can chain constructors and methods.
+		 * Static members will not be inherited.
+		 *
+		 * @method extend
+		 * @static
+		 * @param {Function} subc   the object to modify
+		 * @param {Function} superc the object to inherit
+		 * @param {Object} overrides  additional properties/methods to add to the
+		 *                              subclass prototype.  These will override the
+		 *                              matching items obtained from the superclass
+		 *                              if present.
+		 */
+		extend: function(subc, superc, overrides) {
+			if (!superc || !subc) {
+				throw new Error("YAHOO.lang.extend failed, please check that " +
+					"all dependencies are included.");
+			}
+
+			var F = function() {};
+			F.prototype = superc.prototype;
+			subc.prototype = new F();
+			subc.prototype.constructor = subc;
+			subc.superclass = superc.prototype;
+
+			if (superc.prototype.constructor == Object.prototype.constructor) {
+				superc.prototype.constructor = superc;
+			}
+
+			if (overrides) {
+				var i;
+				for (i in overrides) {
+					subc.prototype[i] = overrides[i];
+				}
+
+				/*
+				 * IE will not enumerate native functions in a derived object even if the
+				 * function was overridden.  This is a workaround for specific functions
+				 * we care about on the Object prototype.
+				 * @property _IEEnumFix
+				 * @param {Function} r  the object to receive the augmentation
+				 * @param {Function} s  the object that supplies the properties to augment
+				 * @static
+				 * @private
+				 */
+				var _IEEnumFix = function() {},
+					ADD = ["toString", "valueOf"];
+				try {
+					if (/MSIE/.test(navigator2.userAgent)) {
+						_IEEnumFix = function(r, s) {
+							for (i = 0; i < ADD.length; i = i + 1) {
+								var fname = ADD[i],
+									f = s[fname];
+								if (typeof f === 'function' && f != Object.prototype[fname]) {
+									r[fname] = f;
+								}
+							}
+						};
+					}
+				} catch (ex) {}
+				_IEEnumFix(subc.prototype, overrides);
+			}
+		}
+	};
+
+	/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
+	 */
+
+	/**
+	 * @fileOverview
+	 * @name asn1-1.0.js
+	 * @author Kenji Urushima kenji.urushima@gmail.com
+	 * @version asn1 1.0.13 (2017-Jun-02)
+	 * @since jsrsasign 2.1
+	 * @license <a href="https://kjur.github.io/jsrsasign/license/">MIT License</a>
+	 */
+
+	/**
+	 * kjur's class library name space
+	 * <p>
+	 * This name space provides following name spaces:
+	 * <ul>
+	 * <li>{@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder</li>
+	 * <li>{@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL</li>
+	 * <li>{@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature
+	 * class and utilities</li>
+	 * </ul>
+	 * </p>
+	 * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.
+	 * @name KJUR
+	 * @namespace kjur's class library name space
+	 */
+	var KJUR = {};
+
+	/**
+	 * kjur's ASN.1 class library name space
+	 * <p>
+	 * This is ITU-T X.690 ASN.1 DER encoder class library and
+	 * class structure and methods is very similar to
+	 * org.bouncycastle.asn1 package of
+	 * well known BouncyCaslte Cryptography Library.
+	 * <h4>PROVIDING ASN.1 PRIMITIVES</h4>
+	 * Here are ASN.1 DER primitive classes.
+	 * <ul>
+	 * <li>0x01 {@link KJUR.asn1.DERBoolean}</li>
+	 * <li>0x02 {@link KJUR.asn1.DERInteger}</li>
+	 * <li>0x03 {@link KJUR.asn1.DERBitString}</li>
+	 * <li>0x04 {@link KJUR.asn1.DEROctetString}</li>
+	 * <li>0x05 {@link KJUR.asn1.DERNull}</li>
+	 * <li>0x06 {@link KJUR.asn1.DERObjectIdentifier}</li>
+	 * <li>0x0a {@link KJUR.asn1.DEREnumerated}</li>
+	 * <li>0x0c {@link KJUR.asn1.DERUTF8String}</li>
+	 * <li>0x12 {@link KJUR.asn1.DERNumericString}</li>
+	 * <li>0x13 {@link KJUR.asn1.DERPrintableString}</li>
+	 * <li>0x14 {@link KJUR.asn1.DERTeletexString}</li>
+	 * <li>0x16 {@link KJUR.asn1.DERIA5String}</li>
+	 * <li>0x17 {@link KJUR.asn1.DERUTCTime}</li>
+	 * <li>0x18 {@link KJUR.asn1.DERGeneralizedTime}</li>
+	 * <li>0x30 {@link KJUR.asn1.DERSequence}</li>
+	 * <li>0x31 {@link KJUR.asn1.DERSet}</li>
+	 * </ul>
+	 * <h4>OTHER ASN.1 CLASSES</h4>
+	 * <ul>
+	 * <li>{@link KJUR.asn1.ASN1Object}</li>
+	 * <li>{@link KJUR.asn1.DERAbstractString}</li>
+	 * <li>{@link KJUR.asn1.DERAbstractTime}</li>
+	 * <li>{@link KJUR.asn1.DERAbstractStructured}</li>
+	 * <li>{@link KJUR.asn1.DERTaggedObject}</li>
+	 * </ul>
+	 * <h4>SUB NAME SPACES</h4>
+	 * <ul>
+	 * <li>{@link KJUR.asn1.cades} - CAdES long term signature format</li>
+	 * <li>{@link KJUR.asn1.cms} - Cryptographic Message Syntax</li>
+	 * <li>{@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)</li>
+	 * <li>{@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format</li>
+	 * <li>{@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL</li>
+	 * </ul>
+	 * </p>
+	 * NOTE: Please ignore method summary and document of this namespace.
+	 * This caused by a bug of jsdoc2.
+	 * @name KJUR.asn1
+	 * @namespace
+	 */
+	if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) KJUR.asn1 = {};
+
+	/**
+	 * ASN1 utilities class
+	 * @name KJUR.asn1.ASN1Util
+	 * @class ASN1 utilities class
+	 * @since asn1 1.0.2
+	 */
+	KJUR.asn1.ASN1Util = new function() {
+		this.integerToByteHex = function(i) {
+			var h = i.toString(16);
+			if ((h.length % 2) == 1) h = '0' + h;
+			return h;
+		};
+		this.bigIntToMinTwosComplementsHex = function(bigIntegerValue) {
+			var h = bigIntegerValue.toString(16);
+			if (h.substr(0, 1) != '-') {
+				if (h.length % 2 == 1) {
+					h = '0' + h;
+				} else {
+					if (!h.match(/^[0-7]/)) {
+						h = '00' + h;
+					}
+				}
+			} else {
+				var hPos = h.substr(1);
+				var xorLen = hPos.length;
+				if (xorLen % 2 == 1) {
+					xorLen += 1;
+				} else {
+					if (!h.match(/^[0-7]/)) {
+						xorLen += 2;
+					}
+				}
+				var hMask = '';
+				for (var i = 0; i < xorLen; i++) {
+					hMask += 'f';
+				}
+				var biMask = new BigInteger(hMask, 16);
+				var biNeg = biMask.xor(bigIntegerValue).add(BigInteger.ONE);
+				h = biNeg.toString(16).replace(/^-/, '');
+			}
+			return h;
+		};
+		/**
+		 * get PEM string from hexadecimal data and header string
+		 * @name getPEMStringFromHex
+		 * @memberOf KJUR.asn1.ASN1Util
+		 * @function
+		 * @param {String} dataHex hexadecimal string of PEM body
+		 * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')
+		 * @return {String} PEM formatted string of input data
+		 * @description
+		 * This method converts a hexadecimal string to a PEM string with
+		 * a specified header. Its line break will be CRLF("\r\n").
+		 * @example
+		 * var pem  = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');
+		 * // value of pem will be:
+		 * -----BEGIN PRIVATE KEY-----
+		 * YWFh
+		 * -----END PRIVATE KEY-----
+		 */
+		this.getPEMStringFromHex = function(dataHex, pemHeader) {
+			return hextopem(dataHex, pemHeader);
+		};
+
+		/**
+		 * generate ASN1Object specifed by JSON parameters
+		 * @name newObject
+		 * @memberOf KJUR.asn1.ASN1Util
+		 * @function
+		 * @param {Array} param JSON parameter to generate ASN1Object
+		 * @return {KJUR.asn1.ASN1Object} generated object
+		 * @since asn1 1.0.3
+		 * @description
+		 * generate any ASN1Object specified by JSON param
+		 * including ASN.1 primitive or structured.
+		 * Generally 'param' can be described as follows:
+		 * <blockquote>
+		 * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}
+		 * </blockquote>
+		 * 'TYPE-OF-ASN1OBJ' can be one of following symbols:
+		 * <ul>
+		 * <li>'bool' - DERBoolean</li>
+		 * <li>'int' - DERInteger</li>
+		 * <li>'bitstr' - DERBitString</li>
+		 * <li>'octstr' - DEROctetString</li>
+		 * <li>'null' - DERNull</li>
+		 * <li>'oid' - DERObjectIdentifier</li>
+		 * <li>'enum' - DEREnumerated</li>
+		 * <li>'utf8str' - DERUTF8String</li>
+		 * <li>'numstr' - DERNumericString</li>
+		 * <li>'prnstr' - DERPrintableString</li>
+		 * <li>'telstr' - DERTeletexString</li>
+		 * <li>'ia5str' - DERIA5String</li>
+		 * <li>'utctime' - DERUTCTime</li>
+		 * <li>'gentime' - DERGeneralizedTime</li>
+		 * <li>'seq' - DERSequence</li>
+		 * <li>'set' - DERSet</li>
+		 * <li>'tag' - DERTaggedObject</li>
+		 * </ul>
+		 * @example
+		 * newObject({'prnstr': 'aaa'});
+		 * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})
+		 * // ASN.1 Tagged Object
+		 * newObject({'tag': {'tag': 'a1',
+		 *                    'explicit': true,
+		 *                    'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});
+		 * // more simple representation of ASN.1 Tagged Object
+		 * newObject({'tag': ['a1',
+		 *                    true,
+		 *                    {'seq': [
+		 *                      {'int': 3},
+		 *                      {'prnstr': 'aaa'}]}
+		 *                   ]});
+		 */
+		this.newObject = function(param) {
+			var _KJUR = KJUR,
+				_KJUR_asn1 = _KJUR.asn1,
+				_DERBoolean = _KJUR_asn1.DERBoolean,
+				_DERInteger = _KJUR_asn1.DERInteger,
+				_DERBitString = _KJUR_asn1.DERBitString,
+				_DEROctetString = _KJUR_asn1.DEROctetString,
+				_DERNull = _KJUR_asn1.DERNull,
+				_DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier,
+				_DEREnumerated = _KJUR_asn1.DEREnumerated,
+				_DERUTF8String = _KJUR_asn1.DERUTF8String,
+				_DERNumericString = _KJUR_asn1.DERNumericString,
+				_DERPrintableString = _KJUR_asn1.DERPrintableString,
+				_DERTeletexString = _KJUR_asn1.DERTeletexString,
+				_DERIA5String = _KJUR_asn1.DERIA5String,
+				_DERUTCTime = _KJUR_asn1.DERUTCTime,
+				_DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime,
+				_DERSequence = _KJUR_asn1.DERSequence,
+				_DERSet = _KJUR_asn1.DERSet,
+				_DERTaggedObject = _KJUR_asn1.DERTaggedObject,
+				_newObject = _KJUR_asn1.ASN1Util.newObject;
+
+			var keys = Object.keys(param);
+			if (keys.length != 1)
+				throw "key of param shall be only one.";
+			var key = keys[0];
+
+			if (":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:"
+				.indexOf(":" + key + ":") == -1)
+				throw "undefined key: " + key;
+
+			if (key == "bool") return new _DERBoolean(param[key]);
+			if (key == "int") return new _DERInteger(param[key]);
+			if (key == "bitstr") return new _DERBitString(param[key]);
+			if (key == "octstr") return new _DEROctetString(param[key]);
+			if (key == "null") return new _DERNull(param[key]);
+			if (key == "oid") return new _DERObjectIdentifier(param[key]);
+			if (key == "enum") return new _DEREnumerated(param[key]);
+			if (key == "utf8str") return new _DERUTF8String(param[key]);
+			if (key == "numstr") return new _DERNumericString(param[key]);
+			if (key == "prnstr") return new _DERPrintableString(param[key]);
+			if (key == "telstr") return new _DERTeletexString(param[key]);
+			if (key == "ia5str") return new _DERIA5String(param[key]);
+			if (key == "utctime") return new _DERUTCTime(param[key]);
+			if (key == "gentime") return new _DERGeneralizedTime(param[key]);
+
+			if (key == "seq") {
+				var paramList = param[key];
+				var a = [];
+				for (var i = 0; i < paramList.length; i++) {
+					var asn1Obj = _newObject(paramList[i]);
+					a.push(asn1Obj);
+				}
+				return new _DERSequence({
+					'array': a
+				});
+			}
+
+			if (key == "set") {
+				var paramList = param[key];
+				var a = [];
+				for (var i = 0; i < paramList.length; i++) {
+					var asn1Obj = _newObject(paramList[i]);
+					a.push(asn1Obj);
+				}
+				return new _DERSet({
+					'array': a
+				});
+			}
+
+			if (key == "tag") {
+				var tagParam = param[key];
+				if (Object.prototype.toString.call(tagParam) === '[object Array]' &&
+					tagParam.length == 3) {
+					var obj = _newObject(tagParam[2]);
+					return new _DERTaggedObject({
+						tag: tagParam[0],
+						explicit: tagParam[1],
+						obj: obj
+					});
+				} else {
+					var newParam = {};
+					if (tagParam.explicit !== undefined)
+						newParam.explicit = tagParam.explicit;
+					if (tagParam.tag !== undefined)
+						newParam.tag = tagParam.tag;
+					if (tagParam.obj === undefined)
+						throw "obj shall be specified for 'tag'.";
+					newParam.obj = _newObject(tagParam.obj);
+					return new _DERTaggedObject(newParam);
+				}
+			}
+		};
+
+		/**
+		 * get encoded hexadecimal string of ASN1Object specifed by JSON parameters
+		 * @name jsonToASN1HEX
+		 * @memberOf KJUR.asn1.ASN1Util
+		 * @function
+		 * @param {Array} param JSON parameter to generate ASN1Object
+		 * @return hexadecimal string of ASN1Object
+		 * @since asn1 1.0.4
+		 * @description
+		 * As for ASN.1 object representation of JSON object,
+		 * please see {@link newObject}.
+		 * @example
+		 * jsonToASN1HEX({'prnstr': 'aaa'});
+		 */
+		this.jsonToASN1HEX = function(param) {
+			var asn1Obj = this.newObject(param);
+			return asn1Obj.getEncodedHex();
+		};
+	};
+
+	/**
+	 * get dot noted oid number string from hexadecimal value of OID
+	 * @name oidHexToInt
+	 * @memberOf KJUR.asn1.ASN1Util
+	 * @function
+	 * @param {String} hex hexadecimal value of object identifier
+	 * @return {String} dot noted string of object identifier
+	 * @since jsrsasign 4.8.3 asn1 1.0.7
+	 * @description
+	 * This static method converts from hexadecimal string representation of
+	 * ASN.1 value of object identifier to oid number string.
+	 * @example
+	 * KJUR.asn1.ASN1Util.oidHexToInt('550406') &rarr; "2.5.4.6"
+	 */
+	KJUR.asn1.ASN1Util.oidHexToInt = function(hex) {
+		var s = "";
+		var i01 = parseInt(hex.substr(0, 2), 16);
+		var i0 = Math.floor(i01 / 40);
+		var i1 = i01 % 40;
+		var s = i0 + "." + i1;
+
+		var binbuf = "";
+		for (var i = 2; i < hex.length; i += 2) {
+			var value = parseInt(hex.substr(i, 2), 16);
+			var bin = ("00000000" + value.toString(2)).slice(-8);
+			binbuf = binbuf + bin.substr(1, 7);
+			if (bin.substr(0, 1) == "0") {
+				var bi = new BigInteger(binbuf, 2);
+				s = s + "." + bi.toString(10);
+				binbuf = "";
+			}
+		}
+		return s;
+	};
+
+	/**
+	 * get hexadecimal value of object identifier from dot noted oid value
+	 * @name oidIntToHex
+	 * @memberOf KJUR.asn1.ASN1Util
+	 * @function
+	 * @param {String} oidString dot noted string of object identifier
+	 * @return {String} hexadecimal value of object identifier
+	 * @since jsrsasign 4.8.3 asn1 1.0.7
+	 * @description
+	 * This static method converts from object identifier value string.
+	 * to hexadecimal string representation of it.
+	 * @example
+	 * KJUR.asn1.ASN1Util.oidIntToHex("2.5.4.6") &rarr; "550406"
+	 */
+	KJUR.asn1.ASN1Util.oidIntToHex = function(oidString) {
+		var itox = function(i) {
+			var h = i.toString(16);
+			if (h.length == 1) h = '0' + h;
+			return h;
+		};
+
+		var roidtox = function(roid) {
+			var h = '';
+			var bi = new BigInteger(roid, 10);
+			var b = bi.toString(2);
+			var padLen = 7 - b.length % 7;
+			if (padLen == 7) padLen = 0;
+			var bPad = '';
+			for (var i = 0; i < padLen; i++) bPad += '0';
+			b = bPad + b;
+			for (var i = 0; i < b.length - 1; i += 7) {
+				var b8 = b.substr(i, 7);
+				if (i != b.length - 7) b8 = '1' + b8;
+				h += itox(parseInt(b8, 2));
+			}
+			return h;
+		};
+
+		if (!oidString.match(/^[0-9.]+$/)) {
+			throw "malformed oid string: " + oidString;
+		}
+		var h = '';
+		var a = oidString.split('.');
+		var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);
+		h += itox(i0);
+		a.splice(0, 2);
+		for (var i = 0; i < a.length; i++) {
+			h += roidtox(a[i]);
+		}
+		return h;
+	};
+
+
+	// ********************************************************************
+	//  Abstract ASN.1 Classes
+	// ********************************************************************
+
+	// ********************************************************************
+
+	/**
+	 * base class for ASN.1 DER encoder object
+	 * @name KJUR.asn1.ASN1Object
+	 * @class base class for ASN.1 DER encoder object
+	 * @property {Boolean} isModified flag whether internal data was changed
+	 * @property {String} hTLV hexadecimal string of ASN.1 TLV
+	 * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)
+	 * @property {String} hL hexadecimal string of ASN.1 TLV length(L)
+	 * @property {String} hV hexadecimal string of ASN.1 TLV value(V)
+	 * @description
+	 */
+	KJUR.asn1.ASN1Object = function() {
+		var hV = '';
+
+		/**
+		 * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)
+		 * @name getLengthHexFromValue
+		 * @memberOf KJUR.asn1.ASN1Object#
+		 * @function
+		 * @return {String} hexadecimal string of ASN.1 TLV length(L)
+		 */
+		this.getLengthHexFromValue = function() {
+			if (typeof this.hV == "undefined" || this.hV == null) {
+				throw "this.hV is null or undefined.";
+			}
+			if (this.hV.length % 2 == 1) {
+				throw "value hex must be even length: n=" + hV.length + ",v=" + this.hV;
+			}
+			var n = this.hV.length / 2;
+			var hN = n.toString(16);
+			if (hN.length % 2 == 1) {
+				hN = "0" + hN;
+			}
+			if (n < 128) {
+				return hN;
+			} else {
+				var hNlen = hN.length / 2;
+				if (hNlen > 15) {
+					throw "ASN.1 length too long to represent by 8x: n = " + n.toString(16);
+				}
+				var head = 128 + hNlen;
+				return head.toString(16) + hN;
+			}
+		};
+
+		/**
+		 * get hexadecimal string of ASN.1 TLV bytes
+		 * @name getEncodedHex
+		 * @memberOf KJUR.asn1.ASN1Object#
+		 * @function
+		 * @return {String} hexadecimal string of ASN.1 TLV
+		 */
+		this.getEncodedHex = function() {
+			if (this.hTLV == null || this.isModified) {
+				this.hV = this.getFreshValueHex();
+				this.hL = this.getLengthHexFromValue();
+				this.hTLV = this.hT + this.hL + this.hV;
+				this.isModified = false;
+				//alert("first time: " + this.hTLV);
+			}
+			return this.hTLV;
+		};
+
+		/**
+		 * get hexadecimal string of ASN.1 TLV value(V) bytes
+		 * @name getValueHex
+		 * @memberOf KJUR.asn1.ASN1Object#
+		 * @function
+		 * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes
+		 */
+		this.getValueHex = function() {
+			this.getEncodedHex();
+			return this.hV;
+		};
+
+		this.getFreshValueHex = function() {
+			return '';
+		};
+	};
+
+	// == BEGIN DERAbstractString ================================================
+	/**
+	 * base class for ASN.1 DER string classes
+	 * @name KJUR.asn1.DERAbstractString
+	 * @class base class for ASN.1 DER string classes
+	 * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+	 * @property {String} s internal string of value
+	 * @extends KJUR.asn1.ASN1Object
+	 * @description
+	 * <br/>
+	 * As for argument 'params' for constructor, you can specify one of
+	 * following properties:
+	 * <ul>
+	 * <li>str - specify initial ASN.1 value(V) by a string</li>
+	 * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>
+	 * </ul>
+	 * NOTE: 'params' can be omitted.
+	 */
+	KJUR.asn1.DERAbstractString = function(params) {
+		KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
+
+		/**
+		 * get string value of this string object
+		 * @name getString
+		 * @memberOf KJUR.asn1.DERAbstractString#
+		 * @function
+		 * @return {String} string value of this string object
+		 */
+		this.getString = function() {
+			return this.s;
+		};
+
+		/**
+		 * set value by a string
+		 * @name setString
+		 * @memberOf KJUR.asn1.DERAbstractString#
+		 * @function
+		 * @param {String} newS value by a string to set
+		 */
+		this.setString = function(newS) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.s = newS;
+			this.hV = stohex(this.s);
+		};
+
+		/**
+		 * set value by a hexadecimal string
+		 * @name setStringHex
+		 * @memberOf KJUR.asn1.DERAbstractString#
+		 * @function
+		 * @param {String} newHexString value by a hexadecimal string to set
+		 */
+		this.setStringHex = function(newHexString) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.s = null;
+			this.hV = newHexString;
+		};
+
+		this.getFreshValueHex = function() {
+			return this.hV;
+		};
+
+		if (typeof params != "undefined") {
+			if (typeof params == "string") {
+				this.setString(params);
+			} else if (typeof params['str'] != "undefined") {
+				this.setString(params['str']);
+			} else if (typeof params['hex'] != "undefined") {
+				this.setStringHex(params['hex']);
+			}
+		}
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);
+	// == END   DERAbstractString ================================================
+
+	// == BEGIN DERAbstractTime ==================================================
+	/**
+	 * base class for ASN.1 DER Generalized/UTCTime class
+	 * @name KJUR.asn1.DERAbstractTime
+	 * @class base class for ASN.1 DER Generalized/UTCTime class
+	 * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})
+	 * @extends KJUR.asn1.ASN1Object
+	 * @description
+	 * @see KJUR.asn1.ASN1Object - superclass
+	 */
+	KJUR.asn1.DERAbstractTime = function(params) {
+		KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);
+
+		// --- PRIVATE METHODS --------------------
+		this.localDateToUTC = function(d) {
+			utc = d.getTime() + (d.getTimezoneOffset() * 60000);
+			var utcDate = new Date(utc);
+			return utcDate;
+		};
+
+		/*
+		 * format date string by Data object
+		 * @name formatDate
+		 * @memberOf KJUR.asn1.AbstractTime;
+		 * @param {Date} dateObject
+		 * @param {string} type 'utc' or 'gen'
+		 * @param {boolean} withMillis flag for with millisections or not
+		 * @description
+		 * 'withMillis' flag is supported from asn1 1.0.6.
+		 */
+		this.formatDate = function(dateObject, type, withMillis) {
+			var pad = this.zeroPadding;
+			var d = this.localDateToUTC(dateObject);
+			var year = String(d.getFullYear());
+			if (type == 'utc') year = year.substr(2, 2);
+			var month = pad(String(d.getMonth() + 1), 2);
+			var day = pad(String(d.getDate()), 2);
+			var hour = pad(String(d.getHours()), 2);
+			var min = pad(String(d.getMinutes()), 2);
+			var sec = pad(String(d.getSeconds()), 2);
+			var s = year + month + day + hour + min + sec;
+			if (withMillis === true) {
+				var millis = d.getMilliseconds();
+				if (millis != 0) {
+					var sMillis = pad(String(millis), 3);
+					sMillis = sMillis.replace(/[0]+$/, "");
+					s = s + "." + sMillis;
+				}
+			}
+			return s + "Z";
+		};
+
+		this.zeroPadding = function(s, len) {
+			if (s.length >= len) return s;
+			return new Array(len - s.length + 1).join('0') + s;
+		};
+
+		// --- PUBLIC METHODS --------------------
+		/**
+		 * get string value of this string object
+		 * @name getString
+		 * @memberOf KJUR.asn1.DERAbstractTime#
+		 * @function
+		 * @return {String} string value of this time object
+		 */
+		this.getString = function() {
+			return this.s;
+		};
+
+		/**
+		 * set value by a string
+		 * @name setString
+		 * @memberOf KJUR.asn1.DERAbstractTime#
+		 * @function
+		 * @param {String} newS value by a string to set such like "130430235959Z"
+		 */
+		this.setString = function(newS) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.s = newS;
+			this.hV = stohex(newS);
+		};
+
+		/**
+		 * set value by a Date object
+		 * @name setByDateValue
+		 * @memberOf KJUR.asn1.DERAbstractTime#
+		 * @function
+		 * @param {Integer} year year of date (ex. 2013)
+		 * @param {Integer} month month of date between 1 and 12 (ex. 12)
+		 * @param {Integer} day day of month
+		 * @param {Integer} hour hours of date
+		 * @param {Integer} min minutes of date
+		 * @param {Integer} sec seconds of date
+		 */
+		this.setByDateValue = function(year, month, day, hour, min, sec) {
+			var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));
+			this.setByDate(dateObject);
+		};
+
+		this.getFreshValueHex = function() {
+			return this.hV;
+		};
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);
+	// == END   DERAbstractTime ==================================================
+
+	// == BEGIN DERAbstractStructured ============================================
+	/**
+	 * base class for ASN.1 DER structured class
+	 * @name KJUR.asn1.DERAbstractStructured
+	 * @class base class for ASN.1 DER structured class
+	 * @property {Array} asn1Array internal array of ASN1Object
+	 * @extends KJUR.asn1.ASN1Object
+	 * @description
+	 * @see KJUR.asn1.ASN1Object - superclass
+	 */
+	KJUR.asn1.DERAbstractStructured = function(params) {
+		KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
+
+		/**
+		 * set value by array of ASN1Object
+		 * @name setByASN1ObjectArray
+		 * @memberOf KJUR.asn1.DERAbstractStructured#
+		 * @function
+		 * @param {array} asn1ObjectArray array of ASN1Object to set
+		 */
+		this.setByASN1ObjectArray = function(asn1ObjectArray) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.asn1Array = asn1ObjectArray;
+		};
+
+		/**
+		 * append an ASN1Object to internal array
+		 * @name appendASN1Object
+		 * @memberOf KJUR.asn1.DERAbstractStructured#
+		 * @function
+		 * @param {ASN1Object} asn1Object to add
+		 */
+		this.appendASN1Object = function(asn1Object) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.asn1Array.push(asn1Object);
+		};
+
+		this.asn1Array = new Array();
+		if (typeof params != "undefined") {
+			if (typeof params['array'] != "undefined") {
+				this.asn1Array = params['array'];
+			}
+		}
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);
+
+
+	// ********************************************************************
+	//  ASN.1 Object Classes
+	// ********************************************************************
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER Boolean
+	 * @name KJUR.asn1.DERBoolean
+	 * @class class for ASN.1 DER Boolean
+	 * @extends KJUR.asn1.ASN1Object
+	 * @description
+	 * @see KJUR.asn1.ASN1Object - superclass
+	 */
+	KJUR.asn1.DERBoolean = function() {
+		KJUR.asn1.DERBoolean.superclass.constructor.call(this);
+		this.hT = "01";
+		this.hTLV = "0101ff";
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER Integer
+	 * @name KJUR.asn1.DERInteger
+	 * @class class for ASN.1 DER Integer
+	 * @extends KJUR.asn1.ASN1Object
+	 * @description
+	 * <br/>
+	 * As for argument 'params' for constructor, you can specify one of
+	 * following properties:
+	 * <ul>
+	 * <li>int - specify initial ASN.1 value(V) by integer value</li>
+	 * <li>bigint - specify initial ASN.1 value(V) by BigInteger object</li>
+	 * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>
+	 * </ul>
+	 * NOTE: 'params' can be omitted.
+	 */
+	KJUR.asn1.DERInteger = function(params) {
+		KJUR.asn1.DERInteger.superclass.constructor.call(this);
+		this.hT = "02";
+
+		/**
+		 * set value by Tom Wu's BigInteger object
+		 * @name setByBigInteger
+		 * @memberOf KJUR.asn1.DERInteger#
+		 * @function
+		 * @param {BigInteger} bigIntegerValue to set
+		 */
+		this.setByBigInteger = function(bigIntegerValue) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);
+		};
+
+		/**
+		 * set value by integer value
+		 * @name setByInteger
+		 * @memberOf KJUR.asn1.DERInteger
+		 * @function
+		 * @param {Integer} integer value to set
+		 */
+		this.setByInteger = function(intValue) {
+			var bi = new BigInteger(String(intValue), 10);
+			this.setByBigInteger(bi);
+		};
+
+		/**
+		 * set value by integer value
+		 * @name setValueHex
+		 * @memberOf KJUR.asn1.DERInteger#
+		 * @function
+		 * @param {String} hexadecimal string of integer value
+		 * @description
+		 * <br/>
+		 * NOTE: Value shall be represented by minimum octet length of
+		 * two's complement representation.
+		 * @example
+		 * new KJUR.asn1.DERInteger(123);
+		 * new KJUR.asn1.DERInteger({'int': 123});
+		 * new KJUR.asn1.DERInteger({'hex': '1fad'});
+		 */
+		this.setValueHex = function(newHexString) {
+			this.hV = newHexString;
+		};
+
+		this.getFreshValueHex = function() {
+			return this.hV;
+		};
+
+		if (typeof params != "undefined") {
+			if (typeof params['bigint'] != "undefined") {
+				this.setByBigInteger(params['bigint']);
+			} else if (typeof params['int'] != "undefined") {
+				this.setByInteger(params['int']);
+			} else if (typeof params == "number") {
+				this.setByInteger(params);
+			} else if (typeof params['hex'] != "undefined") {
+				this.setValueHex(params['hex']);
+			}
+		}
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER encoded BitString primitive
+	 * @name KJUR.asn1.DERBitString
+	 * @class class for ASN.1 DER encoded BitString primitive
+	 * @extends KJUR.asn1.ASN1Object
+	 * @description
+	 * <br/>
+	 * As for argument 'params' for constructor, you can specify one of
+	 * following properties:
+	 * <ul>
+	 * <li>bin - specify binary string (ex. '10111')</li>
+	 * <li>array - specify array of boolean (ex. [true,false,true,true])</li>
+	 * <li>hex - specify hexadecimal string of ASN.1 value(V) including unused bits</li>
+	 * <li>obj - specify {@link KJUR.asn1.ASN1Util.newObject}
+	 * argument for "BitString encapsulates" structure.</li>
+	 * </ul>
+	 * NOTE1: 'params' can be omitted.<br/>
+	 * NOTE2: 'obj' parameter have been supported since
+	 * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).<br/>
+	 * @example
+	 * // default constructor
+	 * o = new KJUR.asn1.DERBitString();
+	 * // initialize with binary string
+	 * o = new KJUR.asn1.DERBitString({bin: "1011"});
+	 * // initialize with boolean array
+	 * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});
+	 * // initialize with hexadecimal string (04 is unused bits)
+	 * o = new KJUR.asn1.DEROctetString({hex: "04bac0"});
+	 * // initialize with ASN1Util.newObject argument for encapsulated
+	 * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});
+	 * // above generates a ASN.1 data like this:
+	 * // BIT STRING, encapsulates {
+	 * //   SEQUENCE {
+	 * //     INTEGER 3
+	 * //     PrintableString 'aaa'
+	 * //     }
+	 * //   }
+	 */
+	KJUR.asn1.DERBitString = function(params) {
+		if (params !== undefined && typeof params.obj !== "undefined") {
+			var o = KJUR.asn1.ASN1Util.newObject(params.obj);
+			params.hex = "00" + o.getEncodedHex();
+		}
+		KJUR.asn1.DERBitString.superclass.constructor.call(this);
+		this.hT = "03";
+
+		/**
+		 * set ASN.1 value(V) by a hexadecimal string including unused bits
+		 * @name setHexValueIncludingUnusedBits
+		 * @memberOf KJUR.asn1.DERBitString#
+		 * @function
+		 * @param {String} newHexStringIncludingUnusedBits
+		 */
+		this.setHexValueIncludingUnusedBits = function(newHexStringIncludingUnusedBits) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.hV = newHexStringIncludingUnusedBits;
+		};
+
+		/**
+		 * set ASN.1 value(V) by unused bit and hexadecimal string of value
+		 * @name setUnusedBitsAndHexValue
+		 * @memberOf KJUR.asn1.DERBitString#
+		 * @function
+		 * @param {Integer} unusedBits
+		 * @param {String} hValue
+		 */
+		this.setUnusedBitsAndHexValue = function(unusedBits, hValue) {
+			if (unusedBits < 0 || 7 < unusedBits) {
+				throw "unused bits shall be from 0 to 7: u = " + unusedBits;
+			}
+			var hUnusedBits = "0" + unusedBits;
+			this.hTLV = null;
+			this.isModified = true;
+			this.hV = hUnusedBits + hValue;
+		};
+
+		/**
+		 * set ASN.1 DER BitString by binary string<br/>
+		 * @name setByBinaryString
+		 * @memberOf KJUR.asn1.DERBitString#
+		 * @function
+		 * @param {String} binaryString binary value string (i.e. '10111')
+		 * @description
+		 * Its unused bits will be calculated automatically by length of
+		 * 'binaryValue'. <br/>
+		 * NOTE: Trailing zeros '0' will be ignored.
+		 * @example
+		 * o = new KJUR.asn1.DERBitString();
+		 * o.setByBooleanArray("01011");
+		 */
+		this.setByBinaryString = function(binaryString) {
+			binaryString = binaryString.replace(/0+$/, '');
+			var unusedBits = 8 - binaryString.length % 8;
+			if (unusedBits == 8) unusedBits = 0;
+			for (var i = 0; i <= unusedBits; i++) {
+				binaryString += '0';
+			}
+			var h = '';
+			for (var i = 0; i < binaryString.length - 1; i += 8) {
+				var b = binaryString.substr(i, 8);
+				var x = parseInt(b, 2).toString(16);
+				if (x.length == 1) x = '0' + x;
+				h += x;
+			}
+			this.hTLV = null;
+			this.isModified = true;
+			this.hV = '0' + unusedBits + h;
+		};
+
+		/**
+		 * set ASN.1 TLV value(V) by an array of boolean<br/>
+		 * @name setByBooleanArray
+		 * @memberOf KJUR.asn1.DERBitString#
+		 * @function
+		 * @param {array} booleanArray array of boolean (ex. [true, false, true])
+		 * @description
+		 * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.
+		 * @example
+		 * o = new KJUR.asn1.DERBitString();
+		 * o.setByBooleanArray([false, true, false, true, true]);
+		 */
+		this.setByBooleanArray = function(booleanArray) {
+			var s = '';
+			for (var i = 0; i < booleanArray.length; i++) {
+				if (booleanArray[i] == true) {
+					s += '1';
+				} else {
+					s += '0';
+				}
+			}
+			this.setByBinaryString(s);
+		};
+
+		/**
+		 * generate an array of falses with specified length<br/>
+		 * @name newFalseArray
+		 * @memberOf KJUR.asn1.DERBitString
+		 * @function
+		 * @param {Integer} nLength length of array to generate
+		 * @return {array} array of boolean falses
+		 * @description
+		 * This static method may be useful to initialize boolean array.
+		 * @example
+		 * o = new KJUR.asn1.DERBitString();
+		 * o.newFalseArray(3) &rarr; [false, false, false]
+		 */
+		this.newFalseArray = function(nLength) {
+			var a = new Array(nLength);
+			for (var i = 0; i < nLength; i++) {
+				a[i] = false;
+			}
+			return a;
+		};
+
+		this.getFreshValueHex = function() {
+			return this.hV;
+		};
+
+		if (typeof params != "undefined") {
+			if (typeof params == "string" && params.toLowerCase().match(/^[0-9a-f]+$/)) {
+				this.setHexValueIncludingUnusedBits(params);
+			} else if (typeof params['hex'] != "undefined") {
+				this.setHexValueIncludingUnusedBits(params['hex']);
+			} else if (typeof params['bin'] != "undefined") {
+				this.setByBinaryString(params['bin']);
+			} else if (typeof params['array'] != "undefined") {
+				this.setByBooleanArray(params['array']);
+			}
+		}
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER OctetString<br/>
+	 * @name KJUR.asn1.DEROctetString
+	 * @class class for ASN.1 DER OctetString
+	 * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+	 * @extends KJUR.asn1.DERAbstractString
+	 * @description
+	 * This class provides ASN.1 OctetString simple type.<br/>
+	 * Supported "params" attributes are:
+	 * <ul>
+	 * <li>str - to set a string as a value</li>
+	 * <li>hex - to set a hexadecimal string as a value</li>
+	 * <li>obj - to set a encapsulated ASN.1 value by JSON object
+	 * which is defined in {@link KJUR.asn1.ASN1Util.newObject}</li>
+	 * </ul>
+	 * NOTE: A parameter 'obj' have been supported
+	 * for "OCTET STRING, encapsulates" structure.
+	 * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
+	 * @see KJUR.asn1.DERAbstractString - superclass
+	 * @example
+	 * // default constructor
+	 * o = new KJUR.asn1.DEROctetString();
+	 * // initialize with string
+	 * o = new KJUR.asn1.DEROctetString({str: "aaa"});
+	 * // initialize with hexadecimal string
+	 * o = new KJUR.asn1.DEROctetString({hex: "616161"});
+	 * // initialize with ASN1Util.newObject argument
+	 * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});
+	 * // above generates a ASN.1 data like this:
+	 * // OCTET STRING, encapsulates {
+	 * //   SEQUENCE {
+	 * //     INTEGER 3
+	 * //     PrintableString 'aaa'
+	 * //     }
+	 * //   }
+	 */
+	KJUR.asn1.DEROctetString = function(params) {
+		if (params !== undefined && typeof params.obj !== "undefined") {
+			var o = KJUR.asn1.ASN1Util.newObject(params.obj);
+			params.hex = o.getEncodedHex();
+		}
+		KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);
+		this.hT = "04";
+	};
+	YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER Null
+	 * @name KJUR.asn1.DERNull
+	 * @class class for ASN.1 DER Null
+	 * @extends KJUR.asn1.ASN1Object
+	 * @description
+	 * @see KJUR.asn1.ASN1Object - superclass
+	 */
+	KJUR.asn1.DERNull = function() {
+		KJUR.asn1.DERNull.superclass.constructor.call(this);
+		this.hT = "05";
+		this.hTLV = "0500";
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER ObjectIdentifier
+	 * @name KJUR.asn1.DERObjectIdentifier
+	 * @class class for ASN.1 DER ObjectIdentifier
+	 * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})
+	 * @extends KJUR.asn1.ASN1Object
+	 * @description
+	 * <br/>
+	 * As for argument 'params' for constructor, you can specify one of
+	 * following properties:
+	 * <ul>
+	 * <li>oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)</li>
+	 * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>
+	 * </ul>
+	 * NOTE: 'params' can be omitted.
+	 */
+	KJUR.asn1.DERObjectIdentifier = function(params) {
+		var itox = function(i) {
+			var h = i.toString(16);
+			if (h.length == 1) h = '0' + h;
+			return h;
+		};
+		var roidtox = function(roid) {
+			var h = '';
+			var bi = new BigInteger(roid, 10);
+			var b = bi.toString(2);
+			var padLen = 7 - b.length % 7;
+			if (padLen == 7) padLen = 0;
+			var bPad = '';
+			for (var i = 0; i < padLen; i++) bPad += '0';
+			b = bPad + b;
+			for (var i = 0; i < b.length - 1; i += 7) {
+				var b8 = b.substr(i, 7);
+				if (i != b.length - 7) b8 = '1' + b8;
+				h += itox(parseInt(b8, 2));
+			}
+			return h;
+		};
+
+		KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);
+		this.hT = "06";
+
+		/**
+		 * set value by a hexadecimal string
+		 * @name setValueHex
+		 * @memberOf KJUR.asn1.DERObjectIdentifier#
+		 * @function
+		 * @param {String} newHexString hexadecimal value of OID bytes
+		 */
+		this.setValueHex = function(newHexString) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.s = null;
+			this.hV = newHexString;
+		};
+
+		/**
+		 * set value by a OID string<br/>
+		 * @name setValueOidString
+		 * @memberOf KJUR.asn1.DERObjectIdentifier#
+		 * @function
+		 * @param {String} oidString OID string (ex. 2.5.4.13)
+		 * @example
+		 * o = new KJUR.asn1.DERObjectIdentifier();
+		 * o.setValueOidString("2.5.4.13");
+		 */
+		this.setValueOidString = function(oidString) {
+			if (!oidString.match(/^[0-9.]+$/)) {
+				throw "malformed oid string: " + oidString;
+			}
+			var h = '';
+			var a = oidString.split('.');
+			var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);
+			h += itox(i0);
+			a.splice(0, 2);
+			for (var i = 0; i < a.length; i++) {
+				h += roidtox(a[i]);
+			}
+			this.hTLV = null;
+			this.isModified = true;
+			this.s = null;
+			this.hV = h;
+		};
+
+		/**
+		 * set value by a OID name
+		 * @name setValueName
+		 * @memberOf KJUR.asn1.DERObjectIdentifier#
+		 * @function
+		 * @param {String} oidName OID name (ex. 'serverAuth')
+		 * @since 1.0.1
+		 * @description
+		 * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.
+		 * Otherwise raise error.
+		 * @example
+		 * o = new KJUR.asn1.DERObjectIdentifier();
+		 * o.setValueName("serverAuth");
+		 */
+		this.setValueName = function(oidName) {
+			var oid = KJUR.asn1.x509.OID.name2oid(oidName);
+			if (oid !== '') {
+				this.setValueOidString(oid);
+			} else {
+				throw "DERObjectIdentifier oidName undefined: " + oidName;
+			}
+		};
+
+		this.getFreshValueHex = function() {
+			return this.hV;
+		};
+
+		if (params !== undefined) {
+			if (typeof params === "string") {
+				if (params.match(/^[0-2].[0-9.]+$/)) {
+					this.setValueOidString(params);
+				} else {
+					this.setValueName(params);
+				}
+			} else if (params.oid !== undefined) {
+				this.setValueOidString(params.oid);
+			} else if (params.hex !== undefined) {
+				this.setValueHex(params.hex);
+			} else if (params.name !== undefined) {
+				this.setValueName(params.name);
+			}
+		}
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER Enumerated
+	 * @name KJUR.asn1.DEREnumerated
+	 * @class class for ASN.1 DER Enumerated
+	 * @extends KJUR.asn1.ASN1Object
+	 * @description
+	 * <br/>
+	 * As for argument 'params' for constructor, you can specify one of
+	 * following properties:
+	 * <ul>
+	 * <li>int - specify initial ASN.1 value(V) by integer value</li>
+	 * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>
+	 * </ul>
+	 * NOTE: 'params' can be omitted.
+	 * @example
+	 * new KJUR.asn1.DEREnumerated(123);
+	 * new KJUR.asn1.DEREnumerated({int: 123});
+	 * new KJUR.asn1.DEREnumerated({hex: '1fad'});
+	 */
+	KJUR.asn1.DEREnumerated = function(params) {
+		KJUR.asn1.DEREnumerated.superclass.constructor.call(this);
+		this.hT = "0a";
+
+		/**
+		 * set value by Tom Wu's BigInteger object
+		 * @name setByBigInteger
+		 * @memberOf KJUR.asn1.DEREnumerated#
+		 * @function
+		 * @param {BigInteger} bigIntegerValue to set
+		 */
+		this.setByBigInteger = function(bigIntegerValue) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);
+		};
+
+		/**
+		 * set value by integer value
+		 * @name setByInteger
+		 * @memberOf KJUR.asn1.DEREnumerated#
+		 * @function
+		 * @param {Integer} integer value to set
+		 */
+		this.setByInteger = function(intValue) {
+			var bi = new BigInteger(String(intValue), 10);
+			this.setByBigInteger(bi);
+		};
+
+		/**
+		 * set value by integer value
+		 * @name setValueHex
+		 * @memberOf KJUR.asn1.DEREnumerated#
+		 * @function
+		 * @param {String} hexadecimal string of integer value
+		 * @description
+		 * <br/>
+		 * NOTE: Value shall be represented by minimum octet length of
+		 * two's complement representation.
+		 */
+		this.setValueHex = function(newHexString) {
+			this.hV = newHexString;
+		};
+
+		this.getFreshValueHex = function() {
+			return this.hV;
+		};
+
+		if (typeof params != "undefined") {
+			if (typeof params['int'] != "undefined") {
+				this.setByInteger(params['int']);
+			} else if (typeof params == "number") {
+				this.setByInteger(params);
+			} else if (typeof params['hex'] != "undefined") {
+				this.setValueHex(params['hex']);
+			}
+		}
+	};
+	YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER UTF8String
+	 * @name KJUR.asn1.DERUTF8String
+	 * @class class for ASN.1 DER UTF8String
+	 * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+	 * @extends KJUR.asn1.DERAbstractString
+	 * @description
+	 * @see KJUR.asn1.DERAbstractString - superclass
+	 */
+	KJUR.asn1.DERUTF8String = function(params) {
+		KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);
+		this.hT = "0c";
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER NumericString
+	 * @name KJUR.asn1.DERNumericString
+	 * @class class for ASN.1 DER NumericString
+	 * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+	 * @extends KJUR.asn1.DERAbstractString
+	 * @description
+	 * @see KJUR.asn1.DERAbstractString - superclass
+	 */
+	KJUR.asn1.DERNumericString = function(params) {
+		KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);
+		this.hT = "12";
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER PrintableString
+	 * @name KJUR.asn1.DERPrintableString
+	 * @class class for ASN.1 DER PrintableString
+	 * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+	 * @extends KJUR.asn1.DERAbstractString
+	 * @description
+	 * @see KJUR.asn1.DERAbstractString - superclass
+	 */
+	KJUR.asn1.DERPrintableString = function(params) {
+		KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);
+		this.hT = "13";
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER TeletexString
+	 * @name KJUR.asn1.DERTeletexString
+	 * @class class for ASN.1 DER TeletexString
+	 * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+	 * @extends KJUR.asn1.DERAbstractString
+	 * @description
+	 * @see KJUR.asn1.DERAbstractString - superclass
+	 */
+	KJUR.asn1.DERTeletexString = function(params) {
+		KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);
+		this.hT = "14";
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER IA5String
+	 * @name KJUR.asn1.DERIA5String
+	 * @class class for ASN.1 DER IA5String
+	 * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+	 * @extends KJUR.asn1.DERAbstractString
+	 * @description
+	 * @see KJUR.asn1.DERAbstractString - superclass
+	 */
+	KJUR.asn1.DERIA5String = function(params) {
+		KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);
+		this.hT = "16";
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER UTCTime
+	 * @name KJUR.asn1.DERUTCTime
+	 * @class class for ASN.1 DER UTCTime
+	 * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})
+	 * @extends KJUR.asn1.DERAbstractTime
+	 * @description
+	 * <br/>
+	 * As for argument 'params' for constructor, you can specify one of
+	 * following properties:
+	 * <ul>
+	 * <li>str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')</li>
+	 * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>
+	 * <li>date - specify Date object.</li>
+	 * </ul>
+	 * NOTE: 'params' can be omitted.
+	 * <h4>EXAMPLES</h4>
+	 * @example
+	 * d1 = new KJUR.asn1.DERUTCTime();
+	 * d1.setString('130430125959Z');
+	 *
+	 * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});
+	 * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});
+	 * d4 = new KJUR.asn1.DERUTCTime('130430125959Z');
+	 */
+	KJUR.asn1.DERUTCTime = function(params) {
+		KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);
+		this.hT = "17";
+
+		/**
+		 * set value by a Date object<br/>
+		 * @name setByDate
+		 * @memberOf KJUR.asn1.DERUTCTime#
+		 * @function
+		 * @param {Date} dateObject Date object to set ASN.1 value(V)
+		 * @example
+		 * o = new KJUR.asn1.DERUTCTime();
+		 * o.setByDate(new Date("2016/12/31"));
+		 */
+		this.setByDate = function(dateObject) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.date = dateObject;
+			this.s = this.formatDate(this.date, 'utc');
+			this.hV = stohex(this.s);
+		};
+
+		this.getFreshValueHex = function() {
+			if (typeof this.date == "undefined" && typeof this.s == "undefined") {
+				this.date = new Date();
+				this.s = this.formatDate(this.date, 'utc');
+				this.hV = stohex(this.s);
+			}
+			return this.hV;
+		};
+
+		if (params !== undefined) {
+			if (params.str !== undefined) {
+				this.setString(params.str);
+			} else if (typeof params == "string" && params.match(/^[0-9]{12}Z$/)) {
+				this.setString(params);
+			} else if (params.hex !== undefined) {
+				this.setStringHex(params.hex);
+			} else if (params.date !== undefined) {
+				this.setByDate(params.date);
+			}
+		}
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER GeneralizedTime
+	 * @name KJUR.asn1.DERGeneralizedTime
+	 * @class class for ASN.1 DER GeneralizedTime
+	 * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})
+	 * @property {Boolean} withMillis flag to show milliseconds or not
+	 * @extends KJUR.asn1.DERAbstractTime
+	 * @description
+	 * <br/>
+	 * As for argument 'params' for constructor, you can specify one of
+	 * following properties:
+	 * <ul>
+	 * <li>str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')</li>
+	 * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>
+	 * <li>date - specify Date object.</li>
+	 * <li>millis - specify flag to show milliseconds (from 1.0.6)</li>
+	 * </ul>
+	 * NOTE1: 'params' can be omitted.
+	 * NOTE2: 'withMillis' property is supported from asn1 1.0.6.
+	 */
+	KJUR.asn1.DERGeneralizedTime = function(params) {
+		KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);
+		this.hT = "18";
+		this.withMillis = false;
+
+		/**
+		 * set value by a Date object
+		 * @name setByDate
+		 * @memberOf KJUR.asn1.DERGeneralizedTime#
+		 * @function
+		 * @param {Date} dateObject Date object to set ASN.1 value(V)
+		 * @example
+		 * When you specify UTC time, use 'Date.UTC' method like this:<br/>
+		 * o1 = new DERUTCTime();
+		 * o1.setByDate(date);
+		 *
+		 * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59
+		 */
+		this.setByDate = function(dateObject) {
+			this.hTLV = null;
+			this.isModified = true;
+			this.date = dateObject;
+			this.s = this.formatDate(this.date, 'gen', this.withMillis);
+			this.hV = stohex(this.s);
+		};
+
+		this.getFreshValueHex = function() {
+			if (this.date === undefined && this.s === undefined) {
+				this.date = new Date();
+				this.s = this.formatDate(this.date, 'gen', this.withMillis);
+				this.hV = stohex(this.s);
+			}
+			return this.hV;
+		};
+
+		if (params !== undefined) {
+			if (params.str !== undefined) {
+				this.setString(params.str);
+			} else if (typeof params == "string" && params.match(/^[0-9]{14}Z$/)) {
+				this.setString(params);
+			} else if (params.hex !== undefined) {
+				this.setStringHex(params.hex);
+			} else if (params.date !== undefined) {
+				this.setByDate(params.date);
+			}
+			if (params.millis === true) {
+				this.withMillis = true;
+			}
+		}
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER Sequence
+	 * @name KJUR.asn1.DERSequence
+	 * @class class for ASN.1 DER Sequence
+	 * @extends KJUR.asn1.DERAbstractStructured
+	 * @description
+	 * <br/>
+	 * As for argument 'params' for constructor, you can specify one of
+	 * following properties:
+	 * <ul>
+	 * <li>array - specify array of ASN1Object to set elements of content</li>
+	 * </ul>
+	 * NOTE: 'params' can be omitted.
+	 */
+	KJUR.asn1.DERSequence = function(params) {
+		KJUR.asn1.DERSequence.superclass.constructor.call(this, params);
+		this.hT = "30";
+		this.getFreshValueHex = function() {
+			var h = '';
+			for (var i = 0; i < this.asn1Array.length; i++) {
+				var asn1Obj = this.asn1Array[i];
+				h += asn1Obj.getEncodedHex();
+			}
+			this.hV = h;
+			return this.hV;
+		};
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER Set
+	 * @name KJUR.asn1.DERSet
+	 * @class class for ASN.1 DER Set
+	 * @extends KJUR.asn1.DERAbstractStructured
+	 * @description
+	 * <br/>
+	 * As for argument 'params' for constructor, you can specify one of
+	 * following properties:
+	 * <ul>
+	 * <li>array - specify array of ASN1Object to set elements of content</li>
+	 * <li>sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.</li>
+	 * </ul>
+	 * NOTE1: 'params' can be omitted.<br/>
+	 * NOTE2: sortflag is supported since 1.0.5.
+	 */
+	KJUR.asn1.DERSet = function(params) {
+		KJUR.asn1.DERSet.superclass.constructor.call(this, params);
+		this.hT = "31";
+		this.sortFlag = true; // item shall be sorted only in ASN.1 DER
+		this.getFreshValueHex = function() {
+			var a = new Array();
+			for (var i = 0; i < this.asn1Array.length; i++) {
+				var asn1Obj = this.asn1Array[i];
+				a.push(asn1Obj.getEncodedHex());
+			}
+			if (this.sortFlag == true) a.sort();
+			this.hV = a.join('');
+			return this.hV;
+		};
+
+		if (typeof params != "undefined") {
+			if (typeof params.sortflag != "undefined" &&
+				params.sortflag == false)
+				this.sortFlag = false;
+		}
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);
+
+	// ********************************************************************
+	/**
+	 * class for ASN.1 DER TaggedObject
+	 * @name KJUR.asn1.DERTaggedObject
+	 * @class class for ASN.1 DER TaggedObject
+	 * @extends KJUR.asn1.ASN1Object
+	 * @description
+	 * <br/>
+	 * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.
+	 * For example, if you find '[1]' tag in a ASN.1 dump,
+	 * 'tagNoHex' will be 'a1'.
+	 * <br/>
+	 * As for optional argument 'params' for constructor, you can specify *ANY* of
+	 * following properties:
+	 * <ul>
+	 * <li>explicit - specify true if this is explicit tag otherwise false
+	 *     (default is 'true').</li>
+	 * <li>tag - specify tag (default is 'a0' which means [0])</li>
+	 * <li>obj - specify ASN1Object which is tagged</li>
+	 * </ul>
+	 * @example
+	 * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});
+	 * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});
+	 * hex = d2.getEncodedHex();
+	 */
+	KJUR.asn1.DERTaggedObject = function(params) {
+		KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);
+		this.hT = "a0";
+		this.hV = '';
+		this.isExplicit = true;
+		this.asn1Object = null;
+
+		/**
+		 * set value by an ASN1Object
+		 * @name setString
+		 * @memberOf KJUR.asn1.DERTaggedObject#
+		 * @function
+		 * @param {Boolean} isExplicitFlag flag for explicit/implicit tag
+		 * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag
+		 * @param {ASN1Object} asn1Object ASN.1 to encapsulate
+		 */
+		this.setASN1Object = function(isExplicitFlag, tagNoHex, asn1Object) {
+			this.hT = tagNoHex;
+			this.isExplicit = isExplicitFlag;
+			this.asn1Object = asn1Object;
+			if (this.isExplicit) {
+				this.hV = this.asn1Object.getEncodedHex();
+				this.hTLV = null;
+				this.isModified = true;
+			} else {
+				this.hV = null;
+				this.hTLV = asn1Object.getEncodedHex();
+				this.hTLV = this.hTLV.replace(/^../, tagNoHex);
+				this.isModified = false;
+			}
+		};
+
+		this.getFreshValueHex = function() {
+			return this.hV;
+		};
+
+		if (typeof params != "undefined") {
+			if (typeof params['tag'] != "undefined") {
+				this.hT = params['tag'];
+			}
+			if (typeof params['explicit'] != "undefined") {
+				this.isExplicit = params['explicit'];
+			}
+			if (typeof params['obj'] != "undefined") {
+				this.asn1Object = params['obj'];
+				this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);
+			}
+		}
+	};
+	YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);
+
+	/**
+	 * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.
+	 * This object is just a decorator for parsing the key parameter
+	 * @param {string|Object} key - The key in string format, or an object containing
+	 * the parameters needed to build a RSAKey object.
+	 * @constructor
+	 */
+	var JSEncryptRSAKey = /** @class */ (function(_super) {
+		__extends(JSEncryptRSAKey, _super);
+
+		function JSEncryptRSAKey(key) {
+			var _this = _super.call(this) || this;
+			// Call the super constructor.
+			//  RSAKey.call(this);
+			// If a key key was provided.
+			if (key) {
+				// If this is a string...
+				if (typeof key === "string") {
+					_this.parseKey(key);
+				} else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||
+					JSEncryptRSAKey.hasPublicKeyProperty(key)) {
+					// Set the values for the key.
+					_this.parsePropertiesFrom(key);
+				}
+			}
+			return _this;
+		}
+		/**
+		 * Method to parse a pem encoded string containing both a public or private key.
+		 * The method will translate the pem encoded string in a der encoded string and
+		 * will parse private key and public key parameters. This method accepts public key
+		 * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).
+		 *
+		 * @todo Check how many rsa formats use the same format of pkcs #1.
+		 *
+		 * The format is defined as:
+		 * PublicKeyInfo ::= SEQUENCE {
+		 *   algorithm       AlgorithmIdentifier,
+		 *   PublicKey       BIT STRING
+		 * }
+		 * Where AlgorithmIdentifier is:
+		 * AlgorithmIdentifier ::= SEQUENCE {
+		 *   algorithm       OBJECT IDENTIFIER,     the OID of the enc algorithm
+		 *   parameters      ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)
+		 * }
+		 * and PublicKey is a SEQUENCE encapsulated in a BIT STRING
+		 * RSAPublicKey ::= SEQUENCE {
+		 *   modulus           INTEGER,  -- n
+		 *   publicExponent    INTEGER   -- e
+		 * }
+		 * it's possible to examine the structure of the keys obtained from openssl using
+		 * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/
+		 * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer
+		 * @private
+		 */
+		JSEncryptRSAKey.prototype.parseKey = function(pem) {
+			try {
+				var modulus = 0;
+				var public_exponent = 0;
+				var reHex = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/;
+				var der = reHex.test(pem) ? Hex.decode(pem) : Base64.unarmor(pem);
+				var asn1 = ASN1.decode(der);
+				// Fixes a bug with OpenSSL 1.0+ private keys
+				if (asn1.sub.length === 3) {
+					asn1 = asn1.sub[2].sub[0];
+				}
+				if (asn1.sub.length === 9) {
+					// Parse the private key.
+					modulus = asn1.sub[1].getHexStringValue(); // bigint
+					this.n = parseBigInt(modulus, 16);
+					public_exponent = asn1.sub[2].getHexStringValue(); // int
+					this.e = parseInt(public_exponent, 16);
+					var private_exponent = asn1.sub[3].getHexStringValue(); // bigint
+					this.d = parseBigInt(private_exponent, 16);
+					var prime1 = asn1.sub[4].getHexStringValue(); // bigint
+					this.p = parseBigInt(prime1, 16);
+					var prime2 = asn1.sub[5].getHexStringValue(); // bigint
+					this.q = parseBigInt(prime2, 16);
+					var exponent1 = asn1.sub[6].getHexStringValue(); // bigint
+					this.dmp1 = parseBigInt(exponent1, 16);
+					var exponent2 = asn1.sub[7].getHexStringValue(); // bigint
+					this.dmq1 = parseBigInt(exponent2, 16);
+					var coefficient = asn1.sub[8].getHexStringValue(); // bigint
+					this.coeff = parseBigInt(coefficient, 16);
+				} else if (asn1.sub.length === 2) {
+					// Parse the public key.
+					var bit_string = asn1.sub[1];
+					var sequence = bit_string.sub[0];
+					modulus = sequence.sub[0].getHexStringValue();
+					this.n = parseBigInt(modulus, 16);
+					public_exponent = sequence.sub[1].getHexStringValue();
+					this.e = parseInt(public_exponent, 16);
+				} else {
+					return false;
+				}
+				return true;
+			} catch (ex) {
+				return false;
+			}
+		};
+		/**
+		 * Translate rsa parameters in a hex encoded string representing the rsa key.
+		 *
+		 * The translation follow the ASN.1 notation :
+		 * RSAPrivateKey ::= SEQUENCE {
+		 *   version           Version,
+		 *   modulus           INTEGER,  -- n
+		 *   publicExponent    INTEGER,  -- e
+		 *   privateExponent   INTEGER,  -- d
+		 *   prime1            INTEGER,  -- p
+		 *   prime2            INTEGER,  -- q
+		 *   exponent1         INTEGER,  -- d mod (p1)
+		 *   exponent2         INTEGER,  -- d mod (q-1)
+		 *   coefficient       INTEGER,  -- (inverse of q) mod p
+		 * }
+		 * @returns {string}  DER Encoded String representing the rsa private key
+		 * @private
+		 */
+		JSEncryptRSAKey.prototype.getPrivateBaseKey = function() {
+			var options = {
+				array: [
+					new KJUR.asn1.DERInteger({
+						int: 0
+					}),
+					new KJUR.asn1.DERInteger({
+						bigint: this.n
+					}),
+					new KJUR.asn1.DERInteger({
+						int: this.e
+					}),
+					new KJUR.asn1.DERInteger({
+						bigint: this.d
+					}),
+					new KJUR.asn1.DERInteger({
+						bigint: this.p
+					}),
+					new KJUR.asn1.DERInteger({
+						bigint: this.q
+					}),
+					new KJUR.asn1.DERInteger({
+						bigint: this.dmp1
+					}),
+					new KJUR.asn1.DERInteger({
+						bigint: this.dmq1
+					}),
+					new KJUR.asn1.DERInteger({
+						bigint: this.coeff
+					})
+				]
+			};
+			var seq = new KJUR.asn1.DERSequence(options);
+			return seq.getEncodedHex();
+		};
+		/**
+		 * base64 (pem) encoded version of the DER encoded representation
+		 * @returns {string} pem encoded representation without header and footer
+		 * @public
+		 */
+		JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function() {
+			return hex2b64(this.getPrivateBaseKey());
+		};
+		/**
+		 * Translate rsa parameters in a hex encoded string representing the rsa public key.
+		 * The representation follow the ASN.1 notation :
+		 * PublicKeyInfo ::= SEQUENCE {
+		 *   algorithm       AlgorithmIdentifier,
+		 *   PublicKey       BIT STRING
+		 * }
+		 * Where AlgorithmIdentifier is:
+		 * AlgorithmIdentifier ::= SEQUENCE {
+		 *   algorithm       OBJECT IDENTIFIER,     the OID of the enc algorithm
+		 *   parameters      ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)
+		 * }
+		 * and PublicKey is a SEQUENCE encapsulated in a BIT STRING
+		 * RSAPublicKey ::= SEQUENCE {
+		 *   modulus           INTEGER,  -- n
+		 *   publicExponent    INTEGER   -- e
+		 * }
+		 * @returns {string} DER Encoded String representing the rsa public key
+		 * @private
+		 */
+		JSEncryptRSAKey.prototype.getPublicBaseKey = function() {
+			var first_sequence = new KJUR.asn1.DERSequence({
+				array: [
+					new KJUR.asn1.DERObjectIdentifier({
+						oid: "1.2.840.113549.1.1.1"
+					}),
+					new KJUR.asn1.DERNull()
+				]
+			});
+			var second_sequence = new KJUR.asn1.DERSequence({
+				array: [
+					new KJUR.asn1.DERInteger({
+						bigint: this.n
+					}),
+					new KJUR.asn1.DERInteger({
+						int: this.e
+					})
+				]
+			});
+			var bit_string = new KJUR.asn1.DERBitString({
+				hex: "00" + second_sequence.getEncodedHex()
+			});
+			var seq = new KJUR.asn1.DERSequence({
+				array: [
+					first_sequence,
+					bit_string
+				]
+			});
+			return seq.getEncodedHex();
+		};
+		/**
+		 * base64 (pem) encoded version of the DER encoded representation
+		 * @returns {string} pem encoded representation without header and footer
+		 * @public
+		 */
+		JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function() {
+			return hex2b64(this.getPublicBaseKey());
+		};
+		/**
+		 * wrap the string in block of width chars. The default value for rsa keys is 64
+		 * characters.
+		 * @param {string} str the pem encoded string without header and footer
+		 * @param {Number} [width=64] - the length the string has to be wrapped at
+		 * @returns {string}
+		 * @private
+		 */
+		JSEncryptRSAKey.wordwrap = function(str, width) {
+			width = width || 64;
+			if (!str) {
+				return str;
+			}
+			var regex = "(.{1," + width + "})( +|$\n?)|(.{1," + width + "})";
+			return str.match(RegExp(regex, "g")).join("\n");
+		};
+		/**
+		 * Retrieve the pem encoded private key
+		 * @returns {string} the pem encoded private key with header/footer
+		 * @public
+		 */
+		JSEncryptRSAKey.prototype.getPrivateKey = function() {
+			var key = "-----BEGIN RSA PRIVATE KEY-----\n";
+			key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + "\n";
+			key += "-----END RSA PRIVATE KEY-----";
+			return key;
+		};
+		/**
+		 * Retrieve the pem encoded public key
+		 * @returns {string} the pem encoded public key with header/footer
+		 * @public
+		 */
+		JSEncryptRSAKey.prototype.getPublicKey = function() {
+			var key = "-----BEGIN PUBLIC KEY-----\n";
+			key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + "\n";
+			key += "-----END PUBLIC KEY-----";
+			return key;
+		};
+		/**
+		 * Check if the object contains the necessary parameters to populate the rsa modulus
+		 * and public exponent parameters.
+		 * @param {Object} [obj={}] - An object that may contain the two public key
+		 * parameters
+		 * @returns {boolean} true if the object contains both the modulus and the public exponent
+		 * properties (n and e)
+		 * @todo check for types of n and e. N should be a parseable bigInt object, E should
+		 * be a parseable integer number
+		 * @private
+		 */
+		JSEncryptRSAKey.hasPublicKeyProperty = function(obj) {
+			obj = obj || {};
+			return (obj.hasOwnProperty("n") &&
+				obj.hasOwnProperty("e"));
+		};
+		/**
+		 * Check if the object contains ALL the parameters of an RSA key.
+		 * @param {Object} [obj={}] - An object that may contain nine rsa key
+		 * parameters
+		 * @returns {boolean} true if the object contains all the parameters needed
+		 * @todo check for types of the parameters all the parameters but the public exponent
+		 * should be parseable bigint objects, the public exponent should be a parseable integer number
+		 * @private
+		 */
+		JSEncryptRSAKey.hasPrivateKeyProperty = function(obj) {
+			obj = obj || {};
+			return (obj.hasOwnProperty("n") &&
+				obj.hasOwnProperty("e") &&
+				obj.hasOwnProperty("d") &&
+				obj.hasOwnProperty("p") &&
+				obj.hasOwnProperty("q") &&
+				obj.hasOwnProperty("dmp1") &&
+				obj.hasOwnProperty("dmq1") &&
+				obj.hasOwnProperty("coeff"));
+		};
+		/**
+		 * Parse the properties of obj in the current rsa object. Obj should AT LEAST
+		 * include the modulus and public exponent (n, e) parameters.
+		 * @param {Object} obj - the object containing rsa parameters
+		 * @private
+		 */
+		JSEncryptRSAKey.prototype.parsePropertiesFrom = function(obj) {
+			this.n = obj.n;
+			this.e = obj.e;
+			if (obj.hasOwnProperty("d")) {
+				this.d = obj.d;
+				this.p = obj.p;
+				this.q = obj.q;
+				this.dmp1 = obj.dmp1;
+				this.dmq1 = obj.dmq1;
+				this.coeff = obj.coeff;
+			}
+		};
+		return JSEncryptRSAKey;
+	}(RSAKey));
+
+	/**
+	 *
+	 * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour
+	 * possible parameters are:
+	 * - default_key_size        {number}  default: 1024 the key size in bit
+	 * - default_public_exponent {string}  default: '010001' the hexadecimal representation of the public exponent
+	 * - log                     {boolean} default: false whether log warn/error or not
+	 * @constructor
+	 */
+	var JSEncrypt = /** @class */ (function() {
+		function JSEncrypt(options) {
+			options = options || {};
+			this.default_key_size = parseInt(options.default_key_size, 10) || 1024;
+			this.default_public_exponent = options.default_public_exponent ||
+			"010001"; // 65537 default openssl public exponent for rsa key type
+			this.log = options.log || false;
+			// The private and public key.
+			this.key = null;
+		}
+		/**
+		 * Method to set the rsa key parameter (one method is enough to set both the public
+		 * and the private key, since the private key contains the public key paramenters)
+		 * Log a warning if logs are enabled
+		 * @param {Object|string} key the pem encoded string or an object (with or without header/footer)
+		 * @public
+		 */
+		JSEncrypt.prototype.setKey = function(key) {
+			if (this.log && this.key) {
+				console.warn("A key was already set, overriding existing.");
+			}
+			this.key = new JSEncryptRSAKey(key);
+		};
+		/**
+		 * Proxy method for setKey, for api compatibility
+		 * @see setKey
+		 * @public
+		 */
+		JSEncrypt.prototype.setPrivateKey = function(privkey) {
+			// Create the key.
+			this.setKey(privkey);
+		};
+		/**
+		 * Proxy method for setKey, for api compatibility
+		 * @see setKey
+		 * @public
+		 */
+		JSEncrypt.prototype.setPublicKey = function(pubkey) {
+			// Sets the public key.
+			this.setKey(pubkey);
+		};
+		/**
+		 * Proxy method for RSAKey object's decrypt, decrypt the string using the private
+		 * components of the rsa key object. Note that if the object was not set will be created
+		 * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor
+		 * @param {string} str base64 encoded crypted string to decrypt
+		 * @return {string} the decrypted string
+		 * @public
+		 */
+		JSEncrypt.prototype.decrypt = function(str) {
+			// Return the decrypted string.
+			try {
+				return this.getKey().decrypt(b64tohex(str));
+			} catch (ex) {
+				return false;
+			}
+		};
+		/**
+		 * Proxy method for RSAKey object's encrypt, encrypt the string using the public
+		 * components of the rsa key object. Note that if the object was not set will be created
+		 * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor
+		 * @param {string} str the string to encrypt
+		 * @return {string} the encrypted string encoded in base64
+		 * @public
+		 */
+		JSEncrypt.prototype.encrypt = function(str) {
+			// Return the encrypted string.
+			try {
+				return hex2b64(this.getKey().encrypt(str));
+			} catch (ex) {
+				return false;
+			}
+		};
+		/**
+		 * Proxy method for RSAKey object's sign.
+		 * @param {string} str the string to sign
+		 * @param {function} digestMethod hash method
+		 * @param {string} digestName the name of the hash algorithm
+		 * @return {string} the signature encoded in base64
+		 * @public
+		 */
+		JSEncrypt.prototype.sign = function(str, digestMethod, digestName) {
+			// return the RSA signature of 'str' in 'hex' format.
+			try {
+				console.log(arguments)
+				return hex2b64(this.getKey().sign(str, digestMethod, digestName));
+			} catch (ex) {
+				console.log(ex)
+				return false;
+			}
+		};
+		/**
+		 * Proxy method for RSAKey object's verify.
+		 * @param {string} str the string to verify
+		 * @param {string} signature the signature encoded in base64 to compare the string to
+		 * @param {function} digestMethod hash method
+		 * @return {boolean} whether the data and signature match
+		 * @public
+		 */
+		JSEncrypt.prototype.verify = function(str, signature, digestMethod) {
+			// Return the decrypted 'digest' of the signature.
+			try {
+				return this.getKey().verify(str, b64tohex(signature), digestMethod);
+			} catch (ex) {
+				return false;
+			}
+		};
+		/**
+		 * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object
+		 * will be created and returned
+		 * @param {callback} [cb] the callback to be called if we want the key to be generated
+		 * in an async fashion
+		 * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object
+		 * @public
+		 */
+		JSEncrypt.prototype.getKey = function(cb) {
+			// Only create new if it does not exist.
+			if (!this.key) {
+				// Get a new private key.
+				this.key = new JSEncryptRSAKey();
+				if (cb && {}.toString.call(cb) === "[object Function]") {
+					this.key.generateAsync(this.default_key_size, this.default_public_exponent,
+						cb);
+					return;
+				}
+				// Generate the key.
+				this.key.generate(this.default_key_size, this.default_public_exponent);
+			}
+			return this.key;
+		};
+		/**
+		 * Returns the pem encoded representation of the private key
+		 * If the key doesn't exists a new key will be created
+		 * @returns {string} pem encoded representation of the private key WITH header and footer
+		 * @public
+		 */
+		JSEncrypt.prototype.getPrivateKey = function() {
+			// Return the private representation of this key.
+			return this.getKey().getPrivateKey();
+		};
+		/**
+		 * Returns the pem encoded representation of the private key
+		 * If the key doesn't exists a new key will be created
+		 * @returns {string} pem encoded representation of the private key WITHOUT header and footer
+		 * @public
+		 */
+		JSEncrypt.prototype.getPrivateKeyB64 = function() {
+			// Return the private representation of this key.
+			return this.getKey().getPrivateBaseKeyB64();
+		};
+		/**
+		 * Returns the pem encoded representation of the public key
+		 * If the key doesn't exists a new key will be created
+		 * @returns {string} pem encoded representation of the public key WITH header and footer
+		 * @public
+		 */
+		JSEncrypt.prototype.getPublicKey = function() {
+			// Return the private representation of this key.
+			return this.getKey().getPublicKey();
+		};
+		/**
+		 * Returns the pem encoded representation of the public key
+		 * If the key doesn't exists a new key will be created
+		 * @returns {string} pem encoded representation of the public key WITHOUT header and footer
+		 * @public
+		 */
+		JSEncrypt.prototype.getPublicKeyB64 = function() {
+			// Return the private representation of this key.
+			return this.getKey().getPublicBaseKeyB64();
+		};
+		JSEncrypt.version = "3.0.0-rc.1";
+		return JSEncrypt;
+	}());
+
+	window2.JSEncrypt = JSEncrypt;
+
+	exports.JSEncrypt = JSEncrypt;
+	exports.default = JSEncrypt;
+
+	Object.defineProperty(exports, '__esModule', {
+		value: true
+	});
+
+})));

+ 390 - 0
src/common/mixins/canvasMixin.ts

@@ -0,0 +1,390 @@
+//@ts-nocheck
+import { Vue, Component } from 'vue-property-decorator';
+import { Getter, Mutation } from 'vuex-class';
+import { types } from '@/common/store/index';
+@Component({})
+export default class CanvasMixin extends Vue {
+	async getQr(data, fun) : Promise<any> {
+		// 获取分享小程序码
+		// let name = data.type + data.share + data.uid;
+		let name = +new Date();
+		console.log('分享码带的参数', data);
+		// let sceneStr = '';
+		// for (let key in data.scene) {
+		// 	sceneStr = sceneStr + key + '=' + data.scene[key] + '&';
+		// }
+		await this.$http
+			.post({
+				url: this.$api.Qrcode,
+				data: { page: data.page, scene: data.scene }
+			})
+			.then(res => {
+				if (!res.url) {
+					wx.showToast({
+						title: '小程序码生成失败!',
+						icon: 'none'
+					});
+					return;
+				}
+				this.base64src(
+					res.url,
+					miniImage => {
+						fun(miniImage);
+					},
+					name
+				);
+			})
+			.catch(err => {
+				wx.hideLoading();
+			});
+	}
+	//远程图片转临时文件
+	loadFile(img : string, fun) {
+		uni.downloadFile({
+			url: img,
+			success(result) {
+				if (result.statusCode === 200) {
+					fun(result.tempFilePath);
+				}
+			}
+		});
+	}
+	// base64图片 转成临时文件 传个name 保证生成的临时文件名唯一
+	base64src(base64data, cb, name) : any {
+		// #ifndef H5
+		let fsm = uni.getFileSystemManager();
+		let FILE_BASE_NAME = 'tmp_base64src' + name; // 自定义文件名
+		const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || [];
+		if (!format) {
+			return new Error('ERROR_BASE64SRC_PARSE');
+		}
+		const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`;
+		const buffer = uni.base64ToArrayBuffer(bodyData);
+		fsm.writeFile({
+			filePath,
+			data: buffer,
+			encoding: 'binary',
+			success() {
+				console.log(5555, filePath);
+				cb(filePath);
+			},
+			fail(err) {
+				console.log(66666, err);
+				return new Error('ERROR_BASE64SRC_WRITE');
+			}
+		});
+		// #endif
+		// #ifdef H5
+		uni.downloadFile({
+			url: base64data,
+			success(res) {
+				console.log(5555, res.tempFilePath);
+				cb(res.tempFilePath);
+			},
+			fail(err) {
+				console.log(66666, err);
+				return new Error('ERROR_BASE64SRC_WRITE');
+			}
+		})
+		// #endif
+	}
+	// 文字省略号
+	ellipsisText(
+		ctx,
+		content, // 文字内容
+		textWidth, // 最大宽度
+		x, // 起点横坐标
+		y, // 起点纵坐标
+		color, // 文字颜色
+		size, // 文字大小
+		lineHeight, // 行高,针对多行
+		rowNum = 1, // 行数
+		weight = 'normal ' // 文字粗细
+	) : void | boolean {
+		//textBaseline设为top,使文字的位置以左上角为基准
+		// 将传入的文字内容(字符串)分割成单个字符串数组 'text' => ['t','e','x','t']
+		if (!content) {
+			return false;
+		}
+		let contentArr : string = content.toString().split('');
+		let tempStr : string = ''; // 用来存放临时拼接的字符串
+		let resultArr : string[] = []; // 最终生成的字符串数组
+		// 将分割的单个字符拼成textWidth宽度的数组
+		for (let i = 0; i < contentArr.length; i++) {
+			// ctx.measureText => 返回文本宽度
+			if (ctx.measureText(tempStr).width < textWidth) {
+				// 当 拼接字符串宽度小于传入的宽度时,继续拼接
+				tempStr += contentArr[i];
+			} else {
+				// 当拼接字符串宽度大于等于传入的宽度时,将字符串放入数组
+				i--; // 防止当前参与循环的字符丢失
+				resultArr.push(tempStr); // 将字符串放入数组
+				tempStr = ''; // 拼接字符串清空,继续循环
+			}
+		}
+		// 结束循环后,将最后一个拼接字符串放入数组
+		resultArr.push(tempStr);
+
+		// 截取传入行数的字符串数组
+		/**
+		 * slice(start,end) 方法可从已有的数组中返回选定的元素。
+		 * start => 从何处开始选取。如果是负数,那么从数组尾部开始算起。
+		 * end => 是数组片断结束处的数组下标。默认从 start 到数组结束的所有元素。
+		 *        如果这个参数是负数,那么从数组尾部开始算起
+		 */
+		if (resultArr.length > rowNum) {
+			let sliceArr = resultArr.slice(0, rowNum);
+			// 判断截取数组的最后一个元素宽度是否和传入宽度相等,若相等,拼接"..."
+			let eslipStr = sliceArr[rowNum - 1];
+			if (ctx.measureText(eslipStr).width >= textWidth) {
+				eslipStr += '...';
+				// 将数组最后一个元素替换为拼接了'...'的字符串
+				/**
+				 * splice() 方法可删除从 index 处开始的零个或多个元素,
+				 * 并且用参数列表中声明的一个或多个值来替换那些被删除的元素
+				 * 返回的是含有被删除的元素的数组
+				 * 会直接对数组进行修改
+				 */
+				sliceArr.splice(rowNum - 1, 1, eslipStr);
+			}
+			resultArr = sliceArr;
+		}
+		/**
+		 * 绘制文字
+		 */
+		ctx.textBaseline = 'top';
+		ctx.setFillStyle(color);
+		ctx.font = weight + size + ' Arial, Helvetica, sans-serif';
+		for (let index = 0; index < resultArr.length; index++) {
+			ctx.fillText(resultArr[index], x, y + index * lineHeight);
+		}
+	}
+	//画四边形
+	lineSet(
+		ctx,
+		x : number,
+		y : number,
+		w : number,
+		h : number,
+	) {
+		// ctx,起点x坐标,起点y坐标,宽度,高度
+		ctx.beginPath();
+		ctx.strokeStyle = "#F6F6F6";
+		ctx.rect(x, y, w, h);
+		ctx.stroke();
+	}
+	// 绘制不规则圆角矩形 (任一圆角矩形)
+	roundRect(
+		ctx,
+		x : number,
+		y : number,
+		w : number,
+		h : number,
+		color : string,
+		r1 = 0,
+		r2 = 0,
+		r3 = 0,
+		r4 = 0
+	) {
+		// ctx,起点x坐标,起点y坐标,宽度,高度,圆角半径,颜色
+		ctx.beginPath();
+		ctx.moveTo(x + r4, y); // 从左上角横线起点开始画
+		ctx.lineTo(x + w - r1, y);
+		ctx.arcTo(x + w, y, x + w, y + r1, r1);
+		ctx.lineTo(x + w, y + h - r2);
+		ctx.arcTo(x + w, y + h, x + w - r2, y + h, r2);
+		ctx.lineTo(x + r3, y + h);
+		ctx.arcTo(x, y + h, x, h + y - r3, r3);
+		ctx.lineTo(x, y + r4);
+		ctx.arcTo(x, y, x + r4, y, r4);
+		ctx.closePath();
+		ctx.setFillStyle(color);
+		ctx.fill();
+	}
+	textSet(ctx, text, size, x, y, color, weight = 'normal ') {
+		ctx.setFillStyle(color);
+		ctx.font = weight + size + ' Arial, Helvetica, sans-serif';
+		ctx.fillText(text, x, y);
+	}
+	// 裁剪图片居中
+	drawImgInfo(ctx, dx, dy, dWidth, dHeight, head_img, imgX, imgY) {
+		if (!head_img) return;
+		// 裁剪图片居中,ctx, 位置,画布的宽高,图片,图片的实际宽高
+		let sx, sy, sWidth, sHeight;
+		if (imgX > imgY) {
+			//获取图片(裁剪)后的实际宽高,即取图片最短边作为原始边长
+			sWidth = (imgY * dWidth) / dHeight;
+			sHeight = imgY;
+			sx = (imgX - sWidth) / 2;
+			sy = 0;
+		} else {
+			sWidth = imgX;
+			sHeight = (imgX * dHeight) / dWidth;
+			sx = 0;
+			sy = (imgY - sHeight) / 2;
+		}
+		ctx.drawImage(head_img, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
+	}
+	// 绘制圆角矩形图片
+	roundImg(ctx, x, y, w, h, r, color, url) {
+		// ctx,起点x坐标,起点y坐标,宽度,高度,圆角半径,颜色,图片地址
+		ctx.save(); // 保存当前环境的状态.  ctx.save();ctx.restore()避免clip对全局造成影响
+		ctx.beginPath();
+		ctx.moveTo(x + r, y); // 从左上角横线起点开始画
+		ctx.lineTo(x + w - r, y);
+		ctx.arcTo(x + w, y, x + w, y + r, r);
+		ctx.lineTo(x + w, y + h - r);
+		ctx.arcTo(x + w, y + h, x + w - r, y + h, r);
+		ctx.lineTo(x + r, y + h);
+		ctx.arcTo(x, y + h, x, h + y - r, r);
+		ctx.lineTo(x, y + r);
+		ctx.arcTo(x, y, x + r, y, r);
+		ctx.closePath();
+		ctx.clip(); // 从原始画布剪切任意形状和尺寸的区域
+		ctx.drawImage(url, x, y, w, h); // 向画布上绘制图像、画布或视频
+		ctx.restore(); // 返回之前保存过的路径状态和属性
+		console.log(222);
+	}
+	// 绘制圆角图片
+	drawCircular(ctx, width, height, x, y, url) {
+		if (!url) return;
+		ctx.save(); // 保存当前环境的状态
+		ctx.beginPath(); // 起始一条路径,或重置当前路径
+		/**
+		 * ctx.arc(x,y,r,sAngle,eAngle,counterclockwise);
+		 * x:圆的中心的 x 坐标。
+		 * y:圆的中心的 y 坐标。
+		 * r:圆的半径。
+		 * sAngle:起始角,以弧度计。(弧的圆形的三点钟位置是 0 度)。
+		 * eAngle:结束角,以弧度计。
+		 * counterclockwise:可选,规定应该逆时针还是顺时针绘图。False = 顺时针,true = 逆时针。
+		 */
+		ctx.arc(width / 2 + x, height / 2 + y, width / 2, 0, Math.PI * 2, false); // 创建弧/曲线(用于创建圆形或部分圆)
+		ctx.clip(); // 从原始画布剪切任意形状和尺寸的区域
+		ctx.drawImage(url, x, y, width, height); // 向画布上绘制图像、画布或视频
+		ctx.restore(); // 返回之前保存过的路径状态和属性
+	}
+	// 保存分享图片
+	saveImageToPhotos(id) : void {
+		const that = this;
+		console.log(2222222);
+		uni.showLoading({
+			title: '生成图片中...'
+		});
+		/**
+		 * uni.canvasToTempFilePath(Object object, Object this)
+		 * 把当前画布指定区域的内容导出生成指定大小的图片。
+		 * 在 draw() 回调里调用该方法才能保证图片导出成功。
+		 * canvasId => 画布标识,传入 canvas 组件的 canvas-id
+		 * 使用自定义组件调取 uni.canvasToTempFilePath 接口获取不到canvas,同样的需要传入上下文的this
+		 */
+		uni.canvasToTempFilePath(
+			{
+				canvasId: id,
+				success(res) {
+					console.log('canvasTemppath', res);
+					// tempFilePath => 生成文件的临时路径 (本地路径)
+					const canvasTemppath : string = res.tempFilePath;
+					uni.hideLoading();
+					/**
+					 * uni.saveImageToPhotosAlbum(Object object)
+					 * 保存图片到系统相册。
+					 * 调用前需要 用户授权 scope.writePhotosAlbum
+					 * filePath => 图片文件路径,可以是临时文件路径或永久文件路径 (本地路径) ,不支持网络路径
+					 */
+					// #ifndef H5
+					uni.saveImageToPhotosAlbum({
+						filePath: canvasTemppath,
+						success(res) {
+							uni.showToast({
+								title: '保存成功',
+								icon: 'success',
+								duration: 1500
+							});
+						},
+						fail(res) {
+							console.error('saveImageToPhotosAlbum-err', res);
+							if (
+								res.errMsg === 'saveImageToPhotosAlbum:fail:auth denied' ||
+								res.errMsg === 'saveImageToPhotosAlbum:fail auth deny' ||
+								res.errMsg === 'saveImageToPhotosAlbum:fail authorize no response'
+							) {
+								uni.showModal({
+									title: '提示',
+									content: '需要您授权保存相册',
+									showCancel: false,
+									success(res) {
+										/**
+										 * uni.openSetting(Object object)
+										 * 调起客户端小程序设置界面,返回用户设置的操作结果。
+										 * 设置界面只会出现小程序已经向用户请求过的权限。
+										 * withSubscriptions => 是否同时获取用户订阅消息的订阅状态,默认不获取。
+										 * withSubscriptions 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。
+										 * "scope.writePhotosAlbum" => 保存到相册的权限
+										 */
+										uni.openSetting({
+											success(settingdata) {
+												if (
+													settingdata.authSetting[
+													'scope.writePhotosAlbum'
+													]
+												) {
+													uni.showModal({
+														title: '提示',
+														content: '授权成功,再次点击图片即可保存',
+														showCancel: false
+													});
+												} else {
+													uni.showModal({
+														title: '提示',
+														content: '获取权限失败,无法保存到相册哦~',
+														showCancel: false
+													});
+												}
+											},
+											fail(res) {
+												console.error('openSetting-err', res);
+											}
+										});
+									}
+								});
+							} else {
+								uni.showToast({
+									title: '保存失败,请稍后重试~',
+									icon: 'none',
+									duration: 1500
+								});
+							}
+						}
+					});
+					// #endif
+					// #ifdef H5
+					var oA = document.createElement("a");
+					oA.download = ''; // 设置下载的文件名,默认是'下载'
+					oA.href = canvasTemppath;
+					document.body.appendChild(oA);
+					oA.click();
+					oA.remove(); // 下载之后把创建的元素删除
+					// #endif
+				},
+				fail(res) {
+					console.log('canvasToTempFilePath-fail', res);
+					if (res.errMsg === 'saveImageToPhotosAlbum:fail cancel') {
+						uni.showToast({
+							title: '取消保存',
+							icon: 'none',
+							duration: 1500
+						});
+					} else {
+						uni.showToast({
+							title: '保存失败,请稍后重试',
+							icon: 'none',
+							duration: 1500
+						});
+					}
+				}
+			},
+			this
+		);
+	}
+}

+ 42 - 0
src/common/mixins/loginMixin.ts

@@ -0,0 +1,42 @@
+import { Vue, Component } from 'vue-property-decorator';
+import {namespace} from 'vuex-class';
+import { types } from '@/common/store/index';
+const baseModule = namespace('base');
+@Component({})
+export default class LoginMixin extends Vue {
+	@baseModule.Getter('_userInfo') _userInfo: any;
+	@baseModule.Getter('_token') _token: any;
+	@baseModule.Mutation(types.SET_USERINFO) _setUserInfo: any;
+	
+	isAuthorization(){
+		if(!this._token){
+			this.$Router.push('/pages/login/login');
+			return true;
+		}
+	}
+		
+		
+	/**
+	 * 获取用户信息 
+	 * GET
+	 * */
+	getUserInfo () {
+	  uni.showLoading({
+		title: '加载中',
+	  });
+	  return this.$http.get({
+		  url:this.$api.getUserInfo
+	  })
+		.then((res:any) => {
+		  uni.hideLoading();
+		  if (res) {
+			// let {info, ...extra } = res;
+			this._setUserInfo(res)
+		  }
+		})
+		.catch((err:any) => {
+		  uni.hideLoading();
+		  console.log(err)
+		})
+	}
+}

File diff suppressed because it is too large
+ 0 - 0
src/common/qqmap-wx-jssdk.min.js


+ 181 - 0
src/common/store/base/index.ts

@@ -0,0 +1,181 @@
+import {
+	SET_TOKEN,
+	LOGOUT,
+	SET_ISLOGIN,
+	SET_USERINFO,
+	SET_REFERRERID,
+	SET_ISNOTICE,
+	SET_TABBARINDEX,
+	SET_STARTTIME,
+	SET_ENDTIME,
+	SET_ISPLAY,
+	SET_ADDRESS,
+	SET_REMARK,
+	SET_GOODS,
+	SET_SEARCHHISTORY,
+	SET_CARTGOODS,
+	ADD_CARTGOODS,
+	EMPTY_SEARCHHISTORY,
+	DELETE_SEARCHHISTORY,
+	SET_SEARCHHISTORY2,
+	EMPTY_SEARCHHISTORY2,
+	DELETE_SEARCHHISTORY2
+} from '@/common/store/types';
+
+const module = {
+  namespaced: true,
+  state() {
+    return {
+       token: uni.getStorageSync('token'),
+	   // token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjEsInNpZCI6MCwiYWdlbnQiOjEsImdlbnJlIjowLCJCdWZmZXJEdXJhdGlvbiI6ODY0MDAwMDAwMDAwMDAsImlzcyI6Imh1YXl1YW54aSIsImV4cCI6MTY5MjkzNDc4MywibmJmIjoxNjkwMzQyNzgzLCJpYXQiOjE2OTAzNDI3ODN9.i0UtSotTnEFPVQO1L3i8eoawyPNazYewWGWydvbpTYw',
+	   isLogin: uni.getStorageSync('isLogin') || false,
+	   userInfo: uni.getStorageSync('userInfo') || {},
+	   referrerId: uni.getStorageSync('referrerId'),
+	   isPlay: uni.getStorageSync('isPlay'),
+	   goods: uni.getStorageSync('goods') || [],
+	   searchHistory: uni.getStorageSync('searchHistory')||[],
+	   searchHistory2: uni.getStorageSync('searchHistory2')||[],
+	   cartGoods: uni.getStorageSync('cartGoods') || [],
+	   address: null,
+	   remark: '',
+	   isNotice: false,
+	   tabBarIndex: 0,
+	   startTime: '',
+	   endTime:''
+    }
+  },
+  getters: {
+    _token:(state:any)=> state.token,
+	_isLogin: (state:any) => state.isLogin,
+	_referrerId: (state:any) => state.referrerId,
+	_userInfo:(state:any)=> JSON.parse(JSON.stringify(state.userInfo)),
+	_isNotice: (state:any) => state.isNotice,
+	_tabBarIndex: (state:any) => state.tabBarIndex,
+	_startTime: (state:any) => state.startTime,
+	_endTime: (state:any) => state.endTime,
+	_isPlay: (state:any) => state.isPlay,
+	_address: (state:any) => state.address,
+	_remark: (state:any) => state.remark,
+	_goods: (state:any) => state.goods,
+	_searchHistory: (state: any) => JSON.parse(JSON.stringify(state.searchHistory)),
+	_searchHistory2: (state: any) => JSON.parse(JSON.stringify(state.searchHistory2)),
+	_cartGoods:(state: any) => JSON.parse(JSON.stringify(state.cartGoods))
+  },
+  mutations: {
+    // 登录成功将, token保存在localStorage中
+    [SET_TOKEN]: (state:any, data:any) => {
+      uni.setStorageSync('token', data);
+      state.token = data;
+    },
+	// 退出登录将, token清空
+	[LOGOUT]: (state:any) => {
+	  uni.removeStorageSync('token');
+	  uni.removeStorageSync('userInfo');
+	  uni.removeStorageSync('isLogin');
+	  state.token = '';
+	  state.userInfo = null;
+	  state.isLogin = false;
+	},
+	// 登录状态
+	[SET_ISLOGIN]: (state:any, data:any) => {
+	  uni.setStorageSync('isLogin', data);
+	  state.isLogin = data;
+	},
+	// 用户信息
+	[SET_USERINFO]: (state:any, data:any) => {
+	  uni.setStorageSync('userInfo', data);
+	  state.userInfo = data;
+	},
+	// 保存推荐人
+	[SET_REFERRERID]: (state:any, data:any) => {
+	  uni.setStorageSync('referrerId', data);
+	  state.referrerId = data;
+	},
+	// tabbar
+	[SET_TABBARINDEX]: (state:any, data:any) => {
+		state.tabBarIndex = data;
+	},
+	[SET_STARTTIME]: (state:any, data:any) => {
+	  state.startTime = data;
+	},
+	[SET_ENDTIME]: (state:any, data:any) => {
+	  state.endTime = data;
+	},
+	[SET_ADDRESS]: (state:any, data:any) => {
+	  state.address = data;
+	},
+	[SET_GOODS]: (state:any, data:any) => {
+	  uni.setStorageSync('goods', data);
+	  state.goods = data;
+	},
+	// 购物车数据
+	[SET_CARTGOODS]: (state: any, data: any) => {
+		uni.setStorageSync('cartGoods', data);
+		state.cartGoods = data;
+	},
+	// 搜索历史数据
+	[SET_SEARCHHISTORY]: (state: any, data: any) => {
+		if(!data) return;
+		let val:Array<any> = state.searchHistory||[]
+		let index = val.findIndex((item: any) => item === data);
+		(index > -1) && val.splice(index,1);
+		val.unshift(data);
+		uni.setStorageSync('searchHistory', val);
+	},
+	// 清空搜索记录
+	[EMPTY_SEARCHHISTORY]:(state: any, data: any) => {
+		state.searchHistory = [];
+		uni.setStorageSync('searchHistory', []);
+	},
+	[DELETE_SEARCHHISTORY]: (state: any, data: any) => {
+		if(!data) return;
+		let val:Array<any> = state.searchHistory||[]
+		let index = val.findIndex((item: any) => item === data);
+		(index > -1) && val.splice(index,1);
+		uni.setStorageSync('searchHistory', val);
+	},
+	// 搜索历史数据
+	[SET_SEARCHHISTORY2]: (state: any, data: any) => {
+		if(!data) return;
+		let val:Array<any> = state.searchHistory2||[]
+		let index = val.findIndex((item: any) => item === data);
+		(index > -1) && val.splice(index,1);
+		val.unshift(data);
+		uni.setStorageSync('searchHistory2', val);
+	},
+	// 清空搜索记录
+	[EMPTY_SEARCHHISTORY2]:(state: any, data: any) => {
+		state.searchHistory2 = [];
+		uni.setStorageSync('searchHistory2', []);
+	},
+	[DELETE_SEARCHHISTORY2]: (state: any, data: any) => {
+		if(!data) return;
+		let val:Array<any> = state.searchHistory2||[]
+		let index = val.findIndex((item: any) => item === data);
+		(index > -1) && val.splice(index,1);
+		uni.setStorageSync('searchHistory2', val);
+	},
+  },
+  actions: {
+    [ADD_CARTGOODS]:({state,commit}:any,goodsInfo: any) => {
+    	const cartFlag = state.cartGoods.find((res: any)=> res.sku_id == goodsInfo.sku_id)
+    	
+    	if(!cartFlag){
+    		goodsInfo.check = false;
+    		state.cartGoods.unshift(goodsInfo);
+    	}else{
+    		state.cartGoods.forEach((res: any)=>{
+    			if(res.sku_id == goodsInfo.sku_id){
+    				res.num += goodsInfo.num;
+    			}
+    		})
+    		console.log('数量加的有点问题呀',state.cartGoods,goodsInfo.num);
+    	}
+    	commit(SET_CARTGOODS,state.cartGoods);
+    	console.log('state.cartGoods------>',state.cartGoods)
+    	console.log('goodsInfo------>',goodsInfo)
+    }
+  }
+}
+
+export default module;

+ 45 - 0
src/common/store/canvas/index.ts

@@ -0,0 +1,45 @@
+// @ts-nocheck
+import {
+	SET_CANVASDATA,
+	REFRESHCANVAS
+} from '@/common/store/types';
+
+let canvasData ={
+	avatar: '',
+	title: '',
+	shareImg: '',
+	qr: '',
+	tips: '推荐给你一个好店'
+}
+const module = {
+  namespaced: true,
+  state() {
+    return {
+	   canvasData: uni.getStorageSync('canvasData')|| canvasData,
+    }
+  },
+  getters: {
+	_canvasData:(state:any)=> state.canvasData
+  },
+  mutations: {
+	// 海报信息
+	[SET_CANVASDATA]: (state:any, { data, type}) => {
+	  let newobj = uni.getStorageSync('canvasData') || canvasData
+	  newobj[type] = data;
+	  uni.setStorageSync(`canvasData`, newobj)
+	  state.canvasData[type] = data
+	},
+	 // 清空当前缓存
+	 [REFRESHCANVAS]:(state:any, type:string)=>{
+	    let newobj = uni.getStorageSync('canvasData') || canvasData
+	    newobj[type] = img[type]
+	    uni.setStorageSync(`canvasData`, newobj)
+	    state.canvasData[type] = img[type]
+	  }
+  },
+  actions: {
+    
+  }
+}
+
+export default module;

+ 29 - 0
src/common/store/index.ts

@@ -0,0 +1,29 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import * as types from './types';
+import base from './base';
+import canvas from './canvas';
+
+Vue.use(Vuex);
+
+const store = new Vuex.Store({
+	state: {
+		
+	},
+	mutations: {
+		
+	},
+	getters: {
+		
+	},
+	modules: {
+		base,
+		canvas,
+	}
+});
+
+export default store;
+
+export {
+	types,
+};

+ 48 - 0
src/common/store/types.ts

@@ -0,0 +1,48 @@
+const SET_TOKEN = 'set_token';
+const LOGOUT = 'logout';
+const SET_ISLOGIN = 'setIsLogin';
+const SET_USERINFO = 'setUserInfo';
+const SET_REFERRERID = 'setReferrerId';
+const SET_CANVASDATA = 'setCanvasData';
+const REFRESHCANVAS = 'refreshCanvas';
+const SET_TABBARINDEX = 'tabBarIndex';
+const SET_ISNOTICE = 'setIsNotice';
+const SET_STARTTIME = 'set_startTime';
+const SET_ENDTIME = 'set_endtTime';
+const SET_ISPLAY = 'set_isPlay';
+const SET_ADDRESS = 'set_address';
+const SET_REMARK = 'set_remark';
+const SET_GOODS = 'set_goods';
+const SET_SEARCHHISTORY = 'set_searchHistory';
+const SET_CARTGOODS = 'set_cartGoods';
+const ADD_CARTGOODS = 'add_cartGoods';
+const EMPTY_SEARCHHISTORY = 'empty_searchHistory';
+const DELETE_SEARCHHISTORY = 'delete_searchHistory';
+const SET_SEARCHHISTORY2 = 'set_searchHistory2';
+const EMPTY_SEARCHHISTORY2 = 'empty_searchHistory2';
+const DELETE_SEARCHHISTORY2 = 'delete_searchHistory2';
+export {
+  SET_TOKEN,
+  SET_ISLOGIN,
+  SET_USERINFO,
+  SET_REFERRERID,
+  LOGOUT,
+  SET_CANVASDATA,
+  REFRESHCANVAS,
+  SET_TABBARINDEX,
+  SET_ISNOTICE,
+  SET_STARTTIME,
+  SET_ENDTIME,
+  SET_ISPLAY,
+  SET_ADDRESS,
+  SET_REMARK,
+  SET_GOODS,
+  SET_SEARCHHISTORY,
+  SET_CARTGOODS,
+  ADD_CARTGOODS,
+  EMPTY_SEARCHHISTORY,
+  DELETE_SEARCHHISTORY,
+  SET_SEARCHHISTORY2,
+  EMPTY_SEARCHHISTORY2,
+  DELETE_SEARCHHISTORY2
+};

+ 143 - 0
src/common/utils.ts

@@ -0,0 +1,143 @@
+//加法函数,用来得到精确的加法结果 
+export function accAdd(arg1: any,arg2: any){ 
+var r1,r2,m; 
+try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} 
+try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} 
+m=Math.pow(10,Math.max(r1,r2)) 
+return (arg1*m+arg2*m)/m 
+} 
+
+
+//减法函数,用来得到精确的加法结果 
+//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 
+//调用:accAdd(arg1,arg2) 
+//返回值:arg1加上arg2的精确结果 
+export function accSub(arg1: any,arg2: any){
+    var r1,r2,m,n;
+    try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
+    try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
+    m=Math.pow(10,Math.max(r1,r2));
+    //动态控制精度长度
+    n=(r1>=r2)?r1:r2;
+    return ((arg1*m-arg2*m)/m).toFixed(n);
+}
+
+//乘法函数
+export function accMul(arg1:any, arg2:any){
+   var t1 = 0, t2 = 0,s1 = arg1.toString(), s2 = arg2.toString(),r1,r2;
+    try {t1= s1.split(".")[1].length;}catch (e) {}
+    try {t2= s2.split(".")[1].length;}catch (e) {}
+	r1 = Number(s1.replace(".", ""));
+	r2 = Number(s2.replace(".", ""));
+    return r1 * r2 / Math.pow(10, t1+t2);
+}
+
+// 除法
+export function accDiv(arg1:any, arg2:any) {
+    var t1 = 0, t2 = 0, s1 = arg1.toString(), s2 = arg2.toString(),r1,r2;
+    try {t1 = s1.split(".")[1].length;}catch (e) {}
+    try {t2 = s2.split(".")[1].length;}catch (e) {}
+	r1 = Number(s1.replace(".", ""));
+	r2 = Number(s2.replace(".", ""));
+	return (r1 / r2) * Math.pow(10, t2 - t1);
+}
+/**
+ * 格式化数字
+ * @param num 要格式化的数字
+ * @param len 保留小数位数默认2
+ * @param type 格式化方式0:四舍五入 1:进一  2:舍去 默认0
+ * @return string
+ */
+ export function format_number(num:any,len:any,type:any) {
+    len = len > 0 && len <= 20 ? len : 2;
+    var result = parseFloat(num);
+    num=isNaN(result)?0:result;
+    var numpow=Math.pow(10,len);
+    var numcheng=accMul(num,numpow);
+    if(type==1){//ceil进一 
+    	result = Math.ceil(numcheng);
+    }else if(type==2){//floor舍去
+    	result = Math.floor(numcheng);
+    }else{//round四舍五入 
+    	result = Math.round(numcheng);
+    }
+    result =accDiv(result,numpow);
+    var s_x = result.toString();
+    var pos_decimal = s_x.indexOf('.');
+    if (pos_decimal < 0) {pos_decimal = s_x.length;s_x += '.';}
+    while (s_x.length <= pos_decimal + len) {s_x += '0';}
+    return s_x;
+}
+
+export function Arabia_To_SimplifiedChinese(Num: any): any {
+  for (let i = Num.length - 1; i >= 0; i--) {
+      Num = Num.replace(',', '');// 替换Num中的“,”
+      Num = Num.replace(' ', '');// 替换Num中的空格
+  }
+
+  // 验证输入的字符是否为数字
+  if (isNaN(Num)) {
+      alert('请检查小写金额是否正确');
+      return;
+  }
+
+  // 字符处理完毕后开始转换,采用前后两部分分别转换(小数点为界限)
+ var part = String(Num).split('.');
+
+  // 初始化一个字符串
+  var newchar = '';
+
+  // 小数点前进行转化
+  for (let i = part[0].length - 1; i >= 0; i--) {
+      // 若数量超过拾亿单位,提示
+      if (part[0].length > 10) {
+          // alert("位数过大,无法计算");
+          return '';
+      }
+
+     let tmpnewchar:string = '';
+     let perchar:any = part[0].charAt(i);
+
+      switch (perchar) {
+          case '0': tmpnewchar = '零' + tmpnewchar; break;
+          case '1': tmpnewchar = '一' + tmpnewchar; break;
+          case '2': tmpnewchar = '二' + tmpnewchar; break;
+          case '3': tmpnewchar = '三' + tmpnewchar; break;
+          case '4': tmpnewchar = '四' + tmpnewchar; break;
+          case '5': tmpnewchar = '五' + tmpnewchar; break;
+          case '6': tmpnewchar = '六' + tmpnewchar; break;
+          case '7': tmpnewchar = '七' + tmpnewchar; break;
+          case '8': tmpnewchar = '八' + tmpnewchar; break;
+          case '9': tmpnewchar = '九' + tmpnewchar; break;
+      }
+      switch (part[0].length - i - 1) {
+          case 0: tmpnewchar = tmpnewchar; break;
+          case 1: if (perchar != 0) tmpnewchar = tmpnewchar + '十'; break;
+          case 2: if (perchar != 0) tmpnewchar = tmpnewchar + '百'; break;
+          case 3: if (perchar != 0) tmpnewchar = tmpnewchar + '千'; break;
+          case 4: tmpnewchar = tmpnewchar + '万'; break;
+          case 5: if (perchar != 0) tmpnewchar = tmpnewchar + '十'; break;
+          case 6: if (perchar != 0) tmpnewchar = tmpnewchar + '百'; break;
+          case 7: if (perchar != 0) tmpnewchar = tmpnewchar + '千'; break;
+          case 8: tmpnewchar = tmpnewchar + '亿'; break;
+          case 9: tmpnewchar = tmpnewchar + '十'; break;
+      }
+      newchar = tmpnewchar + newchar;
+  }
+  // 替换所有无用汉字,直到没有此类无用的数字为止
+  while (newchar.search('零零') != -1 || newchar.search('零亿') != -1 || newchar.search('亿万') != -1 || newchar.search('零万') != -1) {
+      newchar = newchar.replace('零亿', '亿');
+      newchar = newchar.replace('亿万', '亿');
+      newchar = newchar.replace('零万', '万');
+      newchar = newchar.replace('零零', '零');
+  }
+  // 替换以“一十”开头的,为“十”
+  if (newchar.indexOf('一十') == 0) {
+      newchar = newchar.substr(1);
+  }
+  // 替换以“零”结尾的,为“”
+  if (newchar.lastIndexOf('零') == newchar.length - 1) {
+      newchar = newchar.substr(0, newchar.length - 1);
+  }
+  return newchar;
+}

File diff suppressed because it is too large
+ 4 - 0
src/common/weapp.qrcode.min.js


+ 209 - 0
src/components/AddressPopup/AddressPopup.vue

@@ -0,0 +1,209 @@
+<template>
+	<view class='content'>
+		<uni-popup ref="popup" :safe-area="false">
+			<view class="address-popup">
+				<view class="address-head">
+					<view class="address-title">选择地址</view>
+					<!-- <text class="icon" @click="close">&#xe6f0;</text> -->
+				</view>
+				<view class="noData" v-if="!addressList.length">
+					<text class="word16">暂无地址</text>
+				</view>
+				<scroll-view class="scroll-styl" scroll-y="true">
+					<view class="address-card" v-for="(item,index) in addressList" :key="index"
+						@click="clickAddress(item)">
+						<view class="address-left">
+							<!-- 选中的圈圈 -->
+							<view class="quan-styl" v-if="item.id == chooseId">
+								<view class="small-quan"></view>
+							</view>
+							<!-- 未选中圈圈 -->
+							<view class="quan-styl1" v-else></view>
+							<view class="address-info">
+								<view class="address-detail">
+									{{item.province_str + item.city_str + item.county_str + item.address}}</view>
+								<view class="user-info">
+									<view class="user-name">{{item.name}}</view>
+									<view class="user-phone">{{item.phone}}</view>
+								</view>
+							</view>
+						</view>
+						<text class="address-right" @click.stop="toEditress(item)">&#xe889;</text>
+					</view>
+				</scroll-view>
+				<view class="btn-styl" @click="toAddress">+新增收货地址</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit
+	} from 'vue-property-decorator';
+	import {
+		Getter,
+		Mutation
+	} from 'vuex-class';
+	@Component({})
+
+	export default class AddressPopup extends Vue {
+		@Prop({
+			default: []
+		}) addressList ? : any;
+		@Prop({
+			default: 0
+		}) chooseId ? : any; //选中id
+
+		// methods-----------------------
+		//选择收货地址
+		// clickAddress(val: any): void {
+		// 	console.log('地址信息',val);
+		// 	this.chooseId = val.uid;
+		// 	this.close();
+		// }
+		// 跳转新增收货地址页
+		toAddress() {
+			(this.$refs.popup as any).close();
+			this.$Router.push({
+				path: '/packages/order/address-detail',
+				query: {}
+			});
+		}
+		// 跳转新增收货地址页
+		toEditress(val: any) {
+			(this.$refs.popup as any).close();
+			this.$Router.push({
+				path: '/packages/order/address-detail?id=' + val.id,
+				query: {}
+			});
+		}
+		//打开弹窗
+		open(): void {
+			(this.$refs.popup as any).open('bottom');
+		}
+		//关闭弹窗
+		close(): void {
+			(this.$refs.popup as any).close();
+		}
+
+		// emit----------------------
+		@Emit('clickAddress')
+		clickAddress(val: any) {
+			console.log('地址信息', val);
+			// this.chooseId = val.id;
+			this.close();
+			return val
+		}
+
+	}
+</script>
+
+<style lang='scss' scoped>
+	.content {
+		box-sizing: border-box;
+
+		.address-popup {
+			background-color: #F9F9F9;
+			border-top-left-radius: vw(34);
+			border-top-right-radius: vw(34);
+			padding: 0 vw(20) vw(16);
+
+			.address-head {
+				text-align: center;
+
+				.address-title {
+					@include word-vw(18, $gray3);
+					padding: vw(18) 0;
+				}
+
+				.icon {
+					@include icon(16, $gray9);
+					position: absolute;
+					right: 20px;
+					top: 20px;
+				}
+			}
+
+			.noData {
+				width: 100%;
+				margin: vw(20) 0;
+				@include flex-y(center, center);
+
+				.word16 {
+					/* margin-left: vw(20); */
+					@include word-vw(16, $gray9);
+				}
+			}
+
+			.scroll-styl {
+				max-height: vw(300);
+				overflow-y: scroll;
+				@include hide-scrollbar();
+
+				.address-card {
+					@include flex-x();
+					padding: vw(15) vw(22) vw(12) vw(18);
+					border-bottom: 1px solid #F8F8F8;
+					background: #fff;
+					border-radius: vw(8);
+
+					.address-left {
+						@include flex-x(flex-start);
+
+						.quan-styl {
+							@include flex-x(center);
+							@include wh(20, 20);
+							border-radius: 100%;
+							border: 2px solid $btn-color;
+
+							.small-quan {
+								@include wh(14, 14);
+								border-radius: 100%;
+								background-color: $btn-color;
+							}
+						}
+
+						.quan-styl1 {
+							@include wh(20, 20);
+							border-radius: 100%;
+							border: 2px solid #EFEFEF;
+						}
+
+						.address-info {
+							margin-left: vw(9);
+
+							.address-detail {
+								max-width: vw(260);
+								font-size: vw(12);
+								@include ellipsis();
+							}
+
+							.user-info {
+								@include flex-x(flex-start);
+								@include word-vw(11, $gray9);
+								margin-top: vw(4);
+
+								.user-phone {
+									margin-left: vw(16);
+								}
+							}
+						}
+
+					}
+				}
+			}
+
+			.address-right {
+				@include icon(18, $gray9);
+			}
+		}
+
+		.btn-styl {
+			@include solid-btn(335, 50, #ffffff, 25);
+			margin: vw(20) auto vw(10) auto;
+		}
+	}
+</style>

+ 162 - 0
src/components/AppShare/AppShare.vue

@@ -0,0 +1,162 @@
+<template>
+	<view class="share-container">
+		<uni-popup ref="popup" type="center">
+			<view class="wrapper" v-if="popShow">
+				<canvas canvas-id="shareCanvas" class="canvas" style="width: 250px;height:430px;"></canvas>
+				<view class="bottom">
+					<button class="bottom-btn" open-type="share">
+						<image :src="static + 'wechat.png'"></image>
+						<view class="text">分享好友</view>
+					</button>
+					<view class="bottom-btn" @click="saveImageToPhotos('shareCanvas')">
+						<image :src="static + 'download.png'"></image>
+						<view class="text">保存图片</view>
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script lang="ts">
+	// @ts-nocheck
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		Mixins
+	} from 'vue-property-decorator';
+	import {
+		types
+	} from '@/common/store';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	import canvasMixin from '@/common/mixins/canvasMixin.ts';
+	import {
+		namespace
+	} from 'vuex-class';
+	const canvasModule = namespace('canvas');
+	const baseModule = namespace('base');
+	@Component({})
+	export default class ShopShare extends Mixins(canvasMixin) {
+		@canvasModule.Getter('_canvasData') _canvasData: any;
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		popShow: boolean = false;
+		static: string = OSS_STATIC;
+
+		closePop(): void {
+			(this.$refs.popup as any).close();
+			this.popShow = false;
+		}
+		openPop(): void {
+			(this.$refs.popup as any).open();
+			this.popShow = true;
+			uni.showLoading({
+				title: '加载中'
+			});
+			this.drawPoster();
+		}
+		mounted() {}
+		drawPoster(): void {
+			// 绘制海报
+			// 注意:page页面canvas-id获取ctx,组件需传this
+			const that = this;
+			const ctx = uni.createCanvasContext('shareCanvas', this);
+			// 绘制白色底
+			this.roundRect(ctx, 0, 0, 250, 460, '#ffffff', 8, 8, 8, 8);
+			this.roundRect(ctx, 0, 0, 250, 48, '#fff', 8, 0, 0, 8);
+			// 绘制头像
+			this.drawCircular(ctx, 24, 24, 13, 15, that._canvasData.avatar);
+			this.ellipsisText(
+				ctx,
+				that._userInfo.nickname,
+				200,
+				43,
+				13,
+				'#999',
+				'10px',
+				14
+			);
+			// 绘制宣传语
+			this.ellipsisText(
+				ctx,
+				that._canvasData.tips,
+				200,
+				43,
+				27,
+				'#454545',
+				'10px',
+				14
+			);
+			this.textSet(ctx, '”', '45px', 135, 20, '#ddd');
+			// 绘制店铺图片
+			this.drawImgInfo(
+				ctx,
+				10,
+				50,
+				230,
+				230,
+				that._canvasData.shareImg,
+				// that._canvasData.width,
+				// that._canvasData.height
+			);
+			// this.textSet(ctx, that._canvasData.title, '24px', 13, 360, '#333', 'bold ');
+			this.textSet(ctx, '爱润妍', '10px', 13, 348, '#999');
+			this.textSet(ctx, '爱润妍', '14px', 13, 365, '#000', 'bold ');
+			// // 小程序码
+			ctx.drawImage(that._canvasData.qr, 150, 295, 90, 90);
+			this.textSet(ctx, '长按识别进店铺', '10px', 90, 400, '#999999');
+			ctx.draw(true, () => {
+				console.log('draw,true');
+				uni.hideLoading();
+			});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.wrapper {
+		@include flex-y();
+		width: 250px;
+	}
+
+	.canvas {
+		border-radius: vw(5);
+		overflow: hidden;
+		margin-top: vw(50);
+	}
+
+	.bottom {
+		width: 230px;
+		margin-top: vw(15);
+		@include flex-x();
+
+		.text {
+			@include word-vw(14, white);
+			line-height: vw(20);
+			margin-top: vw(5);
+		}
+
+		image {
+			width: vw(60);
+			height: vw(60);
+		}
+	}
+
+	button {
+		background: none;
+		line-height: 1;
+		padding: 0;
+		margin: 0;
+	}
+
+	button::after {
+		border: 0px;
+	}
+
+	.button-hover {
+		background: none;
+	}
+</style>

+ 98 - 0
src/components/BottomPopup/BottomPopup.vue

@@ -0,0 +1,98 @@
+<template>
+	<view>
+		<uni-popup ref="bottom_popup" type="bottom" is-mask-click="true" :safe-area="false">
+			<view class="long-data-picker">
+				<view class="title">{{title}}</view>
+				<view class="item" v-for="(item, index) in dataList" :key="index" @click="chooseDate(item)">
+					{{item[keyName] || item}}
+				</view>
+				<!-- <view class="cancel item" @click="close">取消</view> -->
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "long-date",
+		props: {
+			dataList: {
+				type: Array,
+				default: []
+			},
+			chooseNum: {
+				type: Number,
+				default: 30
+			},
+			title: {
+				type: String,
+				default: '选择类型'
+			},
+			keyName: {
+				type: String,
+				default: ''
+			},
+			valueName: {
+				type: String,
+				default: ''
+			}
+
+		},
+		data() {
+			return {};
+		},
+		methods: {
+			//打开弹窗
+			open() {
+				this.$refs.bottom_popup.open();
+			},
+			// //关闭弹窗
+			close() {
+				this.$refs.bottom_popup.close();
+			},
+
+			//选择
+			chooseDate(item) {
+				this.$emit("selected", item);
+				this.close();
+			}
+
+		},
+
+	}
+</script>
+
+<style lang='scss' scoped>
+	.long-data-picker{
+		width: 100%;
+		box-sizing: border-box;
+		border-top-right-radius: vw(34);
+		border-top-left-radius: vw(34);
+		background: #F9F9F9;
+		@include flex-y();
+		padding: vw(24) 0;
+		max-height: 80vh;
+		overflow-y: auto;
+		flex-shrink: 0;
+	}
+	.title{
+		width: 100%;
+		@include word-vw(18, #333);
+		@include flex-x(center);
+		margin: vw(0) 0 vw(16);
+	}
+	.item {
+		width: vw(345);
+		height: vw(60);
+		border-radius: vw(8);
+		background: #fff;
+		@include flex-x(center);
+		@include word-vw(16, #333);
+		margin-bottom: vw(10);
+		flex-shrink: 0;
+	}
+
+	/* .cancel {
+		border-top: vw(3) solid #ddd;
+	} */
+</style>

+ 172 - 0
src/components/GoodItem/GoodItem.vue

@@ -0,0 +1,172 @@
+<template>
+	<view class="good-item" :class="{'good-item2': sortType === 2}" v-if="item"
+		:style="{background: bg,marginBottom: (marginBottom / 3.75) + 'vw'}" @click="handleDetail">
+		<view class="top">
+			<image :src="item.masterPic" class="img" mode="aspectFill"></image>
+		</view>
+		<view class="bottom">
+			<view class="good-name">{{item.name}}</view>
+			<!-- <view class="tip">{{item.tagline}}</view> -->
+			<view class="pre-price" v-if="sortType === 2"><text>原价:{{item.linePrice | moneyFormat}}</text></view>
+			<view class="price-box">
+				<view class="price">¥{{item.minPrice | moneyFormat}}</view>
+				<view class="pre-price" v-if="sortType === 1"><text>{{item.linePrice | moneyFormat}}</text></view>
+				<view class="good-car">
+					<IconText :code="`\ue89e`" size="18" color="#FF6803"></IconText>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class Navbar extends Vue {
+		@Prop({
+			default: {}
+		})
+		private item!: any; // 
+
+		@Prop({
+			default: '#fff'
+		})
+		private bg ? : string; // 
+
+		@Prop({
+			default: 10
+		})
+		private marginBottom ? : number; // 
+
+		@Prop({
+			default: 1
+		})
+		private sortType ? : number; // 
+
+		handleDetail() {
+			this.$Router.push({
+				path: '/packages/goods/good-detail',
+				query: {
+					// id: this.item.id,
+					id: this.item.id
+				}
+			});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.good-item {
+		// width: 100%;
+		@include flex-y(flex-start);
+		border-radius: vw(5);
+		box-sizing: border-box;
+		overflow: hidden;
+
+		.top {
+			.img {
+				width: vw(172);
+				height: vw(172);
+				display: block;
+			}
+		}
+
+		.bottom {
+			padding: vw(8);
+			width: 100%;
+			box-sizing: border-box;
+
+			.good-name {
+				width: vw(156);
+				@include ellipsis();
+				@include word-vw(14, #333);
+				// font-weight: 600;
+			}
+
+			.tip {
+				@include word-vw(12, #999);
+			}
+
+			.price-box {
+				width: 100%;
+				@include flex-x(flex-start);
+				margin-top: vw(8);
+
+				.price {
+					@include word-vw(14, #FF6803);
+					// font-weight: 600;
+
+					text {
+						@include word-vw(12, #fff);
+					}
+				}
+
+				.good-car {
+					flex: 1;
+					@include flex-x(flex-end);
+				}
+			}
+
+			.pre-price {
+				@include word-vw(10, #999);
+				margin-left: vw(5);
+
+				text {
+					text-decoration: line-through;
+				}
+			}
+		}
+	}
+
+	.good-item2 {
+		@include flex-x();
+		width: vw(355);
+
+		// width: 100%;
+		.top {
+			.img {
+				width: vw(156);
+				height: vw(156);
+				display: block;
+			}
+		}
+
+		.bottom {
+			height: 100%;
+			flex: 1;
+			height: vw(156);
+			padding: vw(16) vw(12);
+			box-sizing: border-box;
+			@include flex-y(flex-start, flex-start);
+			.good-name{
+				flex: 1;
+				width: 100%;
+				box-sizing: border-box;
+				white-space: pre-wrap;
+			}
+			.pre-price{
+				width: 100%;
+				margin-bottom: vw(4);
+				margin-left: 0;
+				font-size: vw(12);
+			}
+			.price-box{
+				.price {
+					@include word-vw(18, #E6456A);
+					// font-weight: 600;
+				}
+			}
+		}
+	}
+</style>

+ 207 - 0
src/components/GoodsShare/GoodsShare.vue

@@ -0,0 +1,207 @@
+<template>
+	<view class="share-container">
+		<uni-popup ref="popup" type="center">
+			<view class="wrapper" v-if="popShow">
+				<canvas canvas-id="shareCanvas" class="canvas" style="width: 250px;height:430px;"></canvas>
+				<view class="bottom">
+					<button class="bottom-btn" open-type="share">
+						<image :src="static + 'wechat.png'"></image>
+						<view class="text">分享好友</view>
+					</button>
+					<view class="bottom-btn" @click="saveImageToPhotos('shareCanvas')">
+						<image :src="static + 'download.png'"></image>
+						<view class="text">保存图片</view>
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script lang="ts">
+	// @ts-nocheck
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		Mixins
+	} from 'vue-property-decorator';
+	import {
+		types
+	} from '@/common/store';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	import canvasMixin from '@/common/mixins/canvasMixin.ts';
+	import {
+		namespace
+	} from 'vuex-class';
+	const canvasModule = namespace('canvas');
+	const baseModule = namespace('base');
+	@Component({})
+	export default class ShopShare extends Mixins(canvasMixin) {
+		@canvasModule.Getter('_canvasData') _canvasData: any;
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		@baseModule.Getter('_goods') goodsInfo: any;
+		popShow: boolean = false;
+		static: string = OSS_STATIC;
+
+		closePop(): void {
+			(this.$refs.popup as any).close();
+			this.popShow = false;
+		}
+		openPop(): void {
+			(this.$refs.popup as any).open();
+			this.popShow = true;
+			uni.showLoading({
+				title: '加载中'
+			});
+			this.drawPoster();
+		}
+		mounted() {}
+		drawPoster(): void {
+			// 绘制海报
+			// 注意:page页面canvas-id获取ctx,组件需传this
+			const that = this;
+			const ctx = uni.createCanvasContext('shareCanvas', this);
+			// 绘制白色底
+			this.roundRect(ctx, 0, 0, 250, 460, '#ffffff', 8, 8, 8, 8);
+			// 绘制头像
+			this.drawCircular(ctx, 24, 24, 13, 15, that._canvasData.avatar);
+			this.ellipsisText(
+				ctx,
+				that._userInfo.nickname,
+				// '爱润妍',
+				200,
+				43,
+				13,
+				'#999',
+				'10px',
+				14
+			);
+			// 绘制宣传语
+			this.ellipsisText(
+				ctx,
+				'推荐给你一个好物',
+				200,
+				43,
+				27,
+				'#454545',
+				'10px',
+				14
+			);
+			this.textSet(ctx, '”', '45px', 135, 20, '#ddd');
+			// 绘制店铺图片
+			this.drawImgInfo(
+				ctx,
+				10,
+				50,
+				230,
+				230,
+				that.goodsInfo.goodImg,
+				that.goodsInfo.width,
+				that.goodsInfo.height
+			);
+			// 商品标题
+			this.ellipsisText(
+				ctx,
+				that.goodsInfo.name,
+				180,
+				11,
+				291,
+				'#000',
+				'14px',
+				20,
+				1,
+				'bold '
+			);
+			// 商品副标题
+			this.ellipsisText(
+				ctx,
+				that.goodsInfo.tagline,
+				150,
+				11,
+				311,
+				'#999',
+				'10px',
+				14,
+				1
+			);
+			//  划线价
+			// let linePrice:string = '¥0.00';
+			// if (that.goodsInfo.linePrice) {
+			// 	linePrice = '¥' + Number(that.goodsInfo.linePrice).toFixed(2);
+			// }
+			// this.textSet(ctx, linePrice, '12px', 11, 340, '#999');
+			// let lineH = ctx.measureText(linePrice).width;
+			// ctx.moveTo(14, 347);
+			// ctx.lineTo(lineH + 20, 347);
+			// ctx.strokeStyle = '#999999';
+			// ctx.stroke();
+			// 商品价格
+			this.textSet(ctx, '¥', '12px', 11, 362, '#000', 'bold ');
+			this.textSet(
+				ctx,
+				Number(that.goodsInfo.minPrice).toFixed(2),
+				'19px',
+				19,
+				356,
+				'#000',
+				'bold '
+			);
+			// // 小程序码
+			ctx.drawImage(that._canvasData.goodQr, 150, 295, 90, 90);
+			this.textSet(ctx, '长按识别进店铺', '10px', 90, 400, '#999999');
+			ctx.draw(true, () => {
+				console.log('draw,true');
+				uni.hideLoading();
+			});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.wrapper {
+		@include flex-y();
+		width: 250px;
+	}
+
+	.canvas {
+		border-radius: vw(5);
+		overflow: hidden;
+		margin-top: vw(50);
+	}
+
+	.bottom {
+		width: 230px;
+		margin-top: vw(15);
+		@include flex-x();
+
+		.text {
+			@include word-vw(14, white);
+			line-height: vw(20);
+			margin-top: vw(5);
+		}
+
+		image {
+			width: vw(60);
+			height: vw(60);
+		}
+	}
+
+	button {
+		background: none;
+		line-height: 1;
+		padding: 0;
+		margin: 0;
+	}
+
+	button::after {
+		border: 0px;
+	}
+
+	.button-hover {
+		background: none;
+	}
+</style>

+ 42 - 0
src/components/IconText/IconText.vue

@@ -0,0 +1,42 @@
+<template>
+	<view class="iconfont-box">
+		<text :style="{ color: color, 'font-size': size/3.75 + 'vw' }" class="icon">{{code}}</text>
+	</view>
+</template>
+
+<script lang="ts">
+	/**
+	 * Icons 图标
+	 * @property {Number} size 图标大小
+	 * @property {String} color 图标颜色
+	 * @property {String} code 图标样式 &#xe705; -> \ue705
+	 * @event {Function} click 点击 Icon 触发事件
+	 */
+	import { Component, Prop, Vue, Emit } from 'vue-property-decorator';
+	@Component({})
+	export default class Icon extends Vue {
+		@Prop({
+			default: ''
+		})
+		code !: string
+		@Prop({
+			default: '#333333'
+		})
+		color ? : string
+		@Prop({
+			default: 16
+		})
+		size ? : number
+	}
+</script>
+
+<style lang="scss" scoped>
+	// @import './iconfont.css';
+	.iconfont-box{
+		@include flex-x(center);
+	}
+	.icon {
+		font-family: 'iconfont' !important;
+		font-style: normal;
+	}
+</style>

+ 539 - 0
src/components/IconText/demo.css

@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+  font-family: "iconfont logo";
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+  font-family: "iconfont logo";
+  font-size: 160px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+  position: relative;
+}
+
+.nav-tabs .nav-more {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  height: 42px;
+  line-height: 42px;
+  color: #666;
+}
+
+#tabs {
+  border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+  cursor: pointer;
+  width: 100px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  font-size: 16px;
+  border-bottom: 2px solid transparent;
+  position: relative;
+  z-index: 1;
+  margin-bottom: -1px;
+  color: #666;
+}
+
+
+#tabs .active {
+  border-bottom-color: #f00;
+  color: #222;
+}
+
+.tab-container .content {
+  display: none;
+}
+
+/* 页面布局 */
+.main {
+  padding: 30px 100px;
+  width: 960px;
+  margin: 0 auto;
+}
+
+.main .logo {
+  color: #333;
+  text-align: left;
+  margin-bottom: 30px;
+  line-height: 1;
+  height: 110px;
+  margin-top: -50px;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.main .logo a {
+  font-size: 160px;
+  color: #333;
+}
+
+.helps {
+  margin-top: 40px;
+}
+
+.helps pre {
+  padding: 20px;
+  margin: 10px 0;
+  border: solid 1px #e7e1cd;
+  background-color: #fffdef;
+  overflow: auto;
+}
+
+.icon_lists {
+  width: 100% !important;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.icon_lists li {
+  width: 100px;
+  margin-bottom: 10px;
+  margin-right: 20px;
+  text-align: center;
+  list-style: none !important;
+  cursor: default;
+}
+
+.icon_lists li .code-name {
+  line-height: 1.2;
+}
+
+.icon_lists .icon {
+  display: block;
+  height: 100px;
+  line-height: 100px;
+  font-size: 42px;
+  margin: 10px auto;
+  color: #333;
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
+  transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+  font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+  /* 通过设置 font-size 来改变图标大小 */
+  width: 1em;
+  /* 图标和文字相邻时,垂直对齐 */
+  vertical-align: -0.15em;
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
+  fill: currentColor;
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+      normalize.css 中也包含这行 */
+  overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+  color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+  color: #666;
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+.highlight {
+  line-height: 1.5;
+}
+
+.markdown img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+.markdown h1 {
+  color: #404040;
+  font-weight: 500;
+  line-height: 40px;
+  margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+  color: #404040;
+  margin: 1.6em 0 0.6em 0;
+  font-weight: 500;
+  clear: both;
+}
+
+.markdown h1 {
+  font-size: 28px;
+}
+
+.markdown h2 {
+  font-size: 22px;
+}
+
+.markdown h3 {
+  font-size: 16px;
+}
+
+.markdown h4 {
+  font-size: 14px;
+}
+
+.markdown h5 {
+  font-size: 12px;
+}
+
+.markdown h6 {
+  font-size: 12px;
+}
+
+.markdown hr {
+  height: 1px;
+  border: 0;
+  background: #e9e9e9;
+  margin: 16px 0;
+  clear: both;
+}
+
+.markdown p {
+  margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+  width: 80%;
+}
+
+.markdown ul>li {
+  list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+  margin: 0.6em 0;
+}
+
+.markdown ol>li {
+  list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown code {
+  margin: 0 3px;
+  padding: 0 5px;
+  background: #eee;
+  border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+  font-weight: 600;
+}
+
+.markdown>table {
+  border-collapse: collapse;
+  border-spacing: 0px;
+  empty-cells: show;
+  border: 1px solid #e9e9e9;
+  width: 95%;
+  margin-bottom: 24px;
+}
+
+.markdown>table th {
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+  border: 1px solid #e9e9e9;
+  padding: 8px 16px;
+  text-align: left;
+}
+
+.markdown>table th {
+  background: #F7F7F7;
+}
+
+.markdown blockquote {
+  font-size: 90%;
+  color: #999;
+  border-left: 4px solid #e9e9e9;
+  padding-left: 0.8em;
+  margin: 1em 0;
+}
+
+.markdown blockquote p {
+  margin: 0;
+}
+
+.markdown .anchor {
+  opacity: 0;
+  transition: opacity 0.3s ease;
+  margin-left: 8px;
+}
+
+.markdown .waiting {
+  color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+  opacity: 1;
+  display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+  clear: both;
+}
+
+
+.hljs {
+  display: block;
+  background: white;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+  color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+  color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+  color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+  color: #63a35c;
+}
+
+.hljs-tag {
+  color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #795da3;
+}
+
+.hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.hljs-link {
+  text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  background: none;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}

+ 1499 - 0
src/components/IconText/demo_index.html

@@ -0,0 +1,1499 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <title>iconfont Demo</title>
+  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
+  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg"/>
+  <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
+  <link rel="stylesheet" href="demo.css">
+  <link rel="stylesheet" href="iconfont.css">
+  <script src="iconfont.js"></script>
+  <!-- jQuery -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
+  <!-- 代码高亮 -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
+  <style>
+    .main .logo {
+      margin-top: 0;
+      height: auto;
+    }
+
+    .main .logo a {
+      display: flex;
+      align-items: center;
+    }
+
+    .main .logo .sub-title {
+      margin-left: 0.5em;
+      font-size: 22px;
+      color: #fff;
+      background: linear-gradient(-45deg, #3967FF, #B500FE);
+      -webkit-background-clip: text;
+      -webkit-text-fill-color: transparent;
+    }
+  </style>
+</head>
+<body>
+  <div class="main">
+    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">
+      <img width="200" src="https://img.alicdn.com/imgextra/i3/O1CN01Mn65HV1FfSEzR6DKv_!!6000000000514-55-tps-228-59.svg">
+      
+    </a></h1>
+    <div class="nav-tabs">
+      <ul id="tabs" class="dib-box">
+        <li class="dib active"><span>Unicode</span></li>
+        <li class="dib"><span>Font class</span></li>
+        <li class="dib"><span>Symbol</span></li>
+      </ul>
+      
+      <a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=3695491" target="_blank" class="nav-more">查看项目</a>
+      
+    </div>
+    <div class="tab-container">
+      <div class="content unicode" style="display: block;">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe76b;</span>
+                <div class="name">分组 14</div>
+                <div class="code-name">&amp;#xe76b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe76c;</span>
+                <div class="name">分组 6</div>
+                <div class="code-name">&amp;#xe76c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe76d;</span>
+                <div class="name">分组 5</div>
+                <div class="code-name">&amp;#xe76d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe76e;</span>
+                <div class="name">分组 3 (2)</div>
+                <div class="code-name">&amp;#xe76e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe736;</span>
+                <div class="name">Shape (1)</div>
+                <div class="code-name">&amp;#xe736;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe737;</span>
+                <div class="name">分组 1 (9)</div>
+                <div class="code-name">&amp;#xe737;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe738;</span>
+                <div class="name">分组 8</div>
+                <div class="code-name">&amp;#xe738;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe739;</span>
+                <div class="name">分组 1 (4)</div>
+                <div class="code-name">&amp;#xe739;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe73a;</span>
+                <div class="name">分组 5 (2)</div>
+                <div class="code-name">&amp;#xe73a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe73b;</span>
+                <div class="name">编组 3</div>
+                <div class="code-name">&amp;#xe73b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe73c;</span>
+                <div class="name">分组 2</div>
+                <div class="code-name">&amp;#xe73c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe73d;</span>
+                <div class="name">分组 5 (1)</div>
+                <div class="code-name">&amp;#xe73d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe73e;</span>
+                <div class="name">形状 (2)</div>
+                <div class="code-name">&amp;#xe73e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe73f;</span>
+                <div class="name">分组 7</div>
+                <div class="code-name">&amp;#xe73f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe740;</span>
+                <div class="name">lajitongshanchu</div>
+                <div class="code-name">&amp;#xe740;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe741;</span>
+                <div class="name">shopping_cart (1)</div>
+                <div class="code-name">&amp;#xe741;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe742;</span>
+                <div class="name">分组 3 (1)</div>
+                <div class="code-name">&amp;#xe742;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe743;</span>
+                <div class="name">形状 (3)</div>
+                <div class="code-name">&amp;#xe743;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe744;</span>
+                <div class="name">位置</div>
+                <div class="code-name">&amp;#xe744;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe745;</span>
+                <div class="name">分组 1 (12)</div>
+                <div class="code-name">&amp;#xe745;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe746;</span>
+                <div class="name">形状 (1)</div>
+                <div class="code-name">&amp;#xe746;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe747;</span>
+                <div class="name">分组 1 (5)</div>
+                <div class="code-name">&amp;#xe747;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe748;</span>
+                <div class="name">分组 1</div>
+                <div class="code-name">&amp;#xe748;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe749;</span>
+                <div class="name">b-dyjlr</div>
+                <div class="code-name">&amp;#xe749;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74a;</span>
+                <div class="name">分组 1 (1)</div>
+                <div class="code-name">&amp;#xe74a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74b;</span>
+                <div class="name">分组 1 (8)</div>
+                <div class="code-name">&amp;#xe74b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74c;</span>
+                <div class="name">Vector</div>
+                <div class="code-name">&amp;#xe74c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74d;</span>
+                <div class="name">分组 1 (3)</div>
+                <div class="code-name">&amp;#xe74d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74e;</span>
+                <div class="name">Back Chevron</div>
+                <div class="code-name">&amp;#xe74e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74f;</span>
+                <div class="name">编组 2</div>
+                <div class="code-name">&amp;#xe74f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe750;</span>
+                <div class="name">shopping_cart</div>
+                <div class="code-name">&amp;#xe750;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe751;</span>
+                <div class="name">分组 1 (10)</div>
+                <div class="code-name">&amp;#xe751;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe752;</span>
+                <div class="name">分组 4</div>
+                <div class="code-name">&amp;#xe752;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe753;</span>
+                <div class="name">分组 3</div>
+                <div class="code-name">&amp;#xe753;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe754;</span>
+                <div class="name">分组 1 (6)</div>
+                <div class="code-name">&amp;#xe754;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe755;</span>
+                <div class="name">Combined Shape</div>
+                <div class="code-name">&amp;#xe755;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe756;</span>
+                <div class="name">Shape</div>
+                <div class="code-name">&amp;#xe756;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe757;</span>
+                <div class="name">蒙版分组</div>
+                <div class="code-name">&amp;#xe757;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe758;</span>
+                <div class="name">bianji-2</div>
+                <div class="code-name">&amp;#xe758;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe759;</span>
+                <div class="name">形状</div>
+                <div class="code-name">&amp;#xe759;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe75a;</span>
+                <div class="name">路径 1 (1)</div>
+                <div class="code-name">&amp;#xe75a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe75b;</span>
+                <div class="name">account_circle (1)</div>
+                <div class="code-name">&amp;#xe75b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe75c;</span>
+                <div class="name">并集</div>
+                <div class="code-name">&amp;#xe75c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe75d;</span>
+                <div class="name">分组 3 (3)</div>
+                <div class="code-name">&amp;#xe75d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe75e;</span>
+                <div class="name">路径 1</div>
+                <div class="code-name">&amp;#xe75e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe75f;</span>
+                <div class="name">路径备份</div>
+                <div class="code-name">&amp;#xe75f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe760;</span>
+                <div class="name">分组 1 (7)</div>
+                <div class="code-name">&amp;#xe760;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe761;</span>
+                <div class="name">分组 1 (2)</div>
+                <div class="code-name">&amp;#xe761;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe762;</span>
+                <div class="name">gouwuche-3 copy</div>
+                <div class="code-name">&amp;#xe762;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe763;</span>
+                <div class="name">分组 1 (11)</div>
+                <div class="code-name">&amp;#xe763;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe764;</span>
+                <div class="name">Shape Copy 20备份 2</div>
+                <div class="code-name">&amp;#xe764;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe765;</span>
+                <div class="name">分组 2 (1)</div>
+                <div class="code-name">&amp;#xe765;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe766;</span>
+                <div class="name">account_circle</div>
+                <div class="code-name">&amp;#xe766;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe767;</span>
+                <div class="name">搜索图标</div>
+                <div class="code-name">&amp;#xe767;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe768;</span>
+                <div class="name">编组 8复制</div>
+                <div class="code-name">&amp;#xe768;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe769;</span>
+                <div class="name">fenxiang</div>
+                <div class="code-name">&amp;#xe769;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe76a;</span>
+                <div class="name">分组 13</div>
+                <div class="code-name">&amp;#xe76a;</div>
+              </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="unicode-">Unicode 引用</h2>
+          <hr>
+
+          <p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
+          <ul>
+            <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
+            <li>默认情况下不支持多色,直接添加多色图标会自动去色。</li>
+          </ul>
+          <blockquote>
+            <p>注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)</p>
+          </blockquote>
+          <p>Unicode 使用步骤如下:</p>
+          <h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
+<pre><code class="language-css"
+>@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1665726138405') format('woff2'),
+       url('iconfont.woff?t=1665726138405') format('woff'),
+       url('iconfont.ttf?t=1665726138405') format('truetype');
+}
+</code></pre>
+          <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
+<pre><code class="language-css"
+>.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
+<pre>
+<code class="language-html"
+>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
+</code></pre>
+          <blockquote>
+            <p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+          </blockquote>
+          </div>
+      </div>
+      <div class="content font-class">
+        <ul class="icon_lists dib-box">
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu141"></span>
+            <div class="name">
+              分组 14
+            </div>
+            <div class="code-name">.iiry-a-fenzu141
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu6"></span>
+            <div class="name">
+              分组 6
+            </div>
+            <div class="code-name">.iiry-a-fenzu6
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu5"></span>
+            <div class="name">
+              分组 5
+            </div>
+            <div class="code-name">.iiry-a-fenzu5
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu32"></span>
+            <div class="name">
+              分组 3 (2)
+            </div>
+            <div class="code-name">.iiry-a-fenzu32
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-Shape1"></span>
+            <div class="name">
+              Shape (1)
+            </div>
+            <div class="code-name">.iiry-a-Shape1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu19"></span>
+            <div class="name">
+              分组 1 (9)
+            </div>
+            <div class="code-name">.iiry-a-fenzu19
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu8"></span>
+            <div class="name">
+              分组 8
+            </div>
+            <div class="code-name">.iiry-a-fenzu8
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu14"></span>
+            <div class="name">
+              分组 1 (4)
+            </div>
+            <div class="code-name">.iiry-a-fenzu14
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu52"></span>
+            <div class="name">
+              分组 5 (2)
+            </div>
+            <div class="code-name">.iiry-a-fenzu52
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-bianzu3"></span>
+            <div class="name">
+              编组 3
+            </div>
+            <div class="code-name">.iiry-a-bianzu3
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu2"></span>
+            <div class="name">
+              分组 2
+            </div>
+            <div class="code-name">.iiry-a-fenzu2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu51"></span>
+            <div class="name">
+              分组 5 (1)
+            </div>
+            <div class="code-name">.iiry-a-fenzu51
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-xingzhuang2"></span>
+            <div class="name">
+              形状 (2)
+            </div>
+            <div class="code-name">.iiry-a-xingzhuang2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu7"></span>
+            <div class="name">
+              分组 7
+            </div>
+            <div class="code-name">.iiry-a-fenzu7
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-lajitongshanchu"></span>
+            <div class="name">
+              lajitongshanchu
+            </div>
+            <div class="code-name">.iiry-lajitongshanchu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-shopping_cart1"></span>
+            <div class="name">
+              shopping_cart (1)
+            </div>
+            <div class="code-name">.iiry-a-shopping_cart1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu31"></span>
+            <div class="name">
+              分组 3 (1)
+            </div>
+            <div class="code-name">.iiry-a-fenzu31
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-xingzhuang3"></span>
+            <div class="name">
+              形状 (3)
+            </div>
+            <div class="code-name">.iiry-a-xingzhuang3
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-weizhi"></span>
+            <div class="name">
+              位置
+            </div>
+            <div class="code-name">.iiry-weizhi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu112"></span>
+            <div class="name">
+              分组 1 (12)
+            </div>
+            <div class="code-name">.iiry-a-fenzu112
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-xingzhuang1"></span>
+            <div class="name">
+              形状 (1)
+            </div>
+            <div class="code-name">.iiry-a-xingzhuang1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu15"></span>
+            <div class="name">
+              分组 1 (5)
+            </div>
+            <div class="code-name">.iiry-a-fenzu15
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu1"></span>
+            <div class="name">
+              分组 1
+            </div>
+            <div class="code-name">.iiry-a-fenzu1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-b-dyjlr"></span>
+            <div class="name">
+              b-dyjlr
+            </div>
+            <div class="code-name">.iiry-b-dyjlr
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu11"></span>
+            <div class="name">
+              分组 1 (1)
+            </div>
+            <div class="code-name">.iiry-a-fenzu11
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu18"></span>
+            <div class="name">
+              分组 1 (8)
+            </div>
+            <div class="code-name">.iiry-a-fenzu18
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-Vector"></span>
+            <div class="name">
+              Vector
+            </div>
+            <div class="code-name">.iiry-Vector
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu13"></span>
+            <div class="name">
+              分组 1 (3)
+            </div>
+            <div class="code-name">.iiry-a-fenzu13
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-BackChevron"></span>
+            <div class="name">
+              Back Chevron
+            </div>
+            <div class="code-name">.iiry-a-BackChevron
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-bianzu2"></span>
+            <div class="name">
+              编组 2
+            </div>
+            <div class="code-name">.iiry-a-bianzu2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-shopping_cart"></span>
+            <div class="name">
+              shopping_cart
+            </div>
+            <div class="code-name">.iiry-shopping_cart
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu110"></span>
+            <div class="name">
+              分组 1 (10)
+            </div>
+            <div class="code-name">.iiry-a-fenzu110
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu4"></span>
+            <div class="name">
+              分组 4
+            </div>
+            <div class="code-name">.iiry-a-fenzu4
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu3"></span>
+            <div class="name">
+              分组 3
+            </div>
+            <div class="code-name">.iiry-a-fenzu3
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu16"></span>
+            <div class="name">
+              分组 1 (6)
+            </div>
+            <div class="code-name">.iiry-a-fenzu16
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-CombinedShape"></span>
+            <div class="name">
+              Combined Shape
+            </div>
+            <div class="code-name">.iiry-a-CombinedShape
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-Shape"></span>
+            <div class="name">
+              Shape
+            </div>
+            <div class="code-name">.iiry-Shape
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-mengbanfenzu"></span>
+            <div class="name">
+              蒙版分组
+            </div>
+            <div class="code-name">.iiry-mengbanfenzu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-bianji-2"></span>
+            <div class="name">
+              bianji-2
+            </div>
+            <div class="code-name">.iiry-bianji-2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-xingzhuang"></span>
+            <div class="name">
+              形状
+            </div>
+            <div class="code-name">.iiry-xingzhuang
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-lujing11"></span>
+            <div class="name">
+              路径 1 (1)
+            </div>
+            <div class="code-name">.iiry-a-lujing11
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-account_circle1"></span>
+            <div class="name">
+              account_circle (1)
+            </div>
+            <div class="code-name">.iiry-a-account_circle1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-bingji"></span>
+            <div class="name">
+              并集
+            </div>
+            <div class="code-name">.iiry-bingji
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu33"></span>
+            <div class="name">
+              分组 3 (3)
+            </div>
+            <div class="code-name">.iiry-a-fenzu33
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-lujing1"></span>
+            <div class="name">
+              路径 1
+            </div>
+            <div class="code-name">.iiry-a-lujing1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-lujingbeifen"></span>
+            <div class="name">
+              路径备份
+            </div>
+            <div class="code-name">.iiry-lujingbeifen
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu17"></span>
+            <div class="name">
+              分组 1 (7)
+            </div>
+            <div class="code-name">.iiry-a-fenzu17
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu12"></span>
+            <div class="name">
+              分组 1 (2)
+            </div>
+            <div class="code-name">.iiry-a-fenzu12
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-gouwuche-3copy"></span>
+            <div class="name">
+              gouwuche-3 copy
+            </div>
+            <div class="code-name">.iiry-a-gouwuche-3copy
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu111"></span>
+            <div class="name">
+              分组 1 (11)
+            </div>
+            <div class="code-name">.iiry-a-fenzu111
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-ShapeCopy20beifen2"></span>
+            <div class="name">
+              Shape Copy 20备份 2
+            </div>
+            <div class="code-name">.iiry-a-ShapeCopy20beifen2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu21"></span>
+            <div class="name">
+              分组 2 (1)
+            </div>
+            <div class="code-name">.iiry-a-fenzu21
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-account_circle"></span>
+            <div class="name">
+              account_circle
+            </div>
+            <div class="code-name">.iiry-account_circle
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-sousuotubiao"></span>
+            <div class="name">
+              搜索图标
+            </div>
+            <div class="code-name">.iiry-sousuotubiao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-bianzu8fuzhi"></span>
+            <div class="name">
+              编组 8复制
+            </div>
+            <div class="code-name">.iiry-a-bianzu8fuzhi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-fenxiang"></span>
+            <div class="name">
+              fenxiang
+            </div>
+            <div class="code-name">.iiry-fenxiang
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iiry-a-fenzu131"></span>
+            <div class="name">
+              分组 13
+            </div>
+            <div class="code-name">.iiry-a-fenzu131
+            </div>
+          </li>
+          
+        </ul>
+        <div class="article markdown">
+        <h2 id="font-class-">font-class 引用</h2>
+        <hr>
+
+        <p>font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。</p>
+        <p>与 Unicode 使用方式相比,具有如下特点:</p>
+        <ul>
+          <li>相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。</li>
+          <li>因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。</li>
+        </ul>
+        <p>使用步骤如下:</p>
+        <h3 id="-fontclass-">第一步:引入项目下面生成的 fontclass 代码:</h3>
+<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
+</code></pre>
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;span class="iconfont iiry-xxx"&gt;&lt;/span&gt;
+</code></pre>
+        <blockquote>
+          <p>"
+            iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+        </blockquote>
+      </div>
+      </div>
+      <div class="content symbol">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu141"></use>
+                </svg>
+                <div class="name">分组 14</div>
+                <div class="code-name">#iiry-a-fenzu141</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu6"></use>
+                </svg>
+                <div class="name">分组 6</div>
+                <div class="code-name">#iiry-a-fenzu6</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu5"></use>
+                </svg>
+                <div class="name">分组 5</div>
+                <div class="code-name">#iiry-a-fenzu5</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu32"></use>
+                </svg>
+                <div class="name">分组 3 (2)</div>
+                <div class="code-name">#iiry-a-fenzu32</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-Shape1"></use>
+                </svg>
+                <div class="name">Shape (1)</div>
+                <div class="code-name">#iiry-a-Shape1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu19"></use>
+                </svg>
+                <div class="name">分组 1 (9)</div>
+                <div class="code-name">#iiry-a-fenzu19</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu8"></use>
+                </svg>
+                <div class="name">分组 8</div>
+                <div class="code-name">#iiry-a-fenzu8</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu14"></use>
+                </svg>
+                <div class="name">分组 1 (4)</div>
+                <div class="code-name">#iiry-a-fenzu14</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu52"></use>
+                </svg>
+                <div class="name">分组 5 (2)</div>
+                <div class="code-name">#iiry-a-fenzu52</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-bianzu3"></use>
+                </svg>
+                <div class="name">编组 3</div>
+                <div class="code-name">#iiry-a-bianzu3</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu2"></use>
+                </svg>
+                <div class="name">分组 2</div>
+                <div class="code-name">#iiry-a-fenzu2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu51"></use>
+                </svg>
+                <div class="name">分组 5 (1)</div>
+                <div class="code-name">#iiry-a-fenzu51</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-xingzhuang2"></use>
+                </svg>
+                <div class="name">形状 (2)</div>
+                <div class="code-name">#iiry-a-xingzhuang2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu7"></use>
+                </svg>
+                <div class="name">分组 7</div>
+                <div class="code-name">#iiry-a-fenzu7</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-lajitongshanchu"></use>
+                </svg>
+                <div class="name">lajitongshanchu</div>
+                <div class="code-name">#iiry-lajitongshanchu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-shopping_cart1"></use>
+                </svg>
+                <div class="name">shopping_cart (1)</div>
+                <div class="code-name">#iiry-a-shopping_cart1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu31"></use>
+                </svg>
+                <div class="name">分组 3 (1)</div>
+                <div class="code-name">#iiry-a-fenzu31</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-xingzhuang3"></use>
+                </svg>
+                <div class="name">形状 (3)</div>
+                <div class="code-name">#iiry-a-xingzhuang3</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-weizhi"></use>
+                </svg>
+                <div class="name">位置</div>
+                <div class="code-name">#iiry-weizhi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu112"></use>
+                </svg>
+                <div class="name">分组 1 (12)</div>
+                <div class="code-name">#iiry-a-fenzu112</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-xingzhuang1"></use>
+                </svg>
+                <div class="name">形状 (1)</div>
+                <div class="code-name">#iiry-a-xingzhuang1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu15"></use>
+                </svg>
+                <div class="name">分组 1 (5)</div>
+                <div class="code-name">#iiry-a-fenzu15</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu1"></use>
+                </svg>
+                <div class="name">分组 1</div>
+                <div class="code-name">#iiry-a-fenzu1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-b-dyjlr"></use>
+                </svg>
+                <div class="name">b-dyjlr</div>
+                <div class="code-name">#iiry-b-dyjlr</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu11"></use>
+                </svg>
+                <div class="name">分组 1 (1)</div>
+                <div class="code-name">#iiry-a-fenzu11</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu18"></use>
+                </svg>
+                <div class="name">分组 1 (8)</div>
+                <div class="code-name">#iiry-a-fenzu18</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-Vector"></use>
+                </svg>
+                <div class="name">Vector</div>
+                <div class="code-name">#iiry-Vector</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu13"></use>
+                </svg>
+                <div class="name">分组 1 (3)</div>
+                <div class="code-name">#iiry-a-fenzu13</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-BackChevron"></use>
+                </svg>
+                <div class="name">Back Chevron</div>
+                <div class="code-name">#iiry-a-BackChevron</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-bianzu2"></use>
+                </svg>
+                <div class="name">编组 2</div>
+                <div class="code-name">#iiry-a-bianzu2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-shopping_cart"></use>
+                </svg>
+                <div class="name">shopping_cart</div>
+                <div class="code-name">#iiry-shopping_cart</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu110"></use>
+                </svg>
+                <div class="name">分组 1 (10)</div>
+                <div class="code-name">#iiry-a-fenzu110</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu4"></use>
+                </svg>
+                <div class="name">分组 4</div>
+                <div class="code-name">#iiry-a-fenzu4</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu3"></use>
+                </svg>
+                <div class="name">分组 3</div>
+                <div class="code-name">#iiry-a-fenzu3</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu16"></use>
+                </svg>
+                <div class="name">分组 1 (6)</div>
+                <div class="code-name">#iiry-a-fenzu16</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-CombinedShape"></use>
+                </svg>
+                <div class="name">Combined Shape</div>
+                <div class="code-name">#iiry-a-CombinedShape</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-Shape"></use>
+                </svg>
+                <div class="name">Shape</div>
+                <div class="code-name">#iiry-Shape</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-mengbanfenzu"></use>
+                </svg>
+                <div class="name">蒙版分组</div>
+                <div class="code-name">#iiry-mengbanfenzu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-bianji-2"></use>
+                </svg>
+                <div class="name">bianji-2</div>
+                <div class="code-name">#iiry-bianji-2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-xingzhuang"></use>
+                </svg>
+                <div class="name">形状</div>
+                <div class="code-name">#iiry-xingzhuang</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-lujing11"></use>
+                </svg>
+                <div class="name">路径 1 (1)</div>
+                <div class="code-name">#iiry-a-lujing11</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-account_circle1"></use>
+                </svg>
+                <div class="name">account_circle (1)</div>
+                <div class="code-name">#iiry-a-account_circle1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-bingji"></use>
+                </svg>
+                <div class="name">并集</div>
+                <div class="code-name">#iiry-bingji</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu33"></use>
+                </svg>
+                <div class="name">分组 3 (3)</div>
+                <div class="code-name">#iiry-a-fenzu33</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-lujing1"></use>
+                </svg>
+                <div class="name">路径 1</div>
+                <div class="code-name">#iiry-a-lujing1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-lujingbeifen"></use>
+                </svg>
+                <div class="name">路径备份</div>
+                <div class="code-name">#iiry-lujingbeifen</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu17"></use>
+                </svg>
+                <div class="name">分组 1 (7)</div>
+                <div class="code-name">#iiry-a-fenzu17</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu12"></use>
+                </svg>
+                <div class="name">分组 1 (2)</div>
+                <div class="code-name">#iiry-a-fenzu12</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-gouwuche-3copy"></use>
+                </svg>
+                <div class="name">gouwuche-3 copy</div>
+                <div class="code-name">#iiry-a-gouwuche-3copy</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu111"></use>
+                </svg>
+                <div class="name">分组 1 (11)</div>
+                <div class="code-name">#iiry-a-fenzu111</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-ShapeCopy20beifen2"></use>
+                </svg>
+                <div class="name">Shape Copy 20备份 2</div>
+                <div class="code-name">#iiry-a-ShapeCopy20beifen2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu21"></use>
+                </svg>
+                <div class="name">分组 2 (1)</div>
+                <div class="code-name">#iiry-a-fenzu21</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-account_circle"></use>
+                </svg>
+                <div class="name">account_circle</div>
+                <div class="code-name">#iiry-account_circle</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-sousuotubiao"></use>
+                </svg>
+                <div class="name">搜索图标</div>
+                <div class="code-name">#iiry-sousuotubiao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-bianzu8fuzhi"></use>
+                </svg>
+                <div class="name">编组 8复制</div>
+                <div class="code-name">#iiry-a-bianzu8fuzhi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-fenxiang"></use>
+                </svg>
+                <div class="name">fenxiang</div>
+                <div class="code-name">#iiry-fenxiang</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iiry-a-fenzu131"></use>
+                </svg>
+                <div class="name">分组 13</div>
+                <div class="code-name">#iiry-a-fenzu131</div>
+            </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="symbol-">Symbol 引用</h2>
+          <hr>
+
+          <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
+            这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
+          <ul>
+            <li>支持多色图标了,不再受单色限制。</li>
+            <li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
+            <li>兼容性较差,支持 IE9+,及现代浏览器。</li>
+            <li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
+          </ul>
+          <p>使用步骤如下:</p>
+          <h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
+<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
+</code></pre>
+          <h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
+<pre><code class="language-html">&lt;style&gt;
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+&lt;/style&gt;
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
+  &lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
+&lt;/svg&gt;
+</code></pre>
+          </div>
+      </div>
+
+    </div>
+  </div>
+  <script>
+  $(document).ready(function () {
+      $('.tab-container .content:first').show()
+
+      $('#tabs li').click(function (e) {
+        var tabContent = $('.tab-container .content')
+        var index = $(this).index()
+
+        if ($(this).hasClass('active')) {
+          return
+        } else {
+          $('#tabs li').removeClass('active')
+          $(this).addClass('active')
+
+          tabContent.hide().eq(index).fadeIn()
+        }
+      })
+    })
+  </script>
+</body>
+</html>

+ 243 - 0
src/components/IconText/iconfont.css

@@ -0,0 +1,243 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 3695491 */
+  src: url('iconfont.woff2?t=1665726138405') format('woff2'),
+       url('iconfont.woff?t=1665726138405') format('woff'),
+       url('iconfont.ttf?t=1665726138405') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.iiry-a-fenzu141:before {
+  content: "\e76b";
+}
+
+.iiry-a-fenzu6:before {
+  content: "\e76c";
+}
+
+.iiry-a-fenzu5:before {
+  content: "\e76d";
+}
+
+.iiry-a-fenzu32:before {
+  content: "\e76e";
+}
+
+.iiry-a-Shape1:before {
+  content: "\e736";
+}
+
+.iiry-a-fenzu19:before {
+  content: "\e737";
+}
+
+.iiry-a-fenzu8:before {
+  content: "\e738";
+}
+
+.iiry-a-fenzu14:before {
+  content: "\e739";
+}
+
+.iiry-a-fenzu52:before {
+  content: "\e73a";
+}
+
+.iiry-a-bianzu3:before {
+  content: "\e73b";
+}
+
+.iiry-a-fenzu2:before {
+  content: "\e73c";
+}
+
+.iiry-a-fenzu51:before {
+  content: "\e73d";
+}
+
+.iiry-a-xingzhuang2:before {
+  content: "\e73e";
+}
+
+.iiry-a-fenzu7:before {
+  content: "\e73f";
+}
+
+.iiry-lajitongshanchu:before {
+  content: "\e740";
+}
+
+.iiry-a-shopping_cart1:before {
+  content: "\e741";
+}
+
+.iiry-a-fenzu31:before {
+  content: "\e742";
+}
+
+.iiry-a-xingzhuang3:before {
+  content: "\e743";
+}
+
+.iiry-weizhi:before {
+  content: "\e744";
+}
+
+.iiry-a-fenzu112:before {
+  content: "\e745";
+}
+
+.iiry-a-xingzhuang1:before {
+  content: "\e746";
+}
+
+.iiry-a-fenzu15:before {
+  content: "\e747";
+}
+
+.iiry-a-fenzu1:before {
+  content: "\e748";
+}
+
+.iiry-b-dyjlr:before {
+  content: "\e749";
+}
+
+.iiry-a-fenzu11:before {
+  content: "\e74a";
+}
+
+.iiry-a-fenzu18:before {
+  content: "\e74b";
+}
+
+.iiry-Vector:before {
+  content: "\e74c";
+}
+
+.iiry-a-fenzu13:before {
+  content: "\e74d";
+}
+
+.iiry-a-BackChevron:before {
+  content: "\e74e";
+}
+
+.iiry-a-bianzu2:before {
+  content: "\e74f";
+}
+
+.iiry-shopping_cart:before {
+  content: "\e750";
+}
+
+.iiry-a-fenzu110:before {
+  content: "\e751";
+}
+
+.iiry-a-fenzu4:before {
+  content: "\e752";
+}
+
+.iiry-a-fenzu3:before {
+  content: "\e753";
+}
+
+.iiry-a-fenzu16:before {
+  content: "\e754";
+}
+
+.iiry-a-CombinedShape:before {
+  content: "\e755";
+}
+
+.iiry-Shape:before {
+  content: "\e756";
+}
+
+.iiry-mengbanfenzu:before {
+  content: "\e757";
+}
+
+.iiry-bianji-2:before {
+  content: "\e758";
+}
+
+.iiry-xingzhuang:before {
+  content: "\e759";
+}
+
+.iiry-a-lujing11:before {
+  content: "\e75a";
+}
+
+.iiry-a-account_circle1:before {
+  content: "\e75b";
+}
+
+.iiry-bingji:before {
+  content: "\e75c";
+}
+
+.iiry-a-fenzu33:before {
+  content: "\e75d";
+}
+
+.iiry-a-lujing1:before {
+  content: "\e75e";
+}
+
+.iiry-lujingbeifen:before {
+  content: "\e75f";
+}
+
+.iiry-a-fenzu17:before {
+  content: "\e760";
+}
+
+.iiry-a-fenzu12:before {
+  content: "\e761";
+}
+
+.iiry-a-gouwuche-3copy:before {
+  content: "\e762";
+}
+
+.iiry-a-fenzu111:before {
+  content: "\e763";
+}
+
+.iiry-a-ShapeCopy20beifen2:before {
+  content: "\e764";
+}
+
+.iiry-a-fenzu21:before {
+  content: "\e765";
+}
+
+.iiry-account_circle:before {
+  content: "\e766";
+}
+
+.iiry-sousuotubiao:before {
+  content: "\e767";
+}
+
+.iiry-a-bianzu8fuzhi:before {
+  content: "\e768";
+}
+
+.iiry-fenxiang:before {
+  content: "\e769";
+}
+
+.iiry-a-fenzu131:before {
+  content: "\e76a";
+}
+

File diff suppressed because it is too large
+ 0 - 0
src/components/IconText/iconfont.js


+ 408 - 0
src/components/IconText/iconfont.json

@@ -0,0 +1,408 @@
+{
+  "id": "3695491",
+  "name": "爱润颜5.0",
+  "font_family": "iconfont",
+  "css_prefix_text": "iiry-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "32297739",
+      "name": "分组 14",
+      "font_class": "a-fenzu141",
+      "unicode": "e76b",
+      "unicode_decimal": 59243
+    },
+    {
+      "icon_id": "32297740",
+      "name": "分组 6",
+      "font_class": "a-fenzu6",
+      "unicode": "e76c",
+      "unicode_decimal": 59244
+    },
+    {
+      "icon_id": "32297741",
+      "name": "分组 5",
+      "font_class": "a-fenzu5",
+      "unicode": "e76d",
+      "unicode_decimal": 59245
+    },
+    {
+      "icon_id": "32297742",
+      "name": "分组 3 (2)",
+      "font_class": "a-fenzu32",
+      "unicode": "e76e",
+      "unicode_decimal": 59246
+    },
+    {
+      "icon_id": "32297514",
+      "name": "Shape (1)",
+      "font_class": "a-Shape1",
+      "unicode": "e736",
+      "unicode_decimal": 59190
+    },
+    {
+      "icon_id": "32297515",
+      "name": "分组 1 (9)",
+      "font_class": "a-fenzu19",
+      "unicode": "e737",
+      "unicode_decimal": 59191
+    },
+    {
+      "icon_id": "32297516",
+      "name": "分组 8",
+      "font_class": "a-fenzu8",
+      "unicode": "e738",
+      "unicode_decimal": 59192
+    },
+    {
+      "icon_id": "32297517",
+      "name": "分组 1 (4)",
+      "font_class": "a-fenzu14",
+      "unicode": "e739",
+      "unicode_decimal": 59193
+    },
+    {
+      "icon_id": "32297518",
+      "name": "分组 5 (2)",
+      "font_class": "a-fenzu52",
+      "unicode": "e73a",
+      "unicode_decimal": 59194
+    },
+    {
+      "icon_id": "32297519",
+      "name": "编组 3",
+      "font_class": "a-bianzu3",
+      "unicode": "e73b",
+      "unicode_decimal": 59195
+    },
+    {
+      "icon_id": "32297520",
+      "name": "分组 2",
+      "font_class": "a-fenzu2",
+      "unicode": "e73c",
+      "unicode_decimal": 59196
+    },
+    {
+      "icon_id": "32297521",
+      "name": "分组 5 (1)",
+      "font_class": "a-fenzu51",
+      "unicode": "e73d",
+      "unicode_decimal": 59197
+    },
+    {
+      "icon_id": "32297522",
+      "name": "形状 (2)",
+      "font_class": "a-xingzhuang2",
+      "unicode": "e73e",
+      "unicode_decimal": 59198
+    },
+    {
+      "icon_id": "32297523",
+      "name": "分组 7",
+      "font_class": "a-fenzu7",
+      "unicode": "e73f",
+      "unicode_decimal": 59199
+    },
+    {
+      "icon_id": "32297524",
+      "name": "lajitongshanchu",
+      "font_class": "lajitongshanchu",
+      "unicode": "e740",
+      "unicode_decimal": 59200
+    },
+    {
+      "icon_id": "32297525",
+      "name": "shopping_cart (1)",
+      "font_class": "a-shopping_cart1",
+      "unicode": "e741",
+      "unicode_decimal": 59201
+    },
+    {
+      "icon_id": "32297526",
+      "name": "分组 3 (1)",
+      "font_class": "a-fenzu31",
+      "unicode": "e742",
+      "unicode_decimal": 59202
+    },
+    {
+      "icon_id": "32297527",
+      "name": "形状 (3)",
+      "font_class": "a-xingzhuang3",
+      "unicode": "e743",
+      "unicode_decimal": 59203
+    },
+    {
+      "icon_id": "32297528",
+      "name": "位置",
+      "font_class": "weizhi",
+      "unicode": "e744",
+      "unicode_decimal": 59204
+    },
+    {
+      "icon_id": "32297529",
+      "name": "分组 1 (12)",
+      "font_class": "a-fenzu112",
+      "unicode": "e745",
+      "unicode_decimal": 59205
+    },
+    {
+      "icon_id": "32297530",
+      "name": "形状 (1)",
+      "font_class": "a-xingzhuang1",
+      "unicode": "e746",
+      "unicode_decimal": 59206
+    },
+    {
+      "icon_id": "32297531",
+      "name": "分组 1 (5)",
+      "font_class": "a-fenzu15",
+      "unicode": "e747",
+      "unicode_decimal": 59207
+    },
+    {
+      "icon_id": "32297532",
+      "name": "分组 1",
+      "font_class": "a-fenzu1",
+      "unicode": "e748",
+      "unicode_decimal": 59208
+    },
+    {
+      "icon_id": "32297533",
+      "name": "b-dyjlr",
+      "font_class": "b-dyjlr",
+      "unicode": "e749",
+      "unicode_decimal": 59209
+    },
+    {
+      "icon_id": "32297534",
+      "name": "分组 1 (1)",
+      "font_class": "a-fenzu11",
+      "unicode": "e74a",
+      "unicode_decimal": 59210
+    },
+    {
+      "icon_id": "32297535",
+      "name": "分组 1 (8)",
+      "font_class": "a-fenzu18",
+      "unicode": "e74b",
+      "unicode_decimal": 59211
+    },
+    {
+      "icon_id": "32297536",
+      "name": "Vector",
+      "font_class": "Vector",
+      "unicode": "e74c",
+      "unicode_decimal": 59212
+    },
+    {
+      "icon_id": "32297537",
+      "name": "分组 1 (3)",
+      "font_class": "a-fenzu13",
+      "unicode": "e74d",
+      "unicode_decimal": 59213
+    },
+    {
+      "icon_id": "32297538",
+      "name": "Back Chevron",
+      "font_class": "a-BackChevron",
+      "unicode": "e74e",
+      "unicode_decimal": 59214
+    },
+    {
+      "icon_id": "32297539",
+      "name": "编组 2",
+      "font_class": "a-bianzu2",
+      "unicode": "e74f",
+      "unicode_decimal": 59215
+    },
+    {
+      "icon_id": "32297540",
+      "name": "shopping_cart",
+      "font_class": "shopping_cart",
+      "unicode": "e750",
+      "unicode_decimal": 59216
+    },
+    {
+      "icon_id": "32297541",
+      "name": "分组 1 (10)",
+      "font_class": "a-fenzu110",
+      "unicode": "e751",
+      "unicode_decimal": 59217
+    },
+    {
+      "icon_id": "32297542",
+      "name": "分组 4",
+      "font_class": "a-fenzu4",
+      "unicode": "e752",
+      "unicode_decimal": 59218
+    },
+    {
+      "icon_id": "32297543",
+      "name": "分组 3",
+      "font_class": "a-fenzu3",
+      "unicode": "e753",
+      "unicode_decimal": 59219
+    },
+    {
+      "icon_id": "32297544",
+      "name": "分组 1 (6)",
+      "font_class": "a-fenzu16",
+      "unicode": "e754",
+      "unicode_decimal": 59220
+    },
+    {
+      "icon_id": "32297545",
+      "name": "Combined Shape",
+      "font_class": "a-CombinedShape",
+      "unicode": "e755",
+      "unicode_decimal": 59221
+    },
+    {
+      "icon_id": "32297546",
+      "name": "Shape",
+      "font_class": "Shape",
+      "unicode": "e756",
+      "unicode_decimal": 59222
+    },
+    {
+      "icon_id": "32297547",
+      "name": "蒙版分组",
+      "font_class": "mengbanfenzu",
+      "unicode": "e757",
+      "unicode_decimal": 59223
+    },
+    {
+      "icon_id": "32297548",
+      "name": "bianji-2",
+      "font_class": "bianji-2",
+      "unicode": "e758",
+      "unicode_decimal": 59224
+    },
+    {
+      "icon_id": "32297549",
+      "name": "形状",
+      "font_class": "xingzhuang",
+      "unicode": "e759",
+      "unicode_decimal": 59225
+    },
+    {
+      "icon_id": "32297550",
+      "name": "路径 1 (1)",
+      "font_class": "a-lujing11",
+      "unicode": "e75a",
+      "unicode_decimal": 59226
+    },
+    {
+      "icon_id": "32297551",
+      "name": "account_circle (1)",
+      "font_class": "a-account_circle1",
+      "unicode": "e75b",
+      "unicode_decimal": 59227
+    },
+    {
+      "icon_id": "32297552",
+      "name": "并集",
+      "font_class": "bingji",
+      "unicode": "e75c",
+      "unicode_decimal": 59228
+    },
+    {
+      "icon_id": "32297553",
+      "name": "分组 3 (3)",
+      "font_class": "a-fenzu33",
+      "unicode": "e75d",
+      "unicode_decimal": 59229
+    },
+    {
+      "icon_id": "32297554",
+      "name": "路径 1",
+      "font_class": "a-lujing1",
+      "unicode": "e75e",
+      "unicode_decimal": 59230
+    },
+    {
+      "icon_id": "32297555",
+      "name": "路径备份",
+      "font_class": "lujingbeifen",
+      "unicode": "e75f",
+      "unicode_decimal": 59231
+    },
+    {
+      "icon_id": "32297556",
+      "name": "分组 1 (7)",
+      "font_class": "a-fenzu17",
+      "unicode": "e760",
+      "unicode_decimal": 59232
+    },
+    {
+      "icon_id": "32297557",
+      "name": "分组 1 (2)",
+      "font_class": "a-fenzu12",
+      "unicode": "e761",
+      "unicode_decimal": 59233
+    },
+    {
+      "icon_id": "32297558",
+      "name": "gouwuche-3 copy",
+      "font_class": "a-gouwuche-3copy",
+      "unicode": "e762",
+      "unicode_decimal": 59234
+    },
+    {
+      "icon_id": "32297559",
+      "name": "分组 1 (11)",
+      "font_class": "a-fenzu111",
+      "unicode": "e763",
+      "unicode_decimal": 59235
+    },
+    {
+      "icon_id": "32297560",
+      "name": "Shape Copy 20备份 2",
+      "font_class": "a-ShapeCopy20beifen2",
+      "unicode": "e764",
+      "unicode_decimal": 59236
+    },
+    {
+      "icon_id": "32297561",
+      "name": "分组 2 (1)",
+      "font_class": "a-fenzu21",
+      "unicode": "e765",
+      "unicode_decimal": 59237
+    },
+    {
+      "icon_id": "32297562",
+      "name": "account_circle",
+      "font_class": "account_circle",
+      "unicode": "e766",
+      "unicode_decimal": 59238
+    },
+    {
+      "icon_id": "32297563",
+      "name": "搜索图标",
+      "font_class": "sousuotubiao",
+      "unicode": "e767",
+      "unicode_decimal": 59239
+    },
+    {
+      "icon_id": "32297564",
+      "name": "编组 8复制",
+      "font_class": "a-bianzu8fuzhi",
+      "unicode": "e768",
+      "unicode_decimal": 59240
+    },
+    {
+      "icon_id": "32297565",
+      "name": "fenxiang",
+      "font_class": "fenxiang",
+      "unicode": "e769",
+      "unicode_decimal": 59241
+    },
+    {
+      "icon_id": "32297566",
+      "name": "分组 13",
+      "font_class": "a-fenzu131",
+      "unicode": "e76a",
+      "unicode_decimal": 59242
+    }
+  ]
+}

BIN
src/components/IconText/iconfont.ttf


BIN
src/components/IconText/iconfont.woff


BIN
src/components/IconText/iconfont.woff2


+ 190 - 0
src/components/ImgUpload/ImgUpload.vue

@@ -0,0 +1,190 @@
+<template>
+	<view class="img-container">
+		<view class="wrapper-box" v-if="pic">
+			<view class="wrapper" :style="{ width: width + 'vw', height: height + 'vw' }">
+				<image class="image" mode="aspectFill" :src="pic" @click="preview(pic)" @load="hideLoading" />
+				<text class="close-icon" @click="deletePic()">&#xe88a;</text>
+			</view>
+		</view>
+		<view class="wrapper-box" v-else>
+			<view class="add" :style="{ width: width + 'vw', height: height + 'vw' }" @click="addImg">
+				<IconText :code="`\ue76f`" :color="addColor" size="32"></IconText>
+				<view class="tip" v-if="tip">{{tip}}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		Watch
+	} from 'vue-property-decorator';
+	@Component({})
+	export default class MulImgUlpload extends Vue {
+		@Prop({
+			default: ""
+		})
+		imgs ? : any;
+		@Prop({
+			default: ""
+		})
+		tip ? : any;
+		@Prop({
+			default: 26
+		})
+		width ? : number;
+		@Prop({
+			default: 26
+		})
+		height ? : number;
+		@Prop({
+			default: '#9c3d92'
+		})
+		addColor ? : string;
+		@Prop({
+			default: false
+		})
+		disabled ? : boolean;
+		@Prop({
+			default: "点击上传图片"
+		})
+		label ? : any;
+		pic: any = "";
+		@Emit('update')
+		changeImg(): any {
+			return this.pic;
+		}
+		@Emit('cancelUpdate')
+		cancelUpdate(): any {}
+		@Watch('imgs', {
+			deep: true,
+			immediate: true,
+		})
+		imgsChange(val: any) {
+			if (val) {
+				this.pic = val;
+			}
+		}
+		addImg(): void {
+			// if (this.disabled) return;
+
+			// 选择图库图片
+			const that = this;
+			uni.chooseImage({
+				count: 1,
+				success: (res: any) => {
+					const tempFilePaths: any = res.tempFilePaths;
+					uni.showLoading({
+						title: '上传中...'
+					});
+					tempFilePaths.forEach((item: any, index: any) => {
+						that.$http
+							.upPic({
+								filePath: item
+							})
+							.then((res: any) => {
+								uni.hideLoading();
+								this.pic = res;
+								that.changeImg();
+							})
+							.catch((err: any) => {
+								uni.hideLoading();
+								console.log(err);
+							});
+					});
+				},
+				fail: () => {
+					this.cancelUpdate();
+				}
+			});
+		}
+		deletePic(): void {
+			// console.log(3333, index);
+			if (this.disabled) return;
+			this.pic = '';
+			this.changeImg();
+		}
+		preview(url: string): void {
+			uni.previewImage({
+				current: url, // 当前显示图片的http链接
+				urls: [url] // 需要预览的图片http链接列表
+			});
+		}
+		hideLoading(): void {
+			uni.hideLoading();
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.img-container {
+			width: 100%;
+			display: flex;
+			align-content: flex-start;
+			flex-wrap: wrap;
+			background: white;
+			// padding-top: 10px;
+	
+			.wrapper-box {
+				width: 1/3 * 100%;
+				margin-bottom: vw(12);
+	
+				&:nth-of-type(3n+2) {
+					@include flex-x(center);
+				}
+	
+				&:nth-of-type(3n) {
+					@include flex-x(flex-end);
+				}
+				.tip{
+					margin-top: vw(10);
+				}
+			}
+	
+			.wrapper {
+				position: relative;
+	
+				.image {
+					width: 100%;
+					height: 100%;
+					border-radius: 3px;
+				}
+	
+				.close-icon {
+					position: absolute;
+					width: vw(40);
+					height: vw(40);
+					top: 0;
+					left: 0;
+					right: 0;
+					bottom: 0;
+					margin: auto;
+					@include icon(40, rgba(0, 0, 0, 0.5));
+				}
+			}
+	
+			.add {
+				// width: vw(100);
+				// height: vw(100);
+				@include flex-y(center);
+				color: #999;
+				background: #F2F2F2;
+				border: 1px solid #f5f5f5;
+				border-radius: vw(5);
+				box-sizing: border-box;
+	
+				.default-icon {
+					@include icon(60, $btn-color);
+				}
+	
+				.tips {
+					@include word-vw(12, #cccccc);
+				}
+			}
+		}
+	</style>
+	

+ 355 - 0
src/components/MiniSpec/MiniSpec.vue

@@ -0,0 +1,355 @@
+<template>
+	<scroll-view class="mini-spec" scroll-y="true" show-scrollbar="false">
+		<view class="spec-item" v-for="(item,i) in demoData" :key="i">
+			<view class="spec-title">{{ item }}</view>
+			<!--多个选项-->
+			<view class="spec-list">
+				<view class="spec-value" v-for="(sku,index) in showSpec[item]" :key="index" @tap="chooseSpec(item, sku)"
+					:class="[{active:selectedArr[item] === sku}]">
+					<!-- wx:class="{{ { theme_main_bk:selectedArr[item] === sku , no:filters.noActive(notSelectable,sku)} }}" -->
+					{{ sku }}
+				</view>
+			</view>
+		</view>
+	</scroll-view>
+</template>
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Watch,
+		Emit,
+		Vue
+	} from 'vue-property-decorator';
+	@Component({})
+	export default class MiniSpec extends Vue {
+		proContent: any = null;
+		showSpec: any = {}; // 用于展示的规格选项
+		reSku: Array < any >= []; // 重组后的sku-->[{path: "三人份-BT辣-羊肉-炒",sku: "000UNLI4"}]
+		selectedArr: Array < any >= []; // 所有选中的规格与key的组合
+		notSelectable: Array < any >= [];
+		allPath: any = {};
+		keys: string = ""; // 所有可选属性行
+		selectedCache: Array < any >= []; // 已选中的缓存
+		spliter: string = "-"; // 分隔符
+		curtSelect: string = ""; // 当前选中的规格
+
+		@Prop({
+			default: {}
+		}) specData: any;
+		@Prop({
+			default: false
+		}) sellOut!: boolean;
+
+		get demoData() {
+			return Object.keys(this.showSpec) || [];
+		}
+
+		@Watch('specData', {
+			deep: true,
+			immediate: true,
+		})
+		specDataChange(val: any) {
+			this.proContent = val;
+			this.proContent.skuList.length && this.initData();
+		}
+
+
+		initData() {
+			// 售罄不执行
+			if (this.sellOut) {
+				return;
+			}
+			//proContent未准备好 不执行
+			if (!this.proContent) return;
+			// 单规格未设置'默认'规格时,不执行
+			if (!this.proContent.skuList[0].attrs) return;
+			// 暂时不过滤库存为0 的商品
+			// this.filterNullSku();
+
+			// 过滤 keys 可选的规格名称 ['款式','口味']
+			this.keys = this.filterKeys(this.proContent);
+			// console.log('this.keys------>', this.keys);
+
+			// 展示给用户的规格选项
+			this.showSpec = this.getshowSpec(this.proContent.skuList);
+			// console.log("this.showSpec------>", this.showSpec);
+
+			// this.reSku ==》[{path:'大-不辣',sku:111},{path:'大-辣',sku:111}]
+			this.reSku = this.combineAttr(this.proContent.skuList);
+			// console.log('this.reSku------>', this.reSku)
+
+			this.buildResult(this.reSku);
+
+			// 只有一个sku时默认选中所有选项
+			const oneSku = this.proContent.skuList.length === 1;
+			// 开局选中
+			let skuItem = this.proContent.skuList;
+			console.log('选中的规格', this.selectedArr)
+			for (let k in this.selectedArr) {
+				skuItem[0].attrs.map((sku: any) => {
+					if (sku.keyName == k) {
+						this.selectedArr[k] = sku.value;
+					}
+				});
+			}
+			this.updateStatus(this.getSelectedItem());
+			this.getChoose()
+		}
+
+		filterKeys(proContent: any): any {
+			// let keys =[]
+			// proContent.skuList.map((item,index)=>{
+			//      item.attrs.map(res=> keys.push(res.keyName))
+			// })
+			// keys = [...new Set(keys)]
+			//  return keys
+			// console.log("proContent", proContent);
+			let keys: Array < any >= [];
+			(proContent.skuList[0] as any).attrs.map((res: any) => keys.push(res.keyName));
+			keys = [...new Set(keys)];
+			return keys;
+		}
+
+		// 属性点击事件
+		chooseSpec(skey: any, sval: any) {
+			// skey->选中的规格key,sval->选中的规格值
+			// this.curtSelect = sval;
+			// console.log(!this.notSelectable.includes(sval))
+			if (!this.notSelectable.includes(sval)) {
+				if (this.selectedArr[skey] === sval) {
+					// this.selectedArr[skey] = "";
+					this.$set(this.selectedArr, skey, '')
+				} else {
+					// this.selectedArr[skey] = sval;
+					this.$set(this.selectedArr, skey, sval)
+				}
+				this.updateStatus(this.getSelectedItem());
+				// this.$emit('getChoose', this.selectedArr);
+				this.getChoose()
+			}
+		}
+
+
+		// // 将sku stock为0的sku过滤掉  一个sku的不过滤了
+		// filterNullSku() {
+		// 	if (this.proContent && this.proContent.skuList.length > 1) {
+		// 		let sku = {};
+		// 		sku = this.proContent.skuList.filter((item) => item.stock > 0);
+		// 		this.proContent.skuList = sku;
+		// 	}
+		// }
+
+		// 将商品数据中的 sku 用 key 过滤出所有可选的商品规格
+		getshowSpec(skuList: any) {
+			let keys = this.keys;
+			let jsons: any = {};
+			let select: any = {};
+			for (let key_val of keys) {
+				jsons[key_val] = [];
+				select[key_val] = "";
+
+				for (let j = 0; j < skuList.length; j++) {
+					for (let i = 0; i < keys.length; i++) {
+						if (
+							skuList[j].attrs[i].keyName &&
+							skuList[j].attrs[i].keyName === key_val
+						) {
+							jsons[key_val].push(skuList[j].attrs[i].value);
+						}
+					}
+				}
+			}
+
+			for (let i in jsons) {
+				jsons[i] = [...new Set(jsons[i])];
+			}
+			this.selectedArr = select; // 后面储存已选属性要用到 {颜色:'',尺寸: ''...}
+			// console.log('this.selectedArr------>', this.selectedArr);
+
+			return jsons;
+		}
+
+		// 计算组合数据
+		combineAttr(skuList: any) {
+			let allKeys: Array < any >= [];
+			skuList.map((res: any) => {
+				let values: Array < any > = [];
+				res.attrs.forEach((key: any) => {
+					values.push(key.value);
+				});
+				allKeys.push({
+					path: values.join(this.spliter),
+					id: res.id,
+				});
+			});
+			return allKeys;
+		}
+
+
+
+
+		/**
+		 * 生成所有子集是否可选、库存状态 map
+		 *  items =》 [{path:'大-不辣',sku:111},{path:'大-辣',sku:111}]
+		 *  allKeys =>["大-辣", "大-不辣", "中-不辣", "中-辣", "小-辣", "小-不辣"]
+		 *  return  =>{ 不辣:{skus:[123,12323]}}
+		 */
+		buildResult(items: any) {
+			this.allPath = {};
+			let allKeys = items.map((res: any) => res.path);
+			for (let i = 0; i < allKeys.length; i++) {
+				let sku: string = items[i].id;
+				let values: Array < any > = allKeys[i].split(this.spliter);
+				let allSets = this.powerset(values);
+				// 每个组合的子集
+				// 清空allpath,zcj
+				// this.allPath = {};
+				for (let j = 0; j < allSets.length; j++) {
+					let set = allSets[j];
+					let key = set.join(this.spliter);
+					if (this.allPath[key]) {
+						this.allPath[key].skus.push(sku);
+					} else {
+						this.allPath[key] = {
+							skus: [sku],
+						};
+					}
+				}
+			}
+			// console.log('this.allPath------>', this.allPath);
+		}
+
+		powerset(arr: any) {
+			let ps: any = [
+				[]
+			];
+			for (let i = 0; i < arr.length; i++) {
+				for (let j = 0, len = ps.length; j < len; j++) {
+					ps.push(ps[j].concat(arr[i]));
+				}
+			}
+			return ps;
+		}
+
+		// 过滤分隔符
+		trimSpliter(str: any) {
+			// ⊙abc⊙ => abc
+			// ⊙a⊙⊙b⊙c⊙ => a⊙b⊙c
+			let reLeft = new RegExp("^" + this.spliter + "+", "g");
+			let reRight = new RegExp(this.spliter + "+$", "g");
+			let reSpliter = new RegExp(this.spliter + "+", "g");
+			return str
+				.replace(reLeft, "")
+				.replace(reRight, "")
+				.replace(reSpliter, this.spliter);
+		}
+
+		// 获取当前选中的属性 =>['大','不辣']
+		getSelectedItem() {
+			let result: any = [];
+			result = Object.values(this.selectedArr);
+			return result;
+		}
+
+
+		// 更新所有属性状态
+		updateStatus(selected: any) {
+			this.notSelectable = [];
+			for (let i = 0, len = this.keys.length; i < len; i++) {
+				let key: any = this.keys[i];
+				let data: any = this.showSpec[key];
+				// console.log('data',data);
+				let copy: any = selected.slice();
+				// console.log('copy',copy);
+				for (let j = 0; j < data.length; j++) {
+					let item: any = data[j];
+					if (selected[i] === item) continue;
+					copy[i] = item;
+					let curr = this.trimSpliter(copy.join(this.spliter));
+					if (!this.allPath[curr]) {
+						this.notSelectable.push(item);
+						// console.log("this.notSelectable------>", this.notSelectable);
+					}
+				}
+			}
+
+			if (!this.getSelectedItem().includes("")) {
+				let choSku: any = this.getSelectedItem().join(this.spliter);
+				// console.log(choSku);
+				// console.log("findSku1", this.allPath[choSku]);
+				this.findSku(this.allPath[choSku].skus[0])
+			}
+		}
+
+
+
+		// emit===================================
+		@Emit('getChoose')
+		getChoose() {
+			return this.selectedArr
+		}
+
+		@Emit('findSku')
+		findSku(value: any) {
+			return value
+		}
+
+
+	}
+</script>
+
+<style lang='scss' scoped>
+	.mini-spec {
+		max-height: vw(200);
+		overflow-y: scroll;
+
+		@include hide-scrollbar() .spec-item {
+			@include word-vw(14, $gray3);
+
+			.spec-title {
+				@include word-vw(16, $gray3);
+				line-height: vw(40);
+			}
+
+			.spec-list {
+				display: flex;
+				flex-wrap: wrap;
+				margin-top: vw(6);
+
+				.spec-value {
+					min-width: vw(100);
+					max-width: vw(345);
+					@include ellipsis();
+
+					height: vw(32);
+					line-height: vw(32);
+					padding: 0 vw(10);
+					box-sizing: border-box;
+					text-align: center;
+					@include word-vw(14, $gray3);
+					background: #fff;
+					border-radius: vw(8);
+					margin-right: vw(18);
+					margin-bottom: vw(16);
+
+					&.active {
+						/* background: #fff; */
+						color: $bk-color;
+						/* background-color: $bk-color; */
+						/* border: vw(1) solid $main-color; */
+					}
+
+					&.no {
+						color: $gray9;
+						background: #EFEFEF;
+					}
+				}
+
+				.spec-value:last-child {
+					margin-right: 0;
+				}
+			}
+		}
+	}
+</style>

+ 193 - 0
src/components/MulImgUpload/MulImgUpload.vue

@@ -0,0 +1,193 @@
+<template>
+	<view class="img-container">
+		<view class="wrapper-box" v-for="(item, index) in imgList" :key="index">
+			<view class="wrapper" :style="{ width: width + 'vw', height: height + 'vw' }">
+				<image class="image" mode="aspectFill" :src="item" @click="preview(item)" @load="hideLoading" />
+				<text class="close-icon" @click="deletePic(index)">&#xe87d;</text>
+			</view>
+		</view>
+		<view class="wrapper-box">
+			<view class="add" :style="{ width: width + 'vw', height: height + 'vw' }" @click="addImg"
+				v-if="!max || imgList.length < max">
+				<!-- <text class="default-icon" :style="{ color: addColor }">&#xe71b;</text> -->
+				<IconText :code="`\ue76f`" :color="addColor" size="32"></IconText>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		Watch
+	} from 'vue-property-decorator';
+	@Component({})
+	export default class MulImgUlpload extends Vue {
+		@Prop({
+			default: []
+		})
+		imgs ? : string[];
+		@Prop({
+			default: 9
+		})
+		max ? : number;
+		@Prop({
+			default: 26
+		})
+		width ? : number;
+		@Prop({
+			default: 26
+		})
+		height ? : number;
+		@Prop({
+			default: '#9c3d92'
+		})
+		addColor ? : string;
+		@Prop({
+			default: false
+		})
+		disabled ? : boolean;
+		imgList: string[] = [];
+		@Emit('update')
+		changeImg(): string[] {
+			return this.imgList;
+		}
+		@Emit('cancelUpdate')
+		cancelUpdate(): any {}
+		@Watch('imgs', {
+			deep: true,
+			immediate: true,
+		})
+		imgsChange(val: any) {
+			if (val) {
+				this.imgList = val;
+			}
+		}
+		addImg(e: any): void {
+			// if (this.disabled) return;
+			if ((this.max as number) > 0 && this.imgList.length >= (this.max as number)) {
+				// 如果超出最大张数限制,提示
+				uni.showToast({
+					title: '至多添加' + this.max + '张',
+					duration: 2000
+				});
+				return;
+			}
+
+			// 选择图库图片
+			const that = this;
+			uni.chooseImage({
+				count: this.max,
+				success(res) {
+					const tempFilePaths: any = res.tempFilePaths;
+					uni.showLoading({
+						title: '上传中...'
+					});
+					tempFilePaths.forEach((item: any, index: any) => {
+						that.$http
+							.upPic({
+								filePath: item
+							})
+							.then((res: any) => {
+								uni.hideLoading();
+								if (!that.max || that.imgList.length < that.max) {
+									that.imgList.push(res);
+								}
+								that.changeImg();
+							})
+							.catch((err: any) => {
+								uni.hideLoading();
+								console.log(err);
+							});
+					});
+				},
+				fail: () => {
+					this.cancelUpdate();
+				}
+			});
+		}
+		deletePic(index: any): void {
+			// console.log(3333, index);
+			if (this.disabled) return;
+			this.imgList.splice(index, 1);
+			this.changeImg();
+		}
+		preview(url: string): void {
+			uni.previewImage({
+				current: url, // 当前显示图片的http链接
+				urls: [url] // 需要预览的图片http链接列表
+			});
+		}
+		hideLoading(): void {
+			uni.hideLoading();
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.img-container {
+		width: 100%;
+		display: flex;
+		align-content: flex-start;
+		flex-wrap: wrap;
+		background: transparent;
+		// padding-top: 10px;
+
+		.wrapper-box {
+			width: 1/3 * 100%;
+			margin-bottom: vw(12);
+
+			&:nth-of-type(3n+2) {
+				@include flex-x(center);
+			}
+
+			&:nth-of-type(3n) {
+				@include flex-x(flex-end);
+			}
+		}
+
+		.wrapper {
+			position: relative;
+
+			.image {
+				width: 100%;
+				height: 100%;
+				border-radius: 3px;
+			}
+
+			.close-icon {
+				position: absolute;
+				width: vw(40);
+				height: vw(40);
+				top: 0;
+				left: 0;
+				right: 0;
+				bottom: 0;
+				margin: auto;
+				@include icon(40, rgba(0, 0, 0, 0.5));
+			}
+		}
+
+		.add {
+			// width: vw(100);
+			// height: vw(100);
+			@include flex-y(center);
+			color: #999;
+			background: #F2F2F2;
+			border: 1px solid #f5f5f5;
+			border-radius: vw(5);
+			box-sizing: border-box;
+
+			.default-icon {
+				@include icon(60, $btn-color);
+			}
+
+			.tips {
+				@include word-vw(12, #cccccc);
+			}
+		}
+	}
+</style>

+ 173 - 0
src/components/MulVideoUpload/MulVideoUpload.vue

@@ -0,0 +1,173 @@
+<template>
+	<view class="img-container">
+		<view class="wrapper-box">
+			<view class="wrapper" v-if="videoUrl">
+				<video class="image" :controls="false" :show-center-play-btn="false" :src="videoUrl" @load="hideLoading"
+					v-if="videoUrl" />
+				<text class="close-icon" @click="deleteVideo(index)">&#xe6e8;</text>
+			</view>
+		</view>
+		<!-- <view class="wrapper-box">
+			<view class="add" :style="{ width: width + 'vw', height: height + 'vw' }" @click="addVideo"
+				v-if="!videoUrl">
+				<text class="default-icon" :style="{ color: addColor }">&#xe71b;</text>
+			</view>
+		</view> -->
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		Watch
+	} from 'vue-property-decorator';
+	@Component({})
+	export default class MulVideoUlpload extends Vue {
+		@Prop({
+			default: []
+		})
+		imgs ? : string[];
+		@Prop({
+			default: 9
+		})
+		max ? : number;
+		@Prop({
+			default: 26
+		})
+		width ? : number;
+		@Prop({
+			default: 26
+		})
+		height ? : number;
+		@Prop({
+			default: '#9c3d92'
+		})
+		addColor ? : string;
+		@Prop({
+			default: false
+		})
+		disabled ? : boolean;
+		videoUrl: string = '';
+		@Emit('update')
+		changeImg(): any {
+			return this.videoUrl;
+		}
+
+		@Emit('cancelUpdate')
+		cancelUpdate(): any {}
+		@Watch('video', {
+			deep: true,
+			immediate: true,
+		})
+		videoChange(val: any) {
+			if (val) {
+				this.videoUrl = val;
+			}
+		}
+		addVideo(e: any): void {
+
+			// 选择图库图片
+			const that = this;
+			uni.chooseVideo({
+				sourceType: ['camera', 'album'],
+				success(res) {
+					const tempFilePath: any = res.tempFilePath;
+					uni.showLoading({
+						title: '上传中...'
+					});
+					that.$http
+						.upPic({
+							filePath: tempFilePath
+						})
+						.then((res: any) => {
+							uni.hideLoading();
+							that.videoUrl = res;
+							that.changeImg();
+						})
+						.catch((err: any) => {
+							uni.hideLoading();
+							console.log(err);
+						});
+				},
+				fail: () => {
+					this.cancelUpdate();
+				}
+			});
+		}
+		deleteVideo(index: any): void {
+			if (this.disabled) return;
+			this.videoUrl = "";
+			this.changeImg();
+		}
+		hideLoading(): void {
+			uni.hideLoading();
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.img-container {
+		width: 100%;
+		display: flex;
+		align-content: flex-start;
+		flex-wrap: wrap;
+		background: white;
+		padding-top: 10px;
+
+		.wrapper-box {
+			// width: 1/3 * 100%;
+			margin-bottom: vw(12);
+
+			&:nth-of-type(3n+2) {
+				@include flex-x(center);
+			}
+
+			&:nth-of-type(3n) {
+				@include flex-x(flex-end);
+			}
+		}
+
+		.wrapper {
+			position: relative;
+
+			.image {
+				width: vw(335);
+				border-radius: 3px;
+			}
+
+			.close-icon {
+				position: absolute;
+				width: vw(40);
+				height: vw(40);
+				top: 0;
+				left: 0;
+				right: 0;
+				bottom: 0;
+				margin: auto;
+				@include icon(40, rgba(0, 0, 0, 0.5));
+			}
+		}
+
+		.add {
+			// width: vw(100);
+			// height: vw(100);
+			@include flex-y(center);
+			color: #999;
+			background: #F2F2F2;
+			border: 1px solid #f5f5f5;
+			border-radius: vw(5);
+			box-sizing: border-box;
+
+			.default-icon {
+				@include icon(60, $btn-color);
+			}
+
+			.tips {
+				@include word-vw(12, #cccccc);
+			}
+		}
+	}
+</style>

+ 235 - 0
src/components/Navbar/Navbar.vue

@@ -0,0 +1,235 @@
+<template>
+	<view class="">
+		<uni-nav-bar v-if="navType === 'custom'" :status-bar="true" :shadow="false" :border="false" :fixed="true"
+			:color="color" :background-color="backgroundColor" :leftWidth="leftWidth" :rightWidth="rightWidth">
+			<view class="" style="width: 100%;">
+				<slot></slot>
+			</view>
+		</uni-nav-bar>
+		<uni-nav-bar v-else-if="navType === 'search'" :title="title" :status-bar="true" :shadow="false" :border="false" :fixed="true"
+			:color="color" :background-color="backgroundColor" :leftWidth="leftWidth" :rightWidth="rightWidth">
+			<view slot="left">
+				<IconText v-if="showBack" style="padding: 8px;" @click.native="handle_click_search" :color="color" :code="`\ue8ac`"
+					size="16" />
+			</view>
+		</uni-nav-bar>
+		<uni-nav-bar v-else-if="navType === 'front'" :title="title" :status-bar="true" :shadow="false" :border="false"
+			:fixed="true" :color="color" :background-color="backgroundColor" :leftWidth="leftWidth"
+			:rightWidth="rightWidth">
+			<view slot="left">
+				<view class="front-search-box" @click="handle_click_search">
+					<IconText class="icon" size="16" color="#FF6803" :code="`\ue89f`"></IconText>
+					搜索
+				</view>
+				<view class="front-seatch-title">
+					<IconText :code="`\ue881`" size="24" color="#333"></IconText>
+				</view>
+			</view>
+			<!-- <view class="bg"></view> -->
+		</uni-nav-bar>
+		<uni-nav-bar v-else-if="navType === 'user'" :title="title" :status-bar="true" :shadow="false" :border="false" :fixed="true"
+			:color="color" :background-color="backgroundColor" :leftWidth="leftWidth" :rightWidth="rightWidth">
+			<view class="user-navbar-box">
+				<view class="user-navbar-bg"></view>
+				{{title}}
+			</view>
+		</uni-nav-bar>
+		<uni-nav-bar v-else-if="navType === 'code'" :title="title" :status-bar="true" :shadow="false" :border="false"
+			:fixed="true" :color="color" :background-color="backgroundColor" :leftWidth="leftWidth"
+			:rightWidth="rightWidth">
+			<view slot="left" style="position: relative;">
+				<view class="code-btn-box" @click="handleCode">
+					<IconText class="icon" size="16" color="#333" :code="`\ue874`"></IconText>
+					二维码
+				</view>
+				<view class="code-title">我的</view>
+			</view>
+			<view class="code-bg"></view>
+		</uni-nav-bar>
+		<uni-nav-bar v-else :title="title" :status-bar="true" :shadow="false" :border="false" :fixed="true"
+			:color="color" :background-color="backgroundColor" :leftWidth="leftWidth" :rightWidth="rightWidth">
+			<view slot="left">
+				<IconText v-if="showBack" style="padding: 8px;" @click.native="handle_click_back" :color="color" :code="`\ue8ac`"
+					size="16" />
+				<IconText v-if="showHome" style="padding: 8px;" @click.native="handle_click_home" :color="color" :code="`\ue707`"
+					size="16" />
+			</view>
+		</uni-nav-bar>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	@Component({})
+	export default class Navbar extends Vue {
+		@Prop({
+			default: ''
+		})
+		private title ? : string; // 标题
+		@Prop({
+			default: true
+		})
+		private showBack ? : boolean; // 是否展示返回按钮
+		@Prop({
+			default: false
+		})
+		private showHome ? : boolean; // 是否展示返回按钮
+		@Prop({
+			default: true
+		})
+		private statusBar ? : boolean; //
+		@Prop({
+			default: false
+		})
+		private shadow ? : boolean; //
+		@Prop({
+			default: false
+		})
+		private border ? : boolean; //
+		@Prop({
+			default: true
+		})
+		private fixed ? : boolean; //
+		@Prop({
+			default: '#ffffff'
+		})
+		private backgroundColor ? : string; //
+		@Prop({
+			default: '#000000'
+		})
+		private color ? : string; //
+		@Prop({
+			default: ''
+		})
+		private navType ? : string; //navbar类型
+		@Prop({
+			default: ''
+		})
+		private leftWidth ? : string;
+		@Prop({
+			default: ''
+		})
+		private rightWidth ? : string;
+
+		handle_click_back(): void {
+			console.log(this.$Router)
+			this.$Router.back(1);
+		}
+		
+		handle_click_search(){
+			this.$Router.push({
+				path: '/packages/goods/search'
+			})
+		}
+		
+		handle_click_home(){
+			this.$Router.pushTab({
+				path: '/pages/front/front'
+			})
+		}
+		
+		handleCode(){
+			this.$Router.push({
+				path: '/packages/user/user/qrcode',
+			})
+		}
+	}
+</script>
+
+<style lang="scss">
+	
+	.front-search-box{
+		height: vw(32);
+		width: vw(124);
+		box-sizing: border-box;
+		// border: vw(1) solid rgba(255, 255, 255, 0.3);
+		border-radius: vw(16);
+		@include flex-x(flex-start);
+		background: rgba(255, 255, 255, 1);
+		position: relative;
+		z-index: 10;
+		padding-left: vw(10);
+		box-sizing: border-box;
+		border: vw(1) solid #FF6803;
+		color: #333;
+		.icon{
+			margin-right: vw(12);
+		}
+	}
+	
+	.code-btn-box{
+		height: vw(30);
+		box-sizing: border-box;
+		border: vw(1) solid rgba(0, 0, 0, 0.11);
+		border-radius: vw(15);
+		@include flex-x(center);
+		margin-left: vw(8);
+		width: vw(90);
+		@include word-vw(14, #333);
+		position: relative;
+		z-index: 10;
+		.icon{
+			margin-right: vw(3);
+		}
+	}
+	
+	.code-title{
+		position: absolute;
+		width: calc(100vw - 20px);
+		left: 0;
+		height: 100%;
+		top: 0;
+		@include flex-x(center);
+		z-index: 5;
+		color: #333;
+		font-size: vw(17);
+	}
+	
+	.code-bg{
+		position: absolute;
+		width: 100%;
+		height: 100%;
+		top: 0;
+		left: 0;
+		z-index: -1;
+		background: linear-gradient(90deg, #FBEAE0, #F6F6E9 100%);
+	}
+	
+	.front-seatch-title{
+		position: absolute;
+		width: calc(100vw - 20px);
+		height: 44px;
+		line-height: 44px;
+		bottom: 0;
+		z-index: 9;
+		text-align: center;
+		font-size: vw(16);
+		color: #333;
+	}
+	.bg{
+		position: absolute;
+		width: 100%;
+		height: 100%;
+		background: linear-gradient(0deg, rgba(234, 237, 254, 0.81), rgba(234, 237, 254, 0.81)), linear-gradient(90deg, rgba(247,5,57,0.34) -5%, rgba(3,66,161,0.11) 105%);
+		top: 0;
+		left: 0;
+	}
+	
+	.user-navbar-box{
+		width: 100%;
+		@include flex-x(center);
+		.user-navbar-bg{
+			position: absolute;
+			width: 100%;
+			height: 100%;
+			top: 0;
+			left: 0;
+			background: linear-gradient(90deg, rgba(255, 150, 51, 1) 0%, rgba(255, 87, 51, 1) 100%);
+			z-index: -1;
+		}
+	}
+</style>

+ 94 - 0
src/components/NoData/NoData.vue

@@ -0,0 +1,94 @@
+<template>
+	<view class="nodata" v-if="show">
+		<view class="main" :style="{paddingTop:topNum+'%'}">
+			<image class="nodata-img" mode="widthFix" :src="backImageUrl?backImageUrl+imgUrl:''"></image>
+			<text class="nodata-content" v-if="content">{{ content || '' }}</text>
+			<text class="nodata-title" v-if="title">{{ title || '' }}</text>
+			<text class="nodata-desc" v-if="desc">{{ desc || '' }}</text>
+		</view>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	// import {
+	// 	Getter,
+	// 	Mutation
+	// } from 'vuex-class';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	@Component({})
+
+	export default class NoData extends Vue {
+		@Prop({
+			default: false
+		}) show ? : boolean; //是否展示
+		@Prop({
+			default: 30
+		}) topNum ? : number; //距离顶部的距离
+		@Prop({
+			default: "没有数据"
+		}) title ? : string; //title展示
+		@Prop({
+			default: ""
+		}) content ? : string; //content展示
+		@Prop({
+			default: ""
+		}) desc ? : string; //desc展示
+		@Prop({
+			default: "no-data.png"
+		}) imgUrl ?: string;
+		backImageUrl: string = OSS_STATIC //oss地址
+
+		created() {}
+		mounted() {}
+		//methods---------------
+
+	}
+</script>
+
+<style lang='scss' scoped>
+	.nodata {
+		position: relative;
+		text-align: center;
+
+		.main {
+			@include flex-y();
+
+			.nodata-img {
+				margin-bottom: vw(10);
+				/* @include wh(148, 146); */
+				width: vw(200);
+				/* flex: 0; */
+			}
+
+			.nodata-content {
+				@include word-vw(16, #333333);
+				font-weight: bold;
+			}
+
+			.nodata-title {
+				/* margin-top: vw(6); */
+				flex: 0;
+				/* width: vw(200); */
+				font-size: vw(14);
+				color: $gray9;
+				line-height: vw(19);
+			}
+
+			.nodata-desc {
+				flex: 1;
+				width: vw(200);
+				line-height: vw(19);
+				font-size: vw(12);
+				color: $gray9;
+				margin-top: vw(10);
+			}
+		}
+	}
+</style>

+ 165 - 0
src/components/OrderItem/OrderItem.vue

@@ -0,0 +1,165 @@
+<template>
+	<view class="order-main">
+		<view class="sku" v-for="(sku, index) in sku" :key="index">
+			<image class="image" :src="sku.masterPic" mode="aspectFill"></image>
+			<view class="title-wrap">
+				<text class="name">{{ sku.name }}</text>
+				<text class="attrs">{{ sku.attrs | attrsFilter }}</text>
+				<view class="bottom">
+					x{{ sku.num }}
+					<view class="price-wrap">
+						<text>¥{{ sku.price | moneyFormat }}</text>
+					</view>
+				</view>
+				<view class="th" v-if="isTh">
+					<!-- <view class="btn" @click="selectGoods">退款</view> -->
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		Watch
+	} from 'vue-property-decorator';
+	@Component({
+		filters: {
+			attrsFilter(val: any): string {
+				let str = '';
+				val.forEach((item: any) => {
+					str += item.keyName + ':' + item.value + '';
+				});
+				return str;
+			},
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class OrderItem extends Vue {
+		@Prop({
+			default: []
+		})
+		sku!: any; //规格列表
+		@Prop({
+			default: 0
+		})
+		total!: number; //合计
+		@Prop({
+			default: true
+		})
+		isTotal!: number; //显示合计
+		@Prop({
+			default: false
+		})
+		isTh!: boolean; //显示合计
+		@Prop({
+			default: null
+		})
+		oid!: any; //显示合计
+		@Watch('sku', {
+			deep: true
+		})
+		skuChange(val: any) {
+			console.log(55555, val)
+		}
+
+		selectGoods() {
+			this.$Router.push({
+				path: "/packages/order/select-goods",
+				query: {
+					skuList: this.sku,
+					oid: this.oid
+				}
+			})
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.word14 {
+		@include word-vw(14);
+	}
+
+	.word12 {
+		@include word-vw(12, $gray9);
+	}
+
+	.order-main {
+		@include flex-y(flex-start, flex-start);
+		// border-bottom: 1px solid $line-color;
+		// border-top: 1px solid $line-color;
+		width: 100vw;
+		background: white;
+
+		.sku {
+			width: 100%;
+			@include flex-x(flex-start, flex-start);
+			padding: 0 vw(15) vw(8);
+			box-sizing: border-box;
+
+			.image {
+				width: vw(64);
+				height: vw(64);
+				border-radius: vw(6);
+			}
+
+			.title-wrap {
+				@include flex-y(flex-start, flex-start);
+				margin-left: vw(10);
+				flex: 3;
+
+				.name {
+					@include word-vw(14, #333);
+				}
+
+				.attrs {
+					@include word-vw(12, #999);
+					margin-top: vw(3);
+				}
+
+				.bottom {
+					margin-top: vw(12);
+					width: 100%;
+					@include word-vw(12, #333);
+					@include flex-x();
+				}
+
+				.th {
+					width: 100%;
+					@include flex-x(flex-end);
+					margin-top: vw(6);
+
+					.btn {
+						width: vw(90);
+						height: vw(30);
+						border-radius: vw(15);
+						border: vw(1) solid #BF2071;
+						background: #FFEBF1;
+						@include flex-x(center);
+						@include word-vw(14, #333);
+						box-sizing: border-box;
+					}
+				}
+			}
+
+			.price-wrap {
+				@include flex-y(flex-start, flex-end);
+				flex: 1;
+			}
+		}
+
+		.total {
+			width: 100%;
+			text-align: right;
+			padding: vw(8) vw(15);
+			box-sizing: border-box;
+		}
+	}
+</style>

+ 225 - 0
src/components/Password/Password.vue

@@ -0,0 +1,225 @@
+<template>
+	<uni-popup ref="popup" type="center">
+		<view class="pass-wrap">
+			<IconText class="close" :size="10" :code="`\ue847`" @click.native="close"></IconText>
+			<view class="title">请输入安全密码</view>
+			<!-- <text class="sub-title" id="sub-title">输入安全密码</text> -->
+			<!-- <text class="sub-title">查看钱包数据</text> -->
+			<view class="tip" v-if="money">金额</view>
+			<view class="money" v-if="money">{{money | moneyFormat}}</view>
+			<view class="line"></view>
+			<view class="pass-main">
+				<view class="rect-wrap">
+					<view class="rect" v-for="(item, i) in new Array(6).fill(0)" :key="i">
+						<view class="circle" v-if="num>i"></view>
+					</view>
+				</view>
+				<input :focus="focusValue" :maxlength="6" v-model="password" class="input" type="number"
+					@input="changeInput">
+			</view>
+			<text class="forget" @click="forget">忘记密码?</text>
+		</view>
+	</uni-popup>
+</template>
+
+<script lang="ts">
+	/**
+	 * Icons 图标
+	 * @emit {String} finish 输入满6位向父组件传递输入内容
+	 * 可配合ref调用open()和close()方法
+	 */
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		// Ref,
+		Watch
+	} from 'vue-property-decorator';
+	import pubKey from '@/pages/login/pubKey';
+	// @ts-ignore
+	import JSEncrypt from '@/common/jsencrypt.js';
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class Password extends Vue {
+		@Prop({
+			default: 0
+		})
+		money ? : any
+		code: string = '\ue76b';
+		password: string = "";
+		num: number = 0;
+		flag: boolean = false;
+		focusValue: boolean = false
+		open(): void {
+			this.num = 0;
+			this.password = '';
+			(this.$refs.popup as any).open('center')
+			this.$nextTick(() => {
+				this.focusValue = true
+			})
+		}
+		close(): void {
+			(this.$refs.popup as any).close()
+			this.focusValue = false
+		}
+		@Emit('finish')
+		emitDone(val: string) {
+			console.log(val)
+			let timeStamp = (+new Date() + '').substr(0, 10);
+			let pass = this.rsa(`${val}\\n${timeStamp}\\n`);
+			return {
+				timeStamp,
+				pass
+			}
+		}
+
+		@Watch('password')
+		getPassword(val: string) {
+			this.num = val.length
+			if (this.num == 6) {
+				// 密码已填写完成
+				!this.flag && this.emitDone(val);
+				this.flag = true;
+				this.empty();
+				this.close();
+			}
+		}
+
+		empty() {
+			this.num = 0;
+			this.password = '';
+			this.flag = false;
+		}
+
+		changeInput(event: any) {
+			// const value: string = event.target.value
+			// this.num = value.length
+			// if (this.num == 6) {
+			// 	// 密码已填写完成
+			// 	this.emitDone(value);
+			// }
+		}
+		forget() {
+			this.$Router.push({
+				path: '/packages/user/code',
+				query: {
+					type: 'update',
+					name: 'pay'
+				}
+			})
+		}
+		rsa(pass: string) {
+			console.log('加密前', pass)
+			var encryptor = new JSEncrypt() // 创建加密对象实例
+			encryptor.setPublicKey(pubKey) //设置公钥
+			return encryptor.encrypt(pass) || '加密失败'
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.pass-wrap {
+		width: vw(300);
+		// height: vw(180);
+		border-radius: vw(10);
+		background: white;
+		@include flex-y();
+		position: relative;
+
+		.close {
+			position: absolute;
+			top: vw(10);
+			right: vw(10);
+		}
+
+		.title {
+			margin: vw(27) auto vw(16);
+			@include word-vw(16, #333);
+		}
+
+		.sub-title {
+			@include word-vw(14)
+		}
+		
+		.tip{
+			@include word-vw(14, #333);
+		}
+		
+		.money{
+			@include word-vw(30, #333);
+			font-weight: 600;
+			margin-top: vw(6);
+		}
+		
+		.line{
+			width: vw(280);
+			border-bottom: vw(1) solid #F5F5F5;
+			margin-top: vw(10);
+		}
+
+		.pass-main {
+			margin-top: vw(12);
+			position: relative;
+			width: vw(240);
+			height: vw(32);
+			text-align: center;
+
+			.input {
+				position: absolute;
+				left: -100vw;
+				top: 0;
+				width: 200vw;
+				height: vw(32);
+				text-align: left;
+			}
+
+			.rect-wrap {
+				width: 100%;
+				@include flex-x(space-between);
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+
+				.rect {
+					width: vw(32);
+					height: vw(32);
+					border-radius: vw(5);
+					background-color: #F5F5F5;
+
+					@include flex-x(center, center);
+
+					.circle {
+						width: vw(6);
+						height: vw(6);
+						border-radius: vw(6);
+						background: #333;
+						;
+						// line-height: vw(8);
+						// transform: scale(4);
+						// @include flex-x(center, center);
+						// height: vw(60);
+						// line-height: vw(1);
+					}
+				}
+			}
+		}
+
+		.forget {
+			width: 100%;
+			text-align: center;
+			// padding-right: vw(28);
+			@include word-vw(14, $gray3);
+			box-sizing: border-box;
+			margin-top: vw(32);
+			margin-bottom: vw(16);
+		}
+	}
+</style>

+ 157 - 0
src/components/SearchBox/SearchBox.vue

@@ -0,0 +1,157 @@
+<template>
+	<view class='search-content'>
+		<!-- 首页搜索 -->
+		<view class="search-box" v-if="typeFlag == 'base'" @click="toPage">
+			<view class="search-left">
+				<!-- <text class="icon">&#xe885;</text> -->
+				<IconText class="icon" :code="`\ue885`" size="14" color="#BFBFBF"></IconText>
+				<input type="text" value="" placeholder="搜索商品名称/品牌/品类" disabled="false" />
+			</view>
+			<text class="search-btn">搜索</text>
+		</view>
+		<!-- 搜索页面搜索 -->
+		<view class="search-box1" v-if="typeFlag == 'searchPage'">
+			<view class="search-left1">
+				<IconText class="icon1" :code="`\ue885`" size="14" color="#BFBFBF"></IconText>
+				<input type="text" class="input-styl1" placeholder-class="placeholder" confirm-type="search" :value="searchContent" @input="changeInput"
+					@confirm="inputSearch" placeholder="搜索商品名称" />
+				<!-- <text class="icon1" v-if="iconShow == true" @click="deleteContent">&#xe70e;</text> -->
+				<IconText class="icon1" :code="`\ue88a`" size="16" color="#999"></IconText>
+			</view>
+			<text class="search-btn1" @click="clickCancel">取消</text>
+		</view>
+
+	</view>
+</template>
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Watch,
+		Emit,
+		Vue
+	} from 'vue-property-decorator';
+	@Component({})
+
+	export default class SearchBox extends Vue {
+		@Prop({
+			default: "base"
+		}) private typeFlag ? : string; //搜索框类型
+		@Prop({
+			default: ""
+		}) private searchTitle ? : string; //搜索内容 父->子
+		searchContent: string = ''; //搜索框内容
+		iconShow: boolean = false; //搜索框删除icon
+
+		// methods
+		//@input修改input内容
+		changeInput(e: any) {
+			this.searchContent = e.detail.value;
+		}
+		//删除筛选内容
+		deleteContent() {
+			this.searchContent = '';
+		}
+		//跳转页面
+		toPage() {
+			this.$Router.push({
+				path: '/packages/goods/search',
+				query: {}
+			});
+		}
+
+
+		// emit-----------------------
+		@Emit('cancelEvent') //点击取消按钮
+		//点击取消按钮
+		clickCancel() {
+			this.searchContent = '';
+		}
+		@Emit('inputSearch') //点击键盘上的搜索
+		inputSearch() {
+			if (this.searchContent == '') {
+				// uni.showToast({
+				// 	title: '请输入搜索内容',
+				// 	icon: 'none'
+				// });
+				return "";
+			} else {
+				return this.searchContent;
+			}
+		}
+		// watch-------------------
+		@Watch('searchContent') //监听是否有搜索内容,展示删除icon
+		changeIconShow() {
+			this.iconShow = this.searchContent !== '';
+		}
+		@Watch('searchTitle') //监听父组件点击历史搜索记录,更新搜索title
+		changeSearchContent() {
+			if (this.searchTitle !== '') {
+				this.searchContent = this.searchTitle || '';
+			}
+		}
+
+	}
+</script>
+
+<style lang='scss' scoped>
+	.search-content {
+		font-size: vw(14);
+
+		.search-box {
+			@include flex-x();
+			@include wh(348, 32);
+			margin: 0 auto;
+			background-color: #F6F6F6;
+			border-radius: vw(8);
+
+			.search-left {
+				@include flex-x();
+
+				.icon {
+					margin: 0 vw(10);
+					@include icon(14);
+				}
+			}
+
+			.search-btn {
+				padding-left: vw(12);
+				margin-right: vw(13);
+				border-left: 1px solid #E3E3E3;
+				color: $btn-color;
+				flex-shrink: 0;
+			}
+		}
+
+		.search-box1 {
+			@include flex-x();
+			@include wh(348, 32);
+			margin: 0 auto;
+
+			.search-left1 {
+				@include flex-x(flex-start);
+				@include wh(293, 32);
+				border-radius: vw(8);
+				background-color: #F6F6F6;
+
+				.icon1 {
+					margin: 0 vw(10);
+					@include icon(14);
+				}
+
+				.input-styl1 {
+					width: 80%;
+				}
+				.placeholder{
+					color: #999;
+				}
+			}
+
+			.search-btn1 {
+				padding-left: vw(12);
+				margin-right: vw(13);
+				color: $btn-color;
+			}
+		}
+	}
+</style>

+ 162 - 0
src/components/ShopShare/ShopShare.vue

@@ -0,0 +1,162 @@
+<template>
+	<view class="share-container">
+		<uni-popup ref="popup" type="center">
+			<view class="wrapper" v-if="popShow">
+				<canvas canvas-id="shareCanvas" class="canvas" style="width: 250px;height:430px;"></canvas>
+				<view class="bottom">
+					<button class="bottom-btn" open-type="share">
+						<image :src="static + 'wechat.png'"></image>
+						<view class="text">分享好友</view>
+					</button>
+					<view class="bottom-btn" @click="saveImageToPhotos('shareCanvas')">
+						<image :src="static + 'download.png'"></image>
+						<view class="text">保存图片</view>
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script lang="ts">
+	// @ts-nocheck
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		Mixins
+	} from 'vue-property-decorator';
+	import {
+		types
+	} from '@/common/store';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	import canvasMixin from '@/common/mixins/canvasMixin.ts';
+	import {
+		namespace
+	} from 'vuex-class';
+	const canvasModule = namespace('canvas');
+	const baseModule = namespace('base');
+	@Component({})
+	export default class ShopShare extends Mixins(canvasMixin) {
+		@canvasModule.Getter('_canvasData') _canvasData: any;
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		popShow: boolean = false;
+		static: string = OSS_STATIC;
+
+		closePop(): void {
+			(this.$refs.popup as any).close();
+			this.popShow = false;
+		}
+		openPop(): void {
+			(this.$refs.popup as any).open();
+			this.popShow = true;
+			uni.showLoading({
+				title: '加载中'
+			});
+			this.drawPoster();
+		}
+		mounted() {}
+		drawPoster(): void {
+			// 绘制海报
+			// 注意:page页面canvas-id获取ctx,组件需传this
+			const that = this;
+			const ctx = uni.createCanvasContext('shareCanvas', this);
+			// 绘制白色底
+			this.roundRect(ctx, 0, 0, 250, 460, '#ffffff', 8, 8, 8, 8);
+			this.roundRect(ctx, 0, 0, 250, 48, '#fff', 8, 0, 0, 8);
+			// 绘制头像
+			this.drawCircular(ctx, 24, 24, 13, 15, that._canvasData.avatar);
+			this.ellipsisText(
+				ctx,
+				that._userInfo.nickname,
+				200,
+				43,
+				13,
+				'#999',
+				'10px',
+				14
+			);
+			// 绘制宣传语
+			this.ellipsisText(
+				ctx,
+				that._canvasData.tips,
+				200,
+				43,
+				27,
+				'#454545',
+				'10px',
+				14
+			);
+			this.textSet(ctx, '”', '45px', 135, 20, '#ddd');
+			// 绘制店铺图片
+			this.drawImgInfo(
+				ctx,
+				10,
+				50,
+				230,
+				230,
+				that._canvasData.shareImg,
+				// that._canvasData.width,
+				// that._canvasData.height
+			);
+			// this.textSet(ctx, that._canvasData.title, '24px', 13, 360, '#333', 'bold ');
+			this.textSet(ctx, '店铺说明', '10px', 13, 348, '#999');
+			this.textSet(ctx, '商城名称', '14px', 13, 365, '#000', 'bold');
+			// // 小程序码
+			ctx.drawImage(that._canvasData.qr, 150, 295, 90, 90);
+			this.textSet(ctx, '长按识别进店铺', '10px', 90, 400, '#999999');
+			ctx.draw(true, () => {
+				console.log('draw,true');
+				uni.hideLoading();
+			});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.wrapper {
+		@include flex-y();
+		width: 250px;
+	}
+
+	.canvas {
+		border-radius: vw(5);
+		overflow: hidden;
+		margin-top: vw(50);
+	}
+
+	.bottom {
+		width: 230px;
+		margin-top: vw(15);
+		@include flex-x();
+
+		.text {
+			@include word-vw(14, white);
+			line-height: vw(20);
+			margin-top: vw(5);
+		}
+
+		image {
+			width: vw(60);
+			height: vw(60);
+		}
+	}
+
+	button {
+		background: none;
+		line-height: 1;
+		padding: 0;
+		margin: 0;
+	}
+
+	button::after {
+		border: 0px;
+	}
+
+	.button-hover {
+		background: none;
+	}
+</style>

+ 141 - 0
src/components/ShowModal/ShowModal.vue

@@ -0,0 +1,141 @@
+<template>
+	<uni-popup ref="popup" type="center">
+		<view class="show-modal">
+			<Icon class="close" @click="close" :code="`\ue76b`" color="#999" size="10"></Icon>
+			<view class="title">{{title}}</view>
+			<view class="content">{{content}}</view>
+			<view class="btn-box" :class="{'btn-styl': leftBtnText}">
+				<view class="btn cancel-btn" @click="close" v-if="leftBtnText">{{leftBtnText}}</view>
+				<view class="btn" @click="submit">{{btnText}}</view>
+			</view>
+		</view>
+	</uni-popup>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		Ref,
+		Watch
+	} from 'vue-property-decorator';
+	@Component({})
+	export default class ShowModal extends Vue {
+		@Prop({
+			default: ''
+		})
+		private title ? : string; //
+
+		@Prop({
+			default: ''
+		})
+		private content ? : string; //
+
+		@Prop({
+			default: ''
+		})
+		private btnText ? : string; //
+
+		@Prop({
+			default: ""
+		})
+		private leftBtnText ? : string; //
+
+		open() {
+			(this.$refs.popup as any).open();
+		}
+
+		close() {
+			(this.$refs.popup as any).close();
+		}
+
+		// emit---------------------------
+		@Emit('submit')
+		submit() { //弹窗点击确认按钮
+			this.close();
+			return '点击确认'
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.show-modal {
+		background: #fff;
+		width: vw(300);
+		@include flex-y();
+		border-radius: vw(10);
+		position: relative;
+
+		.close {
+			position: absolute;
+			right: vw(5);
+			top: vw(5);
+			padding: vw(5);
+		}
+
+		.title {
+			@include word-vw(16, #333);
+			margin-top: vw(25);
+		}
+
+		.content {
+			@include word-vw(14, #666);
+			margin-top: vw(12);
+			padding: 0 vw(12);
+			box-sizing: border-box;
+		}
+
+		.btn {
+			width: vw(65);
+			height: vw(35);
+			line-height: vw(35);
+			text-align: center;
+			background: $btn-color;
+			@include word-vw(14, #fff);
+			border-radius: vw(5);
+			margin-top: vw(16);
+			margin-bottom: vw(20);
+		}
+
+		.cancel-btn {
+			margin-right: 32px;
+			background: #EBEBEB;
+			color: #333;
+		}
+
+		.btn-cancel {
+			width: vw(150);
+			height: vw(35);
+			line-height: vw(35);
+			text-align: center;
+			background: #1A1A1A;
+			@include word-vw(14, #fff);
+			border-radius: vw(4);
+			margin-top: vw(28);
+			margin-bottom: vw(15);
+		}
+
+		.btn-box {
+			border-top: vw(1) solid #F5F5F5;
+			margin-top: vw(10);
+			width: vw(200);
+			@include flex-x(center);
+		}
+
+		.btn-styl {
+			@include flex-x(center);
+
+			.btn {
+				width: vw(90);
+			}
+
+			.btn-cancel {
+				width: vw(90);
+				margin-right: vw(20);
+			}
+		}
+
+	}
+</style>

+ 464 - 0
src/components/SpecPopup/SpecPopup.vue

@@ -0,0 +1,464 @@
+<template>
+	<view class='content'>
+		<uni-popup ref="popup" @maskClick="maskClick" :safe-area="false">
+			<view class="spec-popup">
+				<view class="goods-styl">
+					<image class="image-styl" :src="showImg" mode="aspectFit"></image>
+					<view class="goods-info">
+						<!-- <view class="member">{{roleMap[userInfo.role]}}价</view> -->
+						<view class="name-styl">{{product.name}}</view>
+						<view class="stock-styl">库存{{showStock}}件</view>
+						<view class="price-styl">
+							<text>¥{{gooodPrice}}</text>
+							<view class="num-right">
+								<view class="num-cut" @click="numCut">-</view>
+								<view class="num-styl">{{goodsNum}}</view>
+								<view class="num-add" @click="numAdd">+</view>
+							</view>
+						</view>
+						<!-- <view>{{specMsg||'请选择规格'}}</view> -->
+					</view>
+					<!-- <text class="icon" style="padding: 6px;" @click="close">&#xe6f0;</text> -->
+				</view>
+				<!-- <scroll-view scroll-y="true" show-scrollbar="false" class="spec-module">
+					<view class="spec-styl" v-for="(item,index) in specList" :key="index">
+						<view class="spec-title">{{item.name}}</view>
+						<view class="spec-list">
+							<view class="spec-card" v-for="(eve,val) in specList[index].value" :key="val"
+								:class="{'spec-card1':chooseData[index] == eve}" @click="clickCard(index,eve)">{{eve}}
+							</view>
+						</view>
+					</view>
+				</scroll-view> -->
+				<MiniSpec :specData="goodsPopup" @getChoose="getShowMsg" @findSku="findSku"></MiniSpec>
+				<!-- <view class="goods-num">
+					<view class="num-title">数量</view>
+					<view class="num-right">
+						<view class="num-cut" @click="numCut">&#xe71a;</view>
+						<view class="num-styl">{{goodsNum}}</view>
+						<view class="num-add" @click="numAdd">&#xe60f;</view>
+					</view>
+				</view> -->
+				<view class="btn-styl">
+					<view class="add-btn" @click="checkData('add')" v-if="typeName === 'base'">加入购物车</view>
+					<view class="buy-btn" @click="checkData('buy')" v-if="typeName === 'base'">立即购买</view>
+					<!-- 详情页按钮 -->
+					<view class="add-btn1" @click="checkData('add')" :class="{disable: chooseSku.stock <= 0}"
+						v-if="typeName === 'goodsDetail' && btnShow==='add'">{{chooseSku.stock <= 0 ? '已售罄' : '选好了'}}
+					</view>
+					<view class="add-btn1" @click="checkData('buy')" :class="{disable: chooseSku.stock <= 0}"
+						v-if="typeName === 'goodsDetail' && btnShow==='buy'">{{chooseSku.stock <= 0 ? '已售罄' : '选好了'}}
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Vue,
+		Watch,
+		Emit
+	} from 'vue-property-decorator';
+	import {
+		Getter,
+		Mutation
+	} from 'vuex-class';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	@Component({})
+
+	export default class Name extends Vue {
+		@baseModule.Getter('_userInfo') userInfo: any;
+		@Prop({
+			default: {
+				spu_info: {},
+				skuList: []
+			}
+		}) product ? : any; //组件弹窗所用数据
+
+		@Prop({
+			default: 'base'
+		}) typeName ? : string; //使用组件类型 base按钮全要,goodsDetail区分展示加购or购买
+		@Prop({
+			default: 'add'
+		}) btnShow ? : string; //展示加购or购买按钮
+
+		goodsNum: number = 1; //商品数量
+		chooseData: any = {}; //选择规格
+		// specList: Array < object > = [{
+		// 		name: '型号',
+		// 		value: ['1号', '2号', '3号', '4号'],
+		// 	},
+		// 	{
+		// 		name: '大小',
+		// 		value: ['大大大', '小小小', '中中中'],
+		// 	}
+		// ]
+
+		goodsPopup: any = {
+			skuList: []
+		}
+		chooseSku: any = {}
+		specMsg: string = "" // 提示信息,
+
+		roleMap: any = {}
+
+		// get========================================================
+		get showImg() {
+			// return this.goodsPopup.masterPic || ''
+			if (Object.keys(this.chooseSku).length > 0) {
+				return this.chooseSku.pic;
+			}
+			if (Object.keys(this.goodsPopup).length > 0) {
+				return this.goodsPopup.masterPic;
+			}
+		}
+
+		get gooodPrice() {
+			if (Object.keys(this.chooseSku).length > 0) {
+				return this.chooseSku.price;
+			}
+			if (Object.keys(this.goodsPopup).length > 0) {
+				return this.goodsPopup.minPrice;
+			}
+		}
+
+		get showStock() {
+			if (Object.keys(this.chooseSku).length > 0) {
+				return this.chooseSku.stock || 0;
+			}
+			if (Object.keys(this.goodsPopup).length > 0) {
+				return this.goodsPopup.minPrice;
+			}
+		}
+
+		// watch==========================================
+		@Watch('product', {
+			deep: true,
+			immediate: true
+		})
+		productChange(val: any) {
+			if (Object.keys(val).length) {
+				// 单规格商品且不存在attrs
+				console.log(213123, val)
+				if (val.skuList[0] && !val.skuList[0]?.attrs) {
+					this.chooseSku = JSON.parse(JSON.stringify(val.skuList[0]))
+				}
+				this.goodsPopup = JSON.parse(JSON.stringify(val))
+				console.log('传给minispec数据', this.goodsPopup)
+			}
+		}
+
+		//methods---------------
+		//点击规格卡片
+		clickCard(index: number, val: string): void {
+			if (this.chooseData[index] === val) {
+				// this.chooseData[index] = val;
+				this.$set(this.chooseData, index, '')
+			} else {
+				this.$set(this.chooseData, index, val)
+			}
+			// console.log(index, val);
+			// console.log('选择数据', this.chooseData);
+		}
+		//减商品数量
+		numCut(): void {
+			if (this.goodsNum > 1) {
+				this.goodsNum--;
+			}
+		}
+		numAdd(): void {
+			if (this.chooseSku.stock < this.goodsNum + 1) return;
+			this.goodsNum++;
+		}
+		//点击遮罩层关闭弹窗
+		maskClick() {
+			this.emitType(false);
+		}
+		//打开弹窗
+		open(): void {
+			this.chooseData = {};
+			this.goodsNum = 1;
+
+			(this.$refs.popup as any).open('bottom')
+			this.emitType(true);
+		}
+		//关闭弹窗
+		close(): void {
+			(this.$refs.popup as any).close();
+			this.emitType(false);
+		}
+		// 获取显示所选規格情况
+		getShowMsg(detail: any) {
+			// console.log('chuan过来个啥啊', detail);
+			let selectVal = Object.values(detail);
+			let msg = "";
+			let emptyArr = [];
+			if (selectVal.includes("")) {
+				// for (let k in detail) {
+				// 	if (detail[k] === "") {
+				// 		emptyArr.push(k);
+				// 	}
+				// }
+				// // 未选中的规格
+				// // msg =  emptyArr.join(" ");
+				this.chooseSku = {};
+			} else {
+				msg = selectVal.join("-");
+			}
+			this.specMsg = msg;
+			// this.triggerEvent('showSpecMsg', this.specMsg);
+		}
+
+		findSku(detail: any) {
+			// console.log('this.id------>', detail)
+			this.goodsPopup.skuList.some((item: any) => {
+				if (item.id === detail) {
+					this.chooseSku = JSON.parse(JSON.stringify(item))
+					this.chooseSku.num = this.goodsNum
+					this.chooseSku.masterPic = this.goodsPopup.masterPic;
+					this.chooseSku.name = this.goodsPopup.name;
+					this.chooseSku.skuId = this.chooseSku.id;
+					this.chooseSku.attrsName = item.attrs.map((eve: any) => eve.value).join('-');;
+					console.log("skuobj", this.chooseSku);
+					return true;
+				}
+			});
+		}
+
+		checkData(val: string): any {
+			if (this.chooseSku.stock <= 0) {
+				uni.showToast({
+					title: '该商品已售罄',
+					icon: 'none'
+				})
+				return;
+			}
+			this.chooseSku.num = this.goodsNum;
+			if (!this.chooseSku.id) {
+				uni.showToast({
+					title: '请选择商品规格',
+					icon: 'none'
+				})
+				return;
+			}
+			val == 'add' ? this.addCart() : this.buyNow();
+		}
+
+
+		// emit----------------------
+		@Emit('buyNow') //立即购买
+		buyNow(): any {
+			this.close();
+			return this.chooseSku;
+		}
+		@Emit('emitType')
+		emitType(val: boolean): boolean {
+			return val;
+		}
+		@Emit('addCart') //添加购物车
+		addCart(): any {
+			this.close();
+			return this.chooseSku;
+		}
+
+	}
+</script>
+
+<style lang='scss' scoped>
+	.content {
+		box-sizing: border-box;
+
+		.spec-popup {
+			padding: vw(20) vw(16);
+			border-top-left-radius: vw(36);
+			border-top-right-radius: vw(36);
+			background-color: #F9F9F9;
+
+			.goods-styl {
+				@include flex-x(flex-start);
+				border-bottom: 1px solid #F2F2F2;
+				background: #fff;
+				padding: vw(18);
+				border-radius: vw(30);
+
+				.image-styl {
+					@include wh(100, 100);
+					border-radius: vw(16);
+				}
+
+				.goods-info {
+					margin-left: vw(16);
+					@include word-vw(12, $gray9);
+					min-height: vw(90);
+					@include flex-y(space-between, flex-start);
+					flex: 1;
+
+					.member {
+						height: vw(24);
+						line-height: vw(24);
+						padding: 0 vw(15);
+						background: #333;
+						@include word-vw(14, #fff);
+						font-weight: 600;
+						border-radius: vw(12);
+					}
+					
+					.name-styl{
+						width: 100%;
+						@include word-vw(16, #333333);
+						font-weight: bold;
+						@include flex-x();
+						@include multi(3);
+					}
+
+					.price-styl {
+						width: 100%;
+						@include word-vw(16, #333333);
+						font-weight: bold;
+						@include flex-x();
+						.num-right{
+							@include flex-x();
+							height: vw(32);
+							border-radius: vw(16);
+							background: #F3F3F3;
+							.num-cut, .num-add, .num-styl{
+								width: vw(24);
+								@include flex-x(center);
+							}
+							.num-cut{
+								padding-left: vw(8);
+							}
+							.num-add{
+								padding-right: vw(8);
+							}
+						}
+					}
+
+					.stock-styl {
+						/* margin: vw(2) 0 vw(20) 0; */
+					}
+				}
+
+				.icon {
+					@include icon(12, #000000);
+					position: absolute;
+					right: 20px;
+					top: 15px;
+				}
+			}
+
+			.spec-module {
+				max-height: vw(200);
+				overflow-y: scroll;
+				@include hide-scrollbar();
+
+				.spec-styl:first-child {
+					margin-top: vw(18);
+				}
+
+				.spec-styl {
+					background-color: #ffffff;
+
+					.spec-title {
+						margin: 0 0 vw(16) 0;
+					}
+
+					.spec-list {
+						@include flex-x(flex-start);
+						flex-flow: row wrap;
+
+						.spec-card {
+							padding: vw(4) vw(16);
+							margin: 0 vw(20) vw(12) 0;
+							background-color: #F2F2F2;
+							border-radius: vw(15);
+							font-size: vw(14);
+						}
+
+						.spec-card1 {
+							background-color: $main-color;
+							color: #ffffff;
+						}
+					}
+				}
+			}
+
+			.goods-num {
+				@include flex-x();
+				margin-top: vw(18);
+
+				.num-title {}
+
+				.num-right {
+					@include flex-x(flex-start);
+
+					.num-cut {
+						@include icon(26, $gray9);
+					}
+
+					.num-styl {
+						margin: 0 vw(12);
+					}
+
+					.num-add {
+						@include icon(26, $bk-color);
+					}
+				}
+			}
+
+			.btn-styl {
+				@include flex-x(center);
+				margin-top: vw(32);
+
+				view {
+					color: #ffffff;
+				}
+
+				.add-btn {
+					font-size: vw(14);
+					padding: vw(8) vw(32) vw(8) vw(28);
+					background-color: $gray3;
+					color: #ffffff;
+					border-top-left-radius: vw(22);
+					border-bottom-left-radius: vw(22);
+				}
+
+				.add-btn1 {
+					width: vw(345);
+					height: vw(50);
+					border-radius: vw(10);
+					@include flex-x(center);
+					background: $btn-color;
+
+					&.disable {
+						background: #ccc;
+						color: #fff;
+					}
+				}
+
+				.buy-btn {
+					font-size: vw(14);
+					padding: vw(8) vw(32) vw(8) vw(28);
+					background-color: $btn-color;
+					color: #ffffff;
+					border-top-right-radius: vw(22);
+					border-bottom-right-radius: vw(22);
+				}
+
+				.buy-btn1 {
+					width: vw(345);
+					height: vw(50);
+					border-radius: vw(25);
+					@include flex-x(center);
+					background: $btn-color;
+				}
+			}
+		}
+	}
+</style>

+ 171 - 0
src/components/Stepper/Stepper.vue

@@ -0,0 +1,171 @@
+<template>
+	<view class="numControl">
+		<view class="symbol" @click="decrease">
+			<!-- <text class="icon" :style="{ color: colorLeft }">{{ iconLeft }}</text> -->
+			<image class="img" :src="static ? static + 'cart-reduce.svg' : ''" mode="aspectFill"></image>
+		</view>
+		<input :value="count" class="count" :disabled="disabled" type="number" :style="{ 'background-color': inputBK,  color: color }"
+			@input="onChange" />
+		<view class="plus" @click="add">
+			<!-- <text class="icon" :style="{ color: colorRight }">{{ iconRight }}</text> -->
+			<image class="img" :src="static ? static + 'cart-add.svg' : ''" mode="aspectFill"></image>
+		</view>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		Watch
+	} from 'vue-property-decorator';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	@Component({})
+	export default class Stepper extends Vue {
+		@Prop({
+			default: 1
+		})
+		num!: number; // 默认件数
+		@Prop({
+			default: 0
+		})
+		index ? : number; // 序号(购物车index)
+		@Prop({
+			default: -1
+		})
+		max ? : number; //限购件数
+		@Prop({
+			default: 1
+		})
+		threshold ? : number; // 起购件数
+		@Prop({
+			default: '\ue71c'
+		})
+		iconLeft ? : string; // 减号图标
+		@Prop({
+			default: '\ue71b'
+		})
+		iconRight ? : string; // 加号图标
+		@Prop({
+			default: '#999999'
+		})
+		colorLeft ? : string; // 减号颜色
+		@Prop({
+			default: '#333333'
+		})
+		colorRight ? : string; // 加号颜色
+		@Prop({
+			default: '#F1F1F1'
+		})
+		inputBK ? : string; // input背景色
+		@Prop({
+			default: '#333'
+		})
+		color ? : string; // input背景色
+		@Prop({
+			default: false
+		})
+		disabled ? : boolean; // 是否禁用input
+		count: number = 1;
+		static: string = OSS_STATIC;
+		created(): void {
+			this.count = this.num;
+		}
+		onChange(val: any): void {
+			const value: number = +val.detail.value;
+			this.count = value > (this.threshold as number) ? value : (this.threshold as number);
+			this.changeNumber('input');
+		}
+
+		@Watch('num', {
+			immediate: true,
+		})
+		numChang() {
+			this.count = this.num;
+		}
+		@Emit('changeNumber')
+		changeNumber(val: string) {
+			return {
+				count: this.count,
+				index: this.index,
+				type: val
+			};
+		}
+		@Emit('limitChange')
+		limitChange(val: string) {
+			return {
+				content: val
+			}
+		}
+		add(): Boolean | void {
+			if (this.max && this.count >= this.max && this.max != -1) {
+				this.limitChange(`此商品限购${this.max}件`);
+				return false;
+			}
+			this.count++;
+			this.changeNumber('add');
+		}
+		decrease(): Boolean | void {
+			if (this.threshold && this.count <= this.threshold && this.threshold > 1) {
+				this.limitChange(`此商品${this.threshold}件起购`);
+				return false;
+			}
+			if (this.count <= 1) {
+				this.count = 1;
+				uni.showToast({
+					title: '最小数量为1',
+					icon: 'none'
+				})
+			} else {
+				this.count--;
+				this.changeNumber('decrease');
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.numControl {
+		@include flex-x(flex-right);
+
+		.symbol {
+			width: vw(30);
+			// height: vw(40);
+			@include flex-y(center, center);
+
+			.icon {
+				@include icon(22);
+			}
+		}
+
+		.plus {
+			width: vw(30);
+			// height: vw(40);
+			@include flex-y(center, center);
+
+			.icon {
+				@include icon(22);
+			}
+		}
+		
+		.img{
+			width: vw(20);
+			height: vw(20);
+		}
+
+		.count {
+			width: vw(32);
+			text-align: center;
+			height: vw(22);
+			line-height: vw(22);
+			outline: none;
+			border-radius: 100px;
+			@include word-vw(15, $gray3);
+			font-weight: bold;
+		}
+	}
+</style>

+ 59 - 0
src/components/SwiperBanner/SwiperBanner.md

@@ -0,0 +1,59 @@
+### 轮播图
+
+轮播图,用于轮播图,组件名:``SwiperBanner``
+基于 swiper、swiper-item封装的轮播组件
+
+```html
+ //右上角按钮插槽  暂时用不上  
+<view class="collection" slot="collection" @click="collectionClick" >
+	<i class="icon">&#xe686;</i>
+</view>
+```
+### 使用方式
+
+在 ``script`` 中引用组件 
+
+```javascript
+import SwiperBanner from "@/components/base/SwiperBanner.vue"
+
+@Components({
+	 components: {
+		 SwiperBanner
+	}
+})
+
+//或者
+export default {
+    components: {SwiperBanner}
+}
+```
+
+在 ``template`` 中使用组件
+
+```html
+	<swiper-banner 
+		:banner-detail="bannerDetail" 
+		:banner-h="200" 
+		:radius="5" 
+		indicatorColor="#000">
+	</swiper-banner>
+```
+### 属性说明
+
+|属性名						|类型		|默认值					|说明		|
+|---						|----		|---					|---		|
+|bannerDetail				|array		|-						|轮播数据(数组或者数组对象)|
+|imgKey						|string		|''						|单条数据对应的key值    |
+|autoPlay					|boolean	|true					|自动切换		|
+|indicatorDots				|boolean	|true					|是否自定义指示点   |
+|dotsType					|string		|dot					|指示点样式(dot/digit) 		  |
+|noIndicatorColor			|string		|rgba(255,255,255,0.6)	|未选中指示点颜色 当dotsType值为dot生效	|
+|indicatorColor				|string		|#fff					|自定义指示点颜色 当dotsType值为dot生效	|
+|bannerH					|number		|200					|轮播图高度		|
+|radius						|number		|0						|自定义圆角	|
+|preview					|boolean	|false					|开启预览图片 与点击跳转只可存在一个	|
+|bannerType					|string		|''						|轮播样式类型 '3D'、''|
+|previousNext				|string		|0rpx					| 轮播前后缩进尺寸(当bannerType为3D时使用)|
+
+
+

+ 255 - 0
src/components/SwiperBanner/SwiperBanner.vue

@@ -0,0 +1,255 @@
+<template>
+	<view class="detail-banner" :style="{height:bannerH/3.75+'vw'}">
+		<swiper :autoplay="autoPlay" :interval="4000" :duration="500" :circular="true" class="swiper-box"
+			:previous-margin="previousNext" :next-margin="previousNext" :snap-to-edge="true" @change="swiperChange"
+			v-if="bannerDetail.length">
+			<block v-for="(item,index) in bannerDetail" :key="index">
+				<swiper-item
+					:class="[bannerType=='3D'?(index === cur?'swiper-bigger':'swiper-smaller'):'','swiper-item']">
+					<image v-if="item.type === 1" mode="aspectFill" @tap.stop="chooseSwiper(item)" :lazy-load="true"
+						:style="{borderRadius:radius/3.75+'vw'}"
+						:class="[bannerType=='3D'?(index === cur?'image-bigger':'image-smaller'):'banner-image']"
+						:src="(item[imgKey] ? item[imgKey].url : '') || (item ? item.url : '')" />
+					<video v-if="item.type === 2 && index === cur" mode="aspectFill" @tap.stop="chooseSwiper(item)" :lazy-load="true"
+						:style="{borderRadius:radius/3.75+'vw'}"
+						:class="[bannerType=='3D'?(index === cur?'image-bigger':'image-smaller'):'banner-image']"
+						:src="(item[imgKey] ? item[imgKey].url : '') || (item ? item.url : '')"></video>
+
+				</swiper-item>
+
+			</block>
+		</swiper>
+
+		<!--重置小圆点的样式  -->
+		<view class="dots" v-if="indicatorDots">
+			<view class="dots-bk" v-if="dotsType=='dot'">
+				<block v-for="(item,index) in bannerDetail.length" :key="index">
+					<view :class="{active: index == cur}"
+						:style="{backgroundColor:index == cur?indicatorColor:noIndicatorColor}" class="dot"></view>
+				</block>
+			</view>
+			<view class="dots-bk dots-bk1" v-if="dotsType=='digit'">
+				<view class="tag-wrap">
+					<text>{{cur+1+'/'+bannerDetail.length}}</text>
+				</view>
+			</view>
+
+		</view>
+		<!-- 收藏图标 -->
+		<!-- <slot name="collection"></slot> -->
+		<!--重置小圆点的样式 end -->
+
+		<!--  没有轮播时的默认图 -->
+		<!-- <image
+            wx:else="{{bannerDetail.length}}"
+            class="banner-image"
+            src="{{filters.imageFmt('good-default@2x')}}"
+        /> -->
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Emit,
+		Vue
+	} from "vue-property-decorator";
+
+	@Component({})
+	export default class swiperBanner extends Vue {
+		@Prop({
+			default: true
+		}) private indicatorDots! : boolean; // 是否自定义指示点
+		@Prop({
+			default: 'dot'
+		}) dotsType ?: string; // 自定义指示点样式 可选 dot / digit
+
+		@Prop({
+			default: true
+		}) private autoPlay ?: boolean; // 自动切换
+
+		@Prop() bannerDetail! : Array<any>; // 轮播数据
+
+		@Prop({
+			default: 154
+		}) private bannerH! : number; // 轮播图高度
+
+		@Prop({
+			default: '#fff'
+		}) private indicatorColor ?: string; // 自定义指示点颜色
+
+		@Prop({
+			default: 'rgba(255,255,255,1)'
+		}) private noIndicatorColor ?: string; // 未选中指示点颜色
+
+		@Prop({
+			default: 0
+		}) private radius ?: number; // 自定义圆角 默认没有
+
+		@Prop({
+			default: false
+		}) private preview ?: boolean; // 开启预览图片 与点击跳转只可存在一个
+
+		@Prop() private bannerType ?: string; //轮播样式类型
+
+		@Prop({
+			default: "0rpx"
+		}) private previousNext ?: string; //前后轮播 缩进尺寸	
+
+		@Prop({
+			default: ""
+		}) private imgKey! : string // // 图片的字段
+
+		// options:{
+		//  //  开启具名插槽
+		//  multipleSlots: true ,
+
+		cur : number = 0 // 当前滑块的index
+		swiperChange(e : any) {
+			this.cur = e.detail.current //获取当前轮播图片的下标, 可以给当前指示点加样式
+			this.changeIndex(e.detail.current + 1);
+		}
+		//点击轮播
+		chooseSwiper(item : any) {
+			// console.log(item)
+			if (this.preview) {
+				let urls = this.bannerDetail.map(res => res[this.imgKey] || res)
+				uni.previewImage({
+					current: item[this.imgKey] || item,
+					loop: true,
+					urls,
+				})
+			} else {
+				this.changeSwiper(item)
+			}
+		}
+
+		@Emit('changeSwiper')
+		changeSwiper(val : any) {
+			return val
+		}
+		
+		@Emit('changeIndex')
+		changeIndex(val : any) {
+			return val
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	.detail-banner {
+		width: 100%;
+		position: relative;
+		// background: #d8d8d8;
+		overflow: hidden;
+
+		.swiper-box {
+			height: inherit;
+
+		}
+
+		.banner-image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	.swiper-item {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.swiper-bigger {
+		height: 100%
+	}
+
+	.swiper-smaller {
+		// height:80%
+		height: 100%
+	}
+
+	@keyframes Bigger {
+		from {
+			height: 80%
+		}
+
+		to {
+			height: 100%
+		}
+	}
+
+	@keyframes Smaller {
+		from {
+			height: 100%
+		}
+
+		to {
+			height: 80%
+		}
+	}
+
+	// 中间的轮播图
+	.image-bigger {
+		margin: 0 vw(10);
+		height: 100%;
+		width: 100%;
+		overflow: hidden;
+		// animation: Bigger 0.5s;
+		// -webkit-animation: heightChange 0.7s; /* Safari 与 Chrome */
+	}
+
+	// 两边的缩小的图片
+	.image-smaller {
+		height: 100%;
+		// animation: Smaller 0.5s;
+	}
+
+
+	.dots {
+		position: absolute;
+		bottom: vw(12);
+		height: vw(10);
+		width: 100%;
+		@include flex-x(center)
+	}
+
+	.dots-bk {
+		background: rgba(0, 0, 0, 0.1);
+		height: vw(10);
+		padding: 0 vw(3);
+		border-radius: vw(10);
+
+		@include flex-x() &.dots-bk1 {
+			background: none
+		}
+
+		// 指示点的第二种样式
+		.tag-wrap {
+			position: absolute;
+			right: vw(15);
+			background: #333;
+			color: #fff;
+			height: vw(20);
+			line-height: vw(20);
+			padding: vw(1) vw(10);
+			border-radius: vw(10);
+			font-size: vw(12);
+		}
+	}
+
+	/* 未选中时的小圆点样式 */
+	.dot {
+		margin-right: vw(8);
+		border-radius: vw(6);
+		height: vw(6);
+		width: vw(6);
+		margin: 0 vw(3)
+	}
+
+	/* 选中以后的小圆点样式 */
+	.active {
+		width: vw(12);
+	}
+</style>

+ 246 - 0
src/components/SwiperBanner1/SwiperBanner1.vue

@@ -0,0 +1,246 @@
+<template>
+	<view class="detail-banner" :style="{height:bannerH/3.75+'vw'}">
+		<swiper :autoplay="autoPlay" :interval="4000" :duration="500" :circular="true" class="swiper-box"
+			:previous-margin="previousNext" :next-margin="previousNext" :snap-to-edge="true" @change="swiperChange"
+			v-if="bannerDetail.length">
+			<block v-for="(item,index) in bannerDetail" :key="index">
+				<swiper-item
+					:class="[bannerType=='3D'?(index === cur?'swiper-bigger':'swiper-smaller'):'','swiper-item']">
+					<image mode="aspectFill" @tap.stop="chooseSwiper(item)" :lazy-load="true"
+						:style="{borderRadius:radius/3.75+'vw'}"
+						:class="[bannerType=='3D'?(index === cur?'image-bigger':'image-smaller'):'banner-image']"
+						:src="item[imgKey]||item" />
+
+				</swiper-item>
+
+			</block>
+		</swiper>
+
+		<!--重置小圆点的样式  -->
+		<view class="dots" v-if="indicatorDots">
+			<view class="dots-bk" v-if="dotsType=='dot'">
+				<block v-for="(item,index) in bannerDetail.length" :key="index">
+					<view :class="{active: index == cur}"
+						:style="{backgroundColor:index == cur?indicatorColor:noIndicatorColor}" class="dot"></view>
+				</block>
+			</view>
+			<view class="dots-bk dots-bk1" v-if="dotsType=='digit'">
+				<view class="tag-wrap">
+					<text>{{cur+1+'/'+bannerDetail.length}}</text>
+				</view>
+			</view>
+
+		</view>
+		<!-- 收藏图标 -->
+		<!-- <slot name="collection"></slot> -->
+		<!--重置小圆点的样式 end -->
+
+		<!--  没有轮播时的默认图 -->
+		<!-- <image
+            wx:else="{{bannerDetail.length}}"
+            class="banner-image"
+            src="{{filters.imageFmt('good-default@2x')}}"
+        /> -->
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Emit,
+		Vue
+	} from "vue-property-decorator";
+
+	@Component({})
+	export default class swiperBanner extends Vue {
+		@Prop({
+			default: true
+		}) private indicatorDots!: boolean; // 是否自定义指示点
+		@Prop({
+			default: 'dot'
+		}) dotsType ? : string; // 自定义指示点样式 可选 dot / digit
+
+		@Prop({
+			default: true
+		}) private autoPlay ? : boolean; // 自动切换
+
+		@Prop() bannerDetail!: Array < any > ; // 轮播数据
+
+		@Prop({
+			default: 154
+		}) private bannerH!: number; // 轮播图高度
+
+		@Prop({
+			default: '#fff'
+		}) private indicatorColor ? : string; // 自定义指示点颜色
+
+		@Prop({
+			default: 'rgba(255,255,255,1)'
+		}) private noIndicatorColor ? : string; // 未选中指示点颜色
+
+		@Prop({
+			default: 0
+		}) private radius ? : number; // 自定义圆角 默认没有
+
+		@Prop({
+			default: false
+		}) private preview ? : boolean; // 开启预览图片 与点击跳转只可存在一个
+
+		@Prop() private bannerType ? : string; //轮播样式类型
+
+		@Prop({
+			default: "0rpx"
+		}) private previousNext ? : string; //前后轮播 缩进尺寸	
+
+		@Prop({
+			default: ""
+		}) private imgKey!: string // // 图片的字段
+
+		// options:{
+		//  //  开启具名插槽
+		//  multipleSlots: true ,
+
+		cur: number = 0 // 当前滑块的index
+		swiperChange(e: any) {
+			this.cur = e.detail.current //获取当前轮播图片的下标, 可以给当前指示点加样式
+		}
+		//点击轮播
+		chooseSwiper(item: any) {
+			// console.log(item)
+			if (this.preview) {
+				let urls = this.bannerDetail.map(res => res[this.imgKey] || res)
+				uni.previewImage({
+					current: item[this.imgKey] || item,
+					loop: true,
+					urls,
+				})
+			} else {
+				this.changeSwiper(item)
+			}
+		}
+
+		@Emit('changeSwiper')
+		changeSwiper(val: any) {
+			return val
+		}
+
+	};
+</script>
+
+<style lang="scss" scoped>
+	.detail-banner {
+		width: 100%;
+		position: relative;
+		// background: #d8d8d8;
+		overflow: hidden;
+
+		.swiper-box {
+			height: inherit;
+
+		}
+
+		.banner-image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	.swiper-item {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.swiper-bigger {
+		height: 100%
+	}
+
+	.swiper-smaller {
+		// height:80%
+		height: 100%
+	}
+
+	@keyframes Bigger {
+		from {
+			height: 80%
+		}
+
+		to {
+			height: 100%
+		}
+	}
+
+	@keyframes Smaller {
+		from {
+			height: 100%
+		}
+
+		to {
+			height: 80%
+		}
+	}
+
+	// 中间的轮播图
+	.image-bigger {
+		margin: 0 vw(10);
+		height: 100%;
+		width: 100%;
+		overflow: hidden;
+		// animation: Bigger 0.5s;
+		// -webkit-animation: heightChange 0.7s; /* Safari 与 Chrome */
+	}
+
+	// 两边的缩小的图片
+	.image-smaller {
+		height: 100%;
+		// animation: Smaller 0.5s;
+	}
+
+
+	.dots {
+		position: absolute;
+		bottom: vw(12);
+		height: vw(10);
+		width: 100%;
+		@include flex-x(center)
+	}
+
+	.dots-bk {
+		background: rgba(0, 0, 0, 0.1);
+		height: vw(10);
+		padding: 0 vw(3);
+		border-radius: vw(10);
+
+		@include flex-x() &.dots-bk1 {
+			background: none
+		}
+
+		// 指示点的第二种样式
+		.tag-wrap {
+			position: absolute;
+			right: vw(15);
+			background: #333;
+			color: #fff;
+			height: vw(20);
+			line-height: vw(20);
+			padding: vw(1) vw(10);
+			border-radius: vw(10);
+			font-size: vw(12);
+		}
+	}
+
+	/* 未选中时的小圆点样式 */
+	.dot {
+		margin-right: vw(8);
+		border-radius: vw(6);
+		height: vw(6);
+		width: vw(6);
+		margin: 0 vw(3)
+	}
+
+	/* 选中以后的小圆点样式 */
+	.active {
+		width: vw(12);
+	}
+</style>

+ 101 - 0
src/components/TabBar/TabBar.vue

@@ -0,0 +1,101 @@
+<template>
+	<view class="tab-bar">
+		<view
+			v-for="(item, index) in list.slice(0, 5)"
+			:key="index"
+			class="tab-bar-item"
+			@click="switchTab(item, index)"
+		>
+			<IconText
+				:color="tabBarIndex === index ? selectedColor : color"
+				:size="18"
+				:code="tabBarIndex === index ? item.selectedIconPath : item.iconPath"
+			></IconText>
+			<view class="view" :style="{ color: tabBarIndex === index ? selectedColor : color }">
+				{{ item.text }}
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang="ts">
+import { Component, Vue } from 'vue-property-decorator';
+import { namespace } from 'vuex-class';
+const baseModule = namespace('base');
+@Component({})
+export default class TabBar extends Vue {
+	@baseModule.Getter('_tabBarIndex') tabBarIndex: any;
+	// selected: number | null = 0;
+	selectedColor: string = '#FF6803';
+	color: string = '#999';
+	list: object[] = [
+		{
+			pagePath: 'pages/front/front',
+			iconPath: '\ue8a4',
+			selectedIconPath: '\ue89b',
+			text: '首页'
+		},
+		{
+			pagePath: 'pages/category/category',
+			iconPath: '\ue8a0',
+			selectedIconPath: '\ue872',
+			text: '全部分类'
+		},
+		// {
+		// 	pagePath: 'pages/business/business',
+		// 	iconPath: '\ue8a0',
+		// 	selectedIconPath: '\ue872',
+		// 	text: '商圈'
+		// },
+		{
+			pagePath: 'pages/cart/cart',
+			iconPath: '\ue8a5',
+			selectedIconPath: '\ue89c',
+			text: '购物车'
+		},
+		// {
+		// 	pagePath: 'pages/order/order-list',
+		// 	iconPath: '\ue742',
+		// 	selectedIconPath: '\ue739',
+		// 	text: '订单'
+		// },
+		{
+			pagePath: 'pages/user/user',
+			iconPath: '\ue8a6',
+			selectedIconPath: '\ue8a2',
+			text: '我的'
+		}
+	];
+	switchTab(item: any): void {
+		const url = item.pagePath;
+		uni.switchTab({ url });
+	}
+}
+</script>
+
+<style lang="scss">
+.tab-bar {
+	width: 100%;
+	height: vw(64);
+	position: fixed;
+	z-index: 98;
+	left: 0;
+	bottom: 0;
+	@include flex-x();
+	background: #fff;
+	box-sizing: border-box;
+	box-shadow: 0px -1px 4px rgba(0, 0, 0, 0.08);
+
+	.tab-bar-item {
+		flex: 1;
+		text-align: center;
+		@include flex-y(center);
+		overflow: hidden;
+
+		.view {
+			font-size: 10px;
+			margin-top: 2px;
+		}
+	}
+}
+</style>

+ 192 - 0
src/components/Tabs/Tabs.vue

@@ -0,0 +1,192 @@
+<template>
+	<scroll-view :scroll-x="true" scroll-with-animation="true" class="tabs"
+		:style="{background:bk,width:tabWidth/3.75+'vw'}" :scroll-left="scrollLeft">
+		<!-- 支持对象内传入keep(item.keep)   使得该选项保持常亮状态-->
+		<!-- 支持对象内传入icon(item.icon)   再次点击时 icon 旋转(item.rotate) ,点击其他选项,icon复位-->
+		<view :class="[{active:select==index||item.keep},'label']" :style="{
+				width:labelWidth+'vw',
+				fontSize:(select==index?activeSize:size)+'px',
+				color:(select==index||item.keep)?activeTextColor:textColor,
+				fontWeight:(select==index||item.keep)?bold:'400'
+			}" v-for="(item,index) in list" :key="index" @click.stop="selectTab(index,item)">
+			<text>{{ item.name }}</text>
+
+			<!-- 自定义图标  item.rotate为true 点击时图标翻转-->
+			<i class="tab-icon" v-if="item.icon" :class="{icon_rotate:item.rotate||false}" rotate>{{item.icon}}</i>
+			<!-- 竖分割线 -->
+			<view class="split-line" :style="{background:slineColor}" v-if="splitLine&&index!=list.length-1">
+			</view>
+		</view>
+		<view class="line" v-if="lineShow" :style="{transform:linWidth,background:lineColor}"></view>
+	</scroll-view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Vue,
+		Prop,
+		Watch,
+		Emit
+	} from 'vue-property-decorator'
+
+	@Component({})
+	export default class Tabs extends Vue {
+		select: number = 0;
+		@Prop({
+			default: 0
+		}) selectNum ? : number
+		@Prop() list!: []
+		@Prop({
+			default: 0
+		}) active!: number
+		@Prop({
+			default: 375
+		}) tabWidth!: string // tab 宽度
+		@Prop({
+			default: 14
+		}) activeSize!: number // 选中字体大小
+		@Prop({
+			default: 14
+		}) size!: number // 默认字体大小
+		@Prop({
+			default: '#999999'
+		}) textColor!: string // tab字体颜色
+		@Prop({
+			default: "#333333"
+		}) activeTextColor!: string // 选中tab字体颜色
+		@Prop({
+			default: '#CA4242'
+		}) lineColor!: string // 下划线颜色
+		@Prop({
+			default: '#eee'
+		}) slineColor!: string // 分割线
+		@Prop({
+			default: true
+		}) lineShow!: boolean //下划线是否显示
+		@Prop({
+			default: "#fff"
+		}) bk!: string // 背景
+		@Prop({
+			default: 400
+		}) bold!: number // 字体粗细
+		@Prop({
+			default: 4
+		}) fixedNum!: number // 全部展示的个数
+		@Prop({
+			default: 20
+		}) itemWidth!: number // 单个宽度  数量小于fixedNum个有效
+		@Prop({
+			default: false
+		}) isLoading!: boolean // 加载中禁止点击
+		@Prop({
+			default: false
+		}) splitLine!: boolean // 每两个中间加分割线
+
+
+		// computed---------------------------
+		get labelWidth() {
+			return this.list.length > this.fixedNum ? 20 : this.itemWidth;
+		}
+		get linWidth() {
+			// labelWidth比linewidth(8)大,line滑动中间需要要加上半个类似padding 的距离
+			return this.list.length > this.fixedNum ?
+				`translateX(${(this.select as any) * 20 + 4}vw)` :
+				`translateX(${(this.select as any) * this.itemWidth + (this.itemWidth - 8) / 2}vw)`;
+			// return `translateX(${(this.select as any) * this.itemWidth + (this.itemWidth - 8) / 2}vw)`;
+		}
+		get scrollLeft() {
+			return this.list.length > this.fixedNum ?
+				((this.select as any) - 2) * 20 * 3.75 :
+				((this.select as any) - 2) * this.itemWidth * 3.75;
+		}
+		// watch---------------------------
+		@Watch('active', {
+			immediate: true
+		})
+		activeChange(val: number) {
+			(this.select as any) = val
+		}
+
+		@Watch('selectNum', {
+			immediate: true,
+		})
+		clickNum() {
+			this.select = (this.selectNum as any);
+		}
+
+		// emit---------------------------
+		@Emit('clickTab')
+		selectTab(index: number, item ? : any) {
+			// 加载中禁止点击
+			// console.log('点击tab栏')
+			if (this.isLoading) return;
+			(this.select as any) = index;
+			return {
+				index,
+				item
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.tabs {
+		width: 100%;
+		height: 45px;
+		line-height: 45px;
+		padding: 0 vw(10);
+		box-sizing: border-box;
+		position: relative;
+		white-space: nowrap;
+		@include hide-scrollbar();
+		// border-top: vw(1) solid #f8f8f8;
+		// border-bottom: vw(1) solid #f8f8f8;
+
+		.line {
+			width: 8vw;
+			height: 5px;
+			border-radius: 10px;
+			position: absolute;
+			left: 0vw;
+			top: 37px;
+			transition: all 0.3s ease;
+		}
+
+		.label {
+			flex-shrink: 0;
+			@include ellipsis();
+			text-align: center;
+			display: inline-block;
+			transition: all 0.3s ease;
+			position: relative;
+
+			.split-line {
+				width: vw(2);
+				height: vw(25);
+				position: absolute;
+				right: 0;
+				top: vw(10);
+			}
+
+			.tab-icon {
+				@include icon(12, #999);
+				transition: all 0.3s ease;
+				display: inline-block;
+			}
+		}
+
+		// 旋转状态下
+		.label.active {
+			.tab-icon {
+				@include icon(12, $main-color);
+			}
+
+			// 旋转图标
+			.icon_rotate {
+				transform: rotate(180deg);
+				transition: all 0.3s ease;
+			}
+		}
+	}
+</style>

+ 28 - 0
src/components/gaoyia-parse/components/wxParseAudio.vue

@@ -0,0 +1,28 @@
+<template>
+	<!-- '<audio/>' 组件不再维护,建议使用能力更强的 'uni.createInnerAudioContext' 接口 有时间再改-->
+  <!--增加audio标签支持-->
+  <audio
+    :id="node.attr.id"
+    :class="node.classStr"
+    :style="node.styleStr"
+    :src="node.attr.src"
+    :loop="node.attr.loop"
+    :poster="node.attr.poster"
+    :name="node.attr.name"
+    :author="node.attr.author"
+    controls></audio>
+</template>
+
+<script>
+export default {
+  name: 'wxParseAudio',
+  props: {
+    node: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+};
+</script>

+ 94 - 0
src/components/gaoyia-parse/components/wxParseImg.vue

@@ -0,0 +1,94 @@
+<template>
+	<image
+		:mode="node.attr.mode"
+		:lazy-load="node.attr.lazyLoad"
+		:class="node.classStr"
+		:style="newStyleStr || node.styleStr"
+		:data-src="node.attr.src"
+		:src="node.attr.src"
+		@tap="wxParseImgTap"
+		@load="wxParseImgLoad"
+	/>
+</template>
+
+<script>
+export default {
+	name: 'wxParseImg',
+	data() {
+		return {
+			newStyleStr: '',
+			preview: true
+		};
+	},
+	inject: ['parseWidth'],
+	mounted() {},
+	props: {
+		node: {
+			type: Object,
+			default() {
+				return {};
+			}
+		}
+	},
+	
+	methods: {
+		wxParseImgTap(e) {
+			if (!this.preview) return;
+			const { src } = e.currentTarget.dataset;
+			if (!src) return;
+			let parent = this.$parent;
+			while (!parent.preview || typeof parent.preview !== 'function') {
+				// TODO 遍历获取父节点执行方法
+				parent = parent.$parent;
+			}
+			parent.preview(src, e);
+		},
+		// 图片视觉宽高计算函数区
+		wxParseImgLoad(e) {
+			const { src } = e.currentTarget.dataset;
+			if (!src) return;
+			let { width, height } = e.mp.detail;
+
+			const recal = this.wxAutoImageCal(width, height);
+
+			const { imageheight, imageWidth } = recal;
+			const { padding, mode } = this.node.attr;//删除padding
+			// const { mode } = this.node.attr;
+
+			const { styleStr } = this.node;
+			const imageHeightStyle = mode === 'widthFix' ? '' : `height: ${imageheight}px;`;
+
+			this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px; padding: 0 ${+padding}px;`;//删除padding
+			// this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px;`;
+		},
+		// 计算视觉优先的图片宽高
+		wxAutoImageCal(originalWidth, originalHeight) {
+			// 获取图片的原始长宽
+			const windowWidth = this.parseWidth.value;
+			const results = {};
+
+			if (originalWidth < 60 || originalHeight < 60) {
+				const { src } = this.node.attr;
+				let parent = this.$parent;
+				while (!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.removeImageUrl(src);
+				this.preview = false;
+			}
+
+			// 判断按照那种方式进行缩放
+			if (originalWidth > windowWidth) {
+				// 在图片width大于手机屏幕width时候
+				results.imageWidth = windowWidth;
+				results.imageheight = windowWidth * (originalHeight / originalWidth);
+			} else {
+				// 否则展示原来的数据
+				results.imageWidth = originalWidth;
+				results.imageheight = originalHeight;
+			}
+			return results;
+		}
+	}
+};
+</script>

+ 55 - 0
src/components/gaoyia-parse/components/wxParseTable.vue

@@ -0,0 +1,55 @@
+<template>
+	<div class='tablebox'>
+		<rich-text :nodes="nodes" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+	</div>
+</template>
+<script>
+export default {
+	name: 'wxParseTable',
+	props: {
+		node: {
+			type: Object,
+			default() {
+				return {};
+			},
+		},
+	},
+	inject: ['parseSelect'],
+	data() {
+		return {
+			nodes:[]
+		};
+	},
+	mounted() {
+		this.nodes=this.loadNode([this.node]);
+	},
+	methods: {
+		loadNode(node) {
+			let obj = [];
+			for (let children of node) {
+				if (children.node=='element') {
+					let t = {
+						name:children.tag,
+						attrs: {
+							class: children.classStr,
+							// style: children.styleStr,
+						},
+						children: children.nodes?this.loadNode(children.nodes):[]
+					}
+					
+					obj.push(t)
+				} else if(children.node=='text'){
+					obj.push({
+						type: 'text',
+						text: children.text
+					})
+				}
+			}
+			return obj
+		}
+	}
+};
+</script>
+<style>
+	@import url("../parse.css");
+</style>

+ 98 - 0
src/components/gaoyia-parse/components/wxParseTemplate0.vue

@@ -0,0 +1,98 @@
+<template>
+	<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node"/>
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	// #ifdef APP-PLUS | H5
+	import wxParseTemplate from './wxParseTemplate0';
+	// #endif
+	// #ifdef MP
+	import wxParseTemplate from './wxParseTemplate1';
+	// #endif
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+
+	export default {
+		// #ifdef APP-PLUS | H5
+		name: 'wxParseTemplate',
+		// #endif
+		// #ifdef MP
+		name: 'wxParseTemplate0',
+		// #endif
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;// TODO currentTarget才有dataset
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {// TODO 遍历获取父节点执行方法
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
src/components/gaoyia-parse/components/wxParseTemplate1.vue

@@ -0,0 +1,88 @@
+<template>
+	<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate2';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate1',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
src/components/gaoyia-parse/components/wxParseTemplate10.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate11';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate10',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 86 - 0
src/components/gaoyia-parse/components/wxParseTemplate11.vue

@@ -0,0 +1,86 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate11',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
src/components/gaoyia-parse/components/wxParseTemplate2.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate3';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate2',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
src/components/gaoyia-parse/components/wxParseTemplate3.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate4';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate3',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
src/components/gaoyia-parse/components/wxParseTemplate4.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate5';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate4',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
src/components/gaoyia-parse/components/wxParseTemplate5.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate6';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate5',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
src/components/gaoyia-parse/components/wxParseTemplate6.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate7';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate6',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
src/components/gaoyia-parse/components/wxParseTemplate7.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate8';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate7',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
src/components/gaoyia-parse/components/wxParseTemplate8.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate9';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate8',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
src/components/gaoyia-parse/components/wxParseTemplate9.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate10';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate9',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 15 - 0
src/components/gaoyia-parse/components/wxParseVideo.vue

@@ -0,0 +1,15 @@
+<template>
+  <!--增加video标签支持,并循环添加-->
+  <view :class="node.classStr" :style="node.styleStr">
+    <video :class="node.classStr" :style="node.styleStr" class="video-video" :src="node.attr.src"></video>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'wxParseVideo',
+  props: {
+    node: {},
+  },
+};
+</script>

+ 261 - 0
src/components/gaoyia-parse/libs/html2json.js

@@ -0,0 +1,261 @@
+/**
+ * html2Json 改造来自: https://github.com/Jxck/html2json
+ *
+ *
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *               垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+
+import wxDiscode from './wxDiscode';
+import HTMLParser from './htmlparser';
+
+function makeMap(str) {
+  const obj = {};
+  const items = str.split(',');
+  for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
+  return obj;
+}
+
+// Block Elements - HTML 5
+const block = makeMap('br,code,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video');
+
+// Inline Elements - HTML 5
+const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var');
+
+// Elements that you can, intentionally, leave open
+// (and which close themselves)
+const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
+
+function removeDOCTYPE(html) {
+  const isDocument = /<body.*>([^]*)<\/body>/.test(html);
+  return isDocument ? RegExp.$1 : html;
+}
+
+function trimHtml(html) {
+  return html
+    .replace(/<!--.*?-->/gi, '')
+    .replace(/\/\*.*?\*\//gi, '')
+    .replace(/[ ]+</gi, '<')
+    .replace(/<script[^]*<\/script>/gi, '')
+    .replace(/<style[^]*<\/style>/gi, '');
+}
+
+function getScreenInfo() {
+  const screen = {};
+  wx.getSystemInfo({
+    success: (res) => {
+      screen.width = res.windowWidth;
+      screen.height = res.windowHeight;
+    },
+  });
+  return screen;
+}
+
+function html2json(html, customHandler, imageProp, host) {
+  // 处理字符串
+  html = removeDOCTYPE(html);
+  html = trimHtml(html);
+  html = wxDiscode.strDiscode(html);
+  // 生成node节点
+  const bufArray = [];
+  const results = {
+    nodes: [],
+    imageUrls: [],
+  };
+
+	const screen = getScreenInfo();
+  function Node(tag) {
+    this.node = 'element';
+    this.tag = tag;
+		
+		this.$screen = screen;
+  }
+
+  HTMLParser(html, {
+    start(tag, attrs, unary) {
+      // node for this element
+      const node = new Node(tag);
+
+      if (bufArray.length !== 0) {
+        const parent = bufArray[0];
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+      }
+
+      if (block[tag]) {
+        node.tagType = 'block';
+      } else if (inline[tag]) {
+        node.tagType = 'inline';
+      } else if (closeSelf[tag]) {
+        node.tagType = 'closeSelf';
+      }
+
+      node.attr = attrs.reduce((pre, attr) => {
+        const { name } = attr;
+        let { value } = attr;
+        if (name === 'class') {
+          node.classStr = value;
+        }
+        // has multi attibutes
+        // make it array of attribute
+        if (name === 'style') {
+          node.styleStr = value;
+        }
+        if (value.match(/ /)) {
+          value = value.split(' ');
+        }
+
+        // if attr already exists
+        // merge it
+        if (pre[name]) {
+          if (Array.isArray(pre[name])) {
+            // already array, push to last
+            pre[name].push(value);
+          } else {
+            // single value, make it array
+            pre[name] = [pre[name], value];
+          }
+        } else {
+          // not exist, put it
+          pre[name] = value;
+        }
+
+        return pre;
+      }, {});
+
+      // 优化样式相关属性
+      if (node.classStr) {
+        node.classStr += ` ${node.tag}`;
+      } else {
+        node.classStr = node.tag;
+      }
+      if (node.tagType === 'inline') {
+        node.classStr += ' inline';
+      }
+
+      // 对img添加额外数据
+      if (node.tag === 'img') {
+        let imgUrl = node.attr.src;
+        imgUrl = wxDiscode.urlToHttpUrl(imgUrl, imageProp.domain);
+        Object.assign(node.attr, imageProp, {
+          src: imgUrl || '',
+        });
+        if (imgUrl) {
+          results.imageUrls.push(imgUrl);
+        }
+      }
+
+      // 处理a标签属性
+      if (node.tag === 'a') {
+        node.attr.href = node.attr.href || '';
+      }
+
+      // 处理font标签样式属性
+      if (node.tag === 'font') {
+        const fontSize = [
+          'x-small',
+          'small',
+          'medium',
+          'large',
+          'x-large',
+          'xx-large',
+          '-webkit-xxx-large',
+        ];
+        const styleAttrs = {
+          color: 'color',
+          face: 'font-family',
+          size: 'font-size',
+        };
+        if (!node.styleStr) node.styleStr = '';
+        Object.keys(styleAttrs).forEach((key) => {
+          if (node.attr[key]) {
+            const value = key === 'size' ? fontSize[node.attr[key] - 1] : node.attr[key];
+            node.styleStr += `${styleAttrs[key]}: ${value};`;
+          }
+        });
+      }
+
+      // 临时记录source资源
+      if (node.tag === 'source') {
+        results.source = node.attr.src;
+      }
+
+      if (customHandler.start) {
+        customHandler.start(node, results);
+      }
+
+      if (unary) {
+        // if this tag doesn't have end tag
+        // like <img src="hoge.png"/>
+        // add to parents
+        const parent = bufArray[0] || results;
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      } else {
+        bufArray.unshift(node);
+      }
+    },
+    end(tag) {
+      // merge into parent tag
+      const node = bufArray.shift();
+      if (node.tag !== tag) {
+        console.error('invalid state: mismatch end tag');
+      }
+
+      // 当有缓存source资源时于于video补上src资源
+      if (node.tag === 'video' && results.source) {
+        node.attr.src = results.source;
+        delete results.source;
+      }
+
+      if (customHandler.end) {
+        customHandler.end(node, results);
+      }
+
+      if (bufArray.length === 0) {
+        results.nodes.push(node);
+      } else {
+        const parent = bufArray[0];
+        if (!parent.nodes) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      }
+    },
+    chars(text) {
+      if (!text.trim()) return;
+
+      const node = {
+        node: 'text',
+        text,
+      };
+
+      if (customHandler.chars) {
+        customHandler.chars(node, results);
+      }
+
+      if (bufArray.length === 0) {
+        results.nodes.push(node);
+      } else {
+        const parent = bufArray[0];
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      }
+    },
+  });
+
+  return results;
+}
+
+export default html2json;

+ 156 - 0
src/components/gaoyia-parse/libs/htmlparser.js

@@ -0,0 +1,156 @@
+/**
+ *
+ * htmlParser改造自: https://github.com/blowsie/Pure-JavaScript-HTML5-Parser
+ *
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *               垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+// Regular Expressions for parsing tags and attributes
+
+const startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z0-9_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
+const endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
+const attr = /([a-zA-Z0-9_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
+
+function makeMap(str) {
+  const obj = {};
+  const items = str.split(',');
+  for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
+  return obj;
+}
+
+// Empty Elements - HTML 5
+const empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr');
+
+// Block Elements - HTML 5
+const block = makeMap('address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video');
+
+// Inline Elements - HTML 5
+const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var');
+
+// Elements that you can, intentionally, leave open
+// (and which close themselves)
+const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
+
+// Attributes that have their values filled in disabled="disabled"
+const fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected');
+
+function HTMLParser(html, handler) {
+  let index;
+  let chars;
+  let match;
+  let last = html;
+  const stack = [];
+
+  stack.last = () => stack[stack.length - 1];
+
+  function parseEndTag(tag, tagName) {
+    // If no tag name is provided, clean shop
+    let pos;
+    if (!tagName) {
+      pos = 0;
+    } else {
+      // Find the closest opened tag of the same type
+      tagName = tagName.toLowerCase();
+      for (pos = stack.length - 1; pos >= 0; pos -= 1) {
+        if (stack[pos] === tagName) break;
+      }
+    }
+    if (pos >= 0) {
+      // Close all the open elements, up the stack
+      for (let i = stack.length - 1; i >= pos; i -= 1) {
+        if (handler.end) handler.end(stack[i]);
+      }
+
+      // Remove the open elements from the stack
+      stack.length = pos;
+    }
+  }
+
+  function parseStartTag(tag, tagName, rest, unary) {
+    tagName = tagName.toLowerCase();
+
+    if (block[tagName]) {
+      while (stack.last() && inline[stack.last()]) {
+        parseEndTag('', stack.last());
+      }
+    }
+
+    if (closeSelf[tagName] && stack.last() === tagName) {
+      parseEndTag('', tagName);
+    }
+
+    unary = empty[tagName] || !!unary;
+
+    if (!unary) stack.push(tagName);
+
+    if (handler.start) {
+      const attrs = [];
+
+      rest.replace(attr, function genAttr(matches, name) {
+        const value = arguments[2] || arguments[3] || arguments[4] || (fillAttrs[name] ? name : '');
+
+        attrs.push({
+          name,
+          value,
+          escaped: value.replace(/(^|[^\\])"/g, '$1\\"'), // "
+        });
+      });
+
+      if (handler.start) {
+        handler.start(tagName, attrs, unary);
+      }
+    }
+  }
+
+  while (html) {
+    chars = true;
+
+    if (html.indexOf('</') === 0) {
+      match = html.match(endTag);
+
+      if (match) {
+        html = html.substring(match[0].length);
+        match[0].replace(endTag, parseEndTag);
+        chars = false;
+      }
+
+      // start tag
+    } else if (html.indexOf('<') === 0) {
+      match = html.match(startTag);
+
+      if (match) {
+        html = html.substring(match[0].length);
+        match[0].replace(startTag, parseStartTag);
+        chars = false;
+      }
+    }
+
+    if (chars) {
+      index = html.indexOf('<');
+      let text = '';
+      while (index === 0) {
+        text += '<';
+        html = html.substring(1);
+        index = html.indexOf('<');
+      }
+      text += index < 0 ? html : html.substring(0, index);
+      html = index < 0 ? '' : html.substring(index);
+
+      if (handler.chars) handler.chars(text);
+    }
+
+    if (html === last) throw new Error(`Parse Error: ${html}`);
+    last = html;
+  }
+
+  // Clean up any remaining tags
+  parseEndTag();
+}
+
+export default HTMLParser;

+ 209 - 0
src/components/gaoyia-parse/libs/wxDiscode.js

@@ -0,0 +1,209 @@
+// HTML 支持的数学符号
+function strNumDiscode(str) {
+str = str.replace(/&forall;|&#8704;|&#x2200;/g, '∀');
+str = str.replace(/&part;|&#8706;|&#x2202;/g, '∂');
+str = str.replace(/&exist;|&#8707;|&#x2203;/g, '∃');
+str = str.replace(/&empty;|&#8709;|&#x2205;/g, '∅');
+str = str.replace(/&nabla;|&#8711;|&#x2207;/g, '∇');
+str = str.replace(/&isin;|&#8712;|&#x2208;/g, '∈');
+str = str.replace(/&notin;|&#8713;|&#x2209;/g, '∉');
+str = str.replace(/&ni;|&#8715;|&#x220b;/g, '∋');
+str = str.replace(/&prod;|&#8719;|&#x220f;/g, '∏');
+str = str.replace(/&sum;|&#8721;|&#x2211;/g, '∑');
+str = str.replace(/&minus;|&#8722;|&#x2212;/g, '−');
+str = str.replace(/&lowast;|&#8727;|&#x2217;/g, '∗');
+str = str.replace(/&radic;|&#8730;|&#x221a;/g, '√');
+str = str.replace(/&prop;|&#8733;|&#x221d;/g, '∝');
+str = str.replace(/&infin;|&#8734;|&#x221e;/g, '∞');
+str = str.replace(/&ang;|&#8736;|&#x2220;/g, '∠');
+str = str.replace(/&and;|&#8743;|&#x2227;/g, '∧');
+str = str.replace(/&or;|&#8744;|&#x2228;/g, '∨');
+str = str.replace(/&cap;|&#8745;|&#x2229;/g, '∩');
+str = str.replace(/&cup;|&#8746;|&#x222a;/g, '∪');
+str = str.replace(/&int;|&#8747;|&#x222b;/g, '∫');
+str = str.replace(/&there4;|&#8756;|&#x2234;/g, '∴');
+str = str.replace(/&sim;|&#8764;|&#x223c;/g, '∼');
+str = str.replace(/&cong;|&#8773;|&#x2245;/g, '≅');
+str = str.replace(/&asymp;|&#8776;|&#x2248;/g, '≈');
+str = str.replace(/&ne;|&#8800;|&#x2260;/g, '≠');
+str = str.replace(/&le;|&#8804;|&#x2264;/g, '≤');
+str = str.replace(/&ge;|&#8805;|&#x2265;/g, '≥');
+str = str.replace(/&sub;|&#8834;|&#x2282;/g, '⊂');
+str = str.replace(/&sup;|&#8835;|&#x2283;/g, '⊃');
+str = str.replace(/&nsub;|&#8836;|&#x2284;/g, '⊄');
+str = str.replace(/&sube;|&#8838;|&#x2286;/g, '⊆');
+str = str.replace(/&supe;|&#8839;|&#x2287;/g, '⊇');
+str = str.replace(/&oplus;|&#8853;|&#x2295;/g, '⊕');
+str = str.replace(/&otimes;|&#8855;|&#x2297;/g, '⊗');
+str = str.replace(/&perp;|&#8869;|&#x22a5;/g, '⊥');
+str = str.replace(/&sdot;|&#8901;|&#x22c5;/g, '⋅');
+return str;
+}
+
+// HTML 支持的希腊字母
+function strGreeceDiscode(str) {
+str = str.replace(/&Alpha;|&#913;|&#x391;/g, 'Α');
+str = str.replace(/&Beta;|&#914;|&#x392;/g, 'Β');
+str = str.replace(/&Gamma;|&#915;|&#x393;/g, 'Γ');
+str = str.replace(/&Delta;|&#916;|&#x394;/g, 'Δ');
+str = str.replace(/&Epsilon;|&#917;|&#x395;/g, 'Ε');
+str = str.replace(/&Zeta;|&#918;|&#x396;/g, 'Ζ');
+str = str.replace(/&Eta;|&#919;|&#x397;/g, 'Η');
+str = str.replace(/&Theta;|&#920;|&#x398;/g, 'Θ');
+str = str.replace(/&Iota;|&#921;|&#x399;/g, 'Ι');
+str = str.replace(/&Kappa;|&#922;|&#x39a;/g, 'Κ');
+str = str.replace(/&Lambda;|&#923;|&#x39b;/g, 'Λ');
+str = str.replace(/&Mu;|&#924;|&#x39c;/g, 'Μ');
+str = str.replace(/&Nu;|&#925;|&#x39d;/g, 'Ν');
+str = str.replace(/&Xi;|&#925;|&#x39d;/g, 'Ν');
+str = str.replace(/&Omicron;|&#927;|&#x39f;/g, 'Ο');
+str = str.replace(/&Pi;|&#928;|&#x3a0;/g, 'Π');
+str = str.replace(/&Rho;|&#929;|&#x3a1;/g, 'Ρ');
+str = str.replace(/&Sigma;|&#931;|&#x3a3;/g, 'Σ');
+str = str.replace(/&Tau;|&#932;|&#x3a4;/g, 'Τ');
+str = str.replace(/&Upsilon;|&#933;|&#x3a5;/g, 'Υ');
+str = str.replace(/&Phi;|&#934;|&#x3a6;/g, 'Φ');
+str = str.replace(/&Chi;|&#935;|&#x3a7;/g, 'Χ');
+str = str.replace(/&Psi;|&#936;|&#x3a8;/g, 'Ψ');
+str = str.replace(/&Omega;|&#937;|&#x3a9;/g, 'Ω');
+
+str = str.replace(/&alpha;|&#945;|&#x3b1;/g, 'α');
+str = str.replace(/&beta;|&#946;|&#x3b2;/g, 'β');
+str = str.replace(/&gamma;|&#947;|&#x3b3;/g, 'γ');
+str = str.replace(/&delta;|&#948;|&#x3b4;/g, 'δ');
+str = str.replace(/&epsilon;|&#949;|&#x3b5;/g, 'ε');
+str = str.replace(/&zeta;|&#950;|&#x3b6;/g, 'ζ');
+str = str.replace(/&eta;|&#951;|&#x3b7;/g, 'η');
+str = str.replace(/&theta;|&#952;|&#x3b8;/g, 'θ');
+str = str.replace(/&iota;|&#953;|&#x3b9;/g, 'ι');
+str = str.replace(/&kappa;|&#954;|&#x3ba;/g, 'κ');
+str = str.replace(/&lambda;|&#955;|&#x3bb;/g, 'λ');
+str = str.replace(/&mu;|&#956;|&#x3bc;/g, 'μ');
+str = str.replace(/&nu;|&#957;|&#x3bd;/g, 'ν');
+str = str.replace(/&xi;|&#958;|&#x3be;/g, 'ξ');
+str = str.replace(/&omicron;|&#959;|&#x3bf;/g, 'ο');
+str = str.replace(/&pi;|&#960;|&#x3c0;/g, 'π');
+str = str.replace(/&rho;|&#961;|&#x3c1;/g, 'ρ');
+str = str.replace(/&sigmaf;|&#962;|&#x3c2;/g, 'ς');
+str = str.replace(/&sigma;|&#963;|&#x3c3;/g, 'σ');
+str = str.replace(/&tau;|&#964;|&#x3c4;/g, 'τ');
+str = str.replace(/&upsilon;|&#965;|&#x3c5;/g, 'υ');
+str = str.replace(/&phi;|&#966;|&#x3c6;/g, 'φ');
+str = str.replace(/&chi;|&#967;|&#x3c7;/g, 'χ');
+str = str.replace(/&psi;|&#968;|&#x3c8;/g, 'ψ');
+str = str.replace(/&omega;|&#969;|&#x3c9;/g, 'ω');
+str = str.replace(/&thetasym;|&#977;|&#x3d1;/g, 'ϑ');
+str = str.replace(/&upsih;|&#978;|&#x3d2;/g, 'ϒ');
+str = str.replace(/&piv;|&#982;|&#x3d6;/g, 'ϖ');
+str = str.replace(/&middot;|&#183;|&#xb7;/g, '·');
+return str;
+}
+
+function strcharacterDiscode(str) {
+// 加入常用解析
+
+// str = str.replace(/&nbsp;|&#32;|&#x20;/g, "&nbsp;");
+// str = str.replace(/&ensp;|&#8194;|&#x2002;/g, '&ensp;');
+// str = str.replace(/&#12288;|&#x3000;/g, '<span class=\'spaceshow\'> </span>');
+// str = str.replace(/&emsp;|&#8195;|&#x2003;/g, '&emsp;');
+// str = str.replace(/&quot;|&#34;|&#x22;/g, "\"");
+// str = str.replace(/&apos;|&#39;|&#x27;/g, "&apos;");
+// str = str.replace(/&acute;|&#180;|&#xB4;/g, "´");
+// str = str.replace(/&times;|&#215;|&#xD7;/g, "×");
+// str = str.replace(/&divide;|&#247;|&#xF7;/g, "÷");
+// str = str.replace(/&amp;|&#38;|&#x26;/g, '&amp;');
+// str = str.replace(/&lt;|&#60;|&#x3c;/g, '&lt;');
+// str = str.replace(/&gt;|&#62;|&#x3e;/g, '&gt;');
+
+
+
+
+str = str.replace(/&nbsp;|&#32;|&#x20;/g, "<span class='spaceshow'> </span>");
+str = str.replace(/&ensp;|&#8194;|&#x2002;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&#12288;|&#x3000;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&emsp;|&#8195;|&#x2003;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&quot;|&#34;|&#x22;/g, "\"");
+str = str.replace(/&quot;|&#39;|&#x27;/g, "'");
+str = str.replace(/&acute;|&#180;|&#xB4;/g, "´");
+str = str.replace(/&times;|&#215;|&#xD7;/g, "×");
+str = str.replace(/&divide;|&#247;|&#xF7;/g, "÷");
+str = str.replace(/&amp;|&#38;|&#x26;/g, '&');
+str = str.replace(/&lt;|&#60;|&#x3c;/g, '<');
+str = str.replace(/&gt;|&#62;|&#x3e;/g, '>');
+return str;
+}
+
+// HTML 支持的其他实体
+function strOtherDiscode(str) {
+str = str.replace(/&OElig;|&#338;|&#x152;/g, 'Œ');
+str = str.replace(/&oelig;|&#339;|&#x153;/g, 'œ');
+str = str.replace(/&Scaron;|&#352;|&#x160;/g, 'Š');
+str = str.replace(/&scaron;|&#353;|&#x161;/g, 'š');
+str = str.replace(/&Yuml;|&#376;|&#x178;/g, 'Ÿ');
+str = str.replace(/&fnof;|&#402;|&#x192;/g, 'ƒ');
+str = str.replace(/&circ;|&#710;|&#x2c6;/g, 'ˆ');
+str = str.replace(/&tilde;|&#732;|&#x2dc;/g, '˜');
+str = str.replace(/&thinsp;|$#8201;|&#x2009;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&zwnj;|&#8204;|&#x200C;/g, '<span class=\'spaceshow\'>‌</span>');
+str = str.replace(/&zwj;|$#8205;|&#x200D;/g, '<span class=\'spaceshow\'>‍</span>');
+str = str.replace(/&lrm;|$#8206;|&#x200E;/g, '<span class=\'spaceshow\'>‎</span>');
+str = str.replace(/&rlm;|&#8207;|&#x200F;/g, '<span class=\'spaceshow\'>‏</span>');
+str = str.replace(/&ndash;|&#8211;|&#x2013;/g, '–');
+str = str.replace(/&mdash;|&#8212;|&#x2014;/g, '—');
+str = str.replace(/&lsquo;|&#8216;|&#x2018;/g, '‘');
+str = str.replace(/&rsquo;|&#8217;|&#x2019;/g, '’');
+str = str.replace(/&sbquo;|&#8218;|&#x201a;/g, '‚');
+str = str.replace(/&ldquo;|&#8220;|&#x201c;/g, '“');
+str = str.replace(/&rdquo;|&#8221;|&#x201d;/g, '”');
+str = str.replace(/&bdquo;|&#8222;|&#x201e;/g, '„');
+str = str.replace(/&dagger;|&#8224;|&#x2020;/g, '†');
+str = str.replace(/&Dagger;|&#8225;|&#x2021;/g, '‡');
+str = str.replace(/&bull;|&#8226;|&#x2022;/g, '•');
+str = str.replace(/&hellip;|&#8230;|&#x2026;/g, '…');
+str = str.replace(/&permil;|&#8240;|&#x2030;/g, '‰');
+str = str.replace(/&prime;|&#8242;|&#x2032;/g, '′');
+str = str.replace(/&Prime;|&#8243;|&#x2033;/g, '″');
+str = str.replace(/&lsaquo;|&#8249;|&#x2039;/g, '‹');
+str = str.replace(/&rsaquo;|&#8250;|&#x203a;/g, '›');
+str = str.replace(/&oline;|&#8254;|&#x203e;/g, '‾');
+str = str.replace(/&euro;|&#8364;|&#x20ac;/g, '€');
+str = str.replace(/&trade;|&#8482;|&#x2122;/g, '™');
+str = str.replace(/&larr;|&#8592;|&#x2190;/g, '←');
+str = str.replace(/&uarr;|&#8593;|&#x2191;/g, '↑');
+str = str.replace(/&rarr;|&#8594;|&#x2192;/g, '→');
+str = str.replace(/&darr;|&#8595;|&#x2193;/g, '↓');
+str = str.replace(/&harr;|&#8596;|&#x2194;/g, '↔');
+str = str.replace(/&crarr;|&#8629;|&#x21b5;/g, '↵');
+str = str.replace(/&lceil;|&#8968;|&#x2308;/g, '⌈');
+str = str.replace(/&rceil;|&#8969;|&#x2309;/g, '⌉');
+str = str.replace(/&lfloor;|&#8970;|&#x230a;/g, '⌊');
+str = str.replace(/&rfloor;|&#8971;|&#x230b;/g, '⌋');
+str = str.replace(/&loz;|&#9674;|&#x25ca;/g, '◊');
+str = str.replace(/&spades;|&#9824;|&#x2660;/g, '♠');
+str = str.replace(/&clubs;|&#9827;|&#x2663;/g, '♣');
+str = str.replace(/&hearts;|&#9829;|&#x2665;/g, '♥');
+str = str.replace(/&diams;|&#9830;|&#x2666;/g, '♦');
+return str;
+}
+
+function strDiscode(str) {
+  str = strNumDiscode(str);
+  str = strGreeceDiscode(str);
+  str = strcharacterDiscode(str);
+  str = strOtherDiscode(str);
+  return str;
+}
+
+function urlToHttpUrl(url, domain) {
+  if (/^\/\//.test(url)) {
+    return `https:${url}`;
+  } else if (/^\//.test(url)) {
+    return `https://${domain}${url}`;
+  }
+  return url;
+}
+
+export default {
+  strDiscode,
+  urlToHttpUrl,
+};

+ 258 - 0
src/components/gaoyia-parse/parse.css

@@ -0,0 +1,258 @@
+/**
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *         垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+/**
+ * 请在全局下引入该文件,@import '/static/wxParse.css';
+ */
+.wxParse {
+	user-select:none;
+	width: 100%;
+	font-family: Helvetica, "PingFangSC", 'Microsoft Yahei', '微软雅黑', Arial, sans-serif;
+	color: #333;
+	line-height: 1.5;
+	font-size: 1em;
+	text-align:justify;/* //左右两端对齐 */
+}
+.wxParse view ,.wxParse uni-view{
+	word-break: break-word;
+}
+.wxParse .p {
+	padding-bottom: 0.5em;
+	clear: both;
+	/* letter-spacing: 0;//字间距 */
+}
+.wxParse .inline {
+  display: inline;
+  margin: 0;
+  padding: 0;
+}
+
+.wxParse .div {
+  margin: 0;
+  padding: 0;
+  display: block;
+}
+
+.wxParse .h1{
+  font-size: 2em;
+  line-height: 1.2em;
+  margin: 0.67em 0;
+}
+.wxParse .h2{
+  font-size: 1.5em;
+  margin: 0.83em 0;
+}
+.wxParse .h3{
+  font-size: 1.17em;
+  margin: 1em 0;
+}
+.wxParse .h4{
+  margin: 1.33em 0;
+}
+.wxParse .h5{
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+.wxParse .h6{
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+
+.wxParse .h1,
+.wxParse .h2,
+.wxParse .h3,
+.wxParse .h4,
+.wxParse .h5,
+.wxParse .h6,
+.wxParse .b,
+.wxParse .strong{
+  font-weight: bolder;
+}
+
+.wxParse .i,
+.wxParse .cite,
+.wxParse .em,
+.wxParse .var,
+.wxParse .address {
+  font-style: italic;
+}
+.wxParse .spaceshow{
+	  white-space: pre;
+}
+.wxParse .pre,
+.wxParse .tt,
+.wxParse .code,
+.wxParse .kbd,
+.wxParse .samp {
+  font-family: monospace;
+}
+.wxParse .pre {
+  overflow: auto;
+  background: #f5f5f5;
+  padding: 16upx;
+  white-space: pre;
+  margin: 1em 0upx;
+  font-size: 24upx;
+}
+.wxParse .code {
+	overflow: auto;
+	padding: 16upx;
+	white-space: pre;
+	margin: 1em 0upx;
+	background: #f5f5f5;
+	font-size: 24upx;
+}
+
+.wxParse .big {
+  font-size: 1.17em;
+}
+
+.wxParse .small,
+.wxParse .sub,
+.wxParse .sup {
+  font-size: 0.83em;
+}
+
+.wxParse .sub {
+  vertical-align: sub;
+}
+.wxParse .sup {
+  vertical-align: super;
+}
+
+.wxParse .s,
+.wxParse .strike,
+.wxParse .del {
+  text-decoration: line-through;
+}
+
+.wxParse .strong,
+.wxParse .text,
+.wxParse .span,
+.wxParse .s {
+  display: inline;
+}
+
+.wxParse .a {
+  color: deepskyblue;
+}
+
+.wxParse .video {
+  text-align: center;
+  margin: 22upx 0;
+}
+
+.wxParse .video-video {
+  width: 100%;
+}
+.wxParse .uni-image{
+	max-width: 100%;
+}
+.wxParse .img {
+  display: block;
+  max-width: 100%;
+  margin-bottom: 0em;/* //与p标签底部padding同时修改 */
+  overflow: hidden;
+}
+
+.wxParse .blockquote {
+  margin: 10upx 0;
+  padding: 22upx 0 22upx 22upx;
+  font-family: Courier, Calibri, "宋体";
+  background: #f5f5f5;
+  border-left: 6upx solid #dbdbdb;
+}
+.wxParse .blockquote .p {
+  margin: 0;
+}
+.wxParse .ul, .wxParse .ol {
+  display: block;
+  margin: 1em 0;
+  padding-left: 2em;
+}
+.wxParse .ol {
+  list-style-type: disc;
+}
+.wxParse .ol {
+  list-style-type: decimal;
+}
+.wxParse .ol>weixin-parse-template,.wxParse .ul>weixin-parse-template {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+
+.wxParse .ol>.li,.wxParse .ul>.li {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+.wxParse .ul .ul, .wxParse .ol .ul {
+  list-style-type: circle;
+}
+.wxParse .ol .ol .ul, .wxParse .ol .ul .ul, .wxParse .ul .ol .ul, .wxParse .ul .ul .ul {
+    list-style-type: square;
+}
+
+.wxParse .u {
+  text-decoration: underline;
+}
+.wxParse .hide {
+  display: none;
+}
+.wxParse .del {
+  display: inline;
+}
+.wxParse .figure {
+  overflow: hidden;
+}
+.wxParse .tablebox{
+	overflow: auto;
+	background-color: #f5f5f5;
+	background: #f5f5f5;
+	font-size: 13px;
+	padding: 8px;
+}
+.wxParse .table .table,.wxParse .table{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* 内边框 */
+	/* width: 100%; */
+	overflow: auto;
+	white-space: pre;
+}
+.wxParse .tbody{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* 内边框 */
+	border: 1px solid #dadada;
+}
+.wxParse .table  .thead, .wxParse  .table .tfoot, .wxParse  .table .th{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	background: #ececec;
+	font-weight: 40;
+}
+.wxParse  .table .tr {
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* border: 2px solid #F0AD4E; */
+	overflow:auto;
+}
+.wxParse  .table .th,
+.wxParse  .table .td{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	border: 2upx solid #dadada;
+	overflow:auto;
+}
+.wxParse .audio, .wxParse .uni-audio-default{
+	display: block;
+}

+ 228 - 0
src/components/gaoyia-parse/parse.vue

@@ -0,0 +1,228 @@
+<!--**
+ * forked from:https://github.com/F-loat/mpvue-wxParse
+ *
+ * github地址: https://github.com/dcloudio/uParse
+ *
+ * for: uni-app框架下 富文本解析
+ * 
+ * 优化 by gaoyia@qq.com  https://github.com/gaoyia/parse
+ */-->
+
+<template>
+	
+	<!--基础元素-->
+	<div class="wxParse" :class="className" :style="'user-select:' + userSelect">
+		<block v-for="(node, index) of nodes" :key="index" v-if="!loading">
+			<wxParseTemplate :node="node" />
+		</block>
+	</div>
+</template>
+
+<script>
+import HtmlToJson from './libs/html2json';
+import wxParseTemplate from './components/wxParseTemplate0';
+
+	
+	export default {
+		name: 'wxParse',
+		props: {
+			// user-select:none;
+			userSelect: {
+				type: String,
+				default: 'text' //none |text| all | element
+			},
+			imgOptions: {
+				type: [Object, Boolean],
+				default: function() {
+					return {
+						loop: false,
+						indicator: 'number',
+						longPressActions: false
+						// longPressActions: {
+						// 	 itemList: ['发送给朋友', '保存图片', '收藏'],
+						// 		success: function (res) {
+						// 			console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
+						// 		},
+						// 		fail: function (res) {
+						// 			console.log(res.errMsg);
+						// 		}    
+						// 	}
+						// }
+					}
+				}
+			},
+			loading: {
+				type: Boolean,
+				default: false
+			},
+			className: {
+				type: String,
+				default: ''
+			},
+			content: {
+				type: String,
+				default: ''
+			},
+			noData: {
+				type: String,
+				default: '<div style="color: red;">数据不能为空</div>'
+			},
+			startHandler: {
+				type: Function,
+				default () {
+					return node => {
+						node.attr.class = null;
+						node.attr.style = null;
+					};
+				}
+			},
+			endHandler: {
+				type: Function,
+				default: null
+			},
+			charsHandler: {
+				type: Function,
+				default: null
+			},
+			imageProp: {
+				type: Object,
+				default () {
+					return {
+						mode: 'aspectFit',
+						padding: 0,
+						lazyLoad: false,
+						domain: ''
+					};
+				}
+			}
+		},
+		components: {
+			wxParseTemplate
+		},
+		data() {
+			return {
+				nodes: {},
+				imageUrls: [],
+				wxParseWidth: {
+					value: 0
+				}
+			};
+		},
+		computed: {},
+		mounted() {
+			this.setHtml()
+		},
+		methods: {
+			setHtml() {
+				this.getWidth().then((data) => {
+					this.wxParseWidth.value = data;
+				})
+				let {
+					content,
+					noData,
+					imageProp,
+					startHandler,
+					endHandler,
+					charsHandler
+				} = this;
+				let parseData = content || noData;
+				let customHandler = {
+					start: startHandler,
+					end: endHandler,
+					chars: charsHandler
+				};
+				let results = HtmlToJson(parseData, customHandler, imageProp, this);
+
+				this.imageUrls = results.imageUrls;
+				// this.nodes = results.nodes;
+				
+				
+				this.nodes = [];
+				results.nodes.forEach((item) => {
+					setTimeout(() => {
+						this.nodes.push(item)
+					}, 0);
+				})
+			},
+			getWidth() {
+				return new Promise((res, rej) => {
+					// #ifndef MP-ALIPAY || MP-BAIDU
+					uni.createSelectorQuery()
+						.in(this)
+						.select('.wxParse')
+						.fields({
+								size: true,
+								scrollOffset: true
+							},
+							data => {
+								res(data.width);
+							}
+						).exec();
+					// #endif
+					// #ifdef MP-BAIDU
+					const query = swan.createSelectorQuery();
+					query.select('.wxParse').boundingClientRect();
+					query.exec(obj => {
+						const rect = obj[0]
+						if (rect) {
+							res(rect.width);
+						}
+					});
+					// #endif
+					// #ifdef MP-ALIPAY
+					my.createSelectorQuery()
+						.select('.wxParse')
+						.boundingClientRect().exec((ret) => {
+							res(ret[0].width);
+						});
+					// #endif
+				});
+			},
+			navigate(href, $event, attr) {
+				console.log(href, attr);
+				this.$emit('navigate', href, $event);
+			},
+			preview(src, $event) {
+				if (!this.imageUrls.length || typeof this.imgOptions === 'boolean') {
+
+				} else {
+					uni.previewImage({
+						current: src,
+						urls: this.imageUrls,
+						loop: this.imgOptions.loop,
+						indicator: this.imgOptions.indicator,
+						longPressActions: this.imgOptions.longPressActions
+					});
+				}
+				this.$emit('preview', src, $event);
+			},
+			removeImageUrl(src) {
+				const {
+					imageUrls
+				} = this;
+				imageUrls.splice(imageUrls.indexOf(src), 1);
+			}
+		},
+		// 父组件中提供
+		provide() {
+			return {
+				parseWidth: this.wxParseWidth,
+				parseSelect: this.userSelect
+				// 提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。
+			};
+		},
+		watch: {
+			content(){
+				this.setHtml()
+			}
+			// content: {
+			// 	handler: function(newVal, oldVal) {
+			// 		if (newVal !== oldVal) {
+			// 			
+			// 		}
+			// 	},
+			// 	deep: true
+			// }
+		}
+	};
+</script>

+ 21 - 0
src/main.ts

@@ -0,0 +1,21 @@
+import Vue from 'vue'
+import App from './App.vue'
+import {router, RouterMount} from '@/router/index.ts'  
+import store from '@/common/store'
+import MyHttp from '@/common/http';
+import {OSS_STATIC} from '@/common/constants';
+Vue.prototype.$oss_url = OSS_STATIC;
+Vue.use(router);
+Vue.use(MyHttp)
+Vue.config.productionTip = false
+const app = new Vue({
+    ...App,
+		store,
+})
+// #ifdef H5
+	RouterMount(app,router,'#app')
+// #endif
+
+// #ifndef H5
+	app.$mount(); //为了兼容小程序及app端必须这样写才有效果
+// #endif

+ 157 - 0
src/manifest.json

@@ -0,0 +1,157 @@
+{
+    "name" : "华美优选商家端",
+    "appid" : "__UNI__F37123F",
+    "description" : "",
+    "versionName" : "1.0.9",
+    "versionCode" : 109,
+    "transformPx" : false,
+    "app-plus" : {
+        /* 5+App特有相关 */
+        "modules" : {
+            "VideoPlayer" : {},
+            "Maps" : {},
+            "Barcode" : {},
+            "Camera" : {},
+            "Payment" : {},
+            "Share" : {}
+        },
+        "compatible" : {
+            "ignoreVersion" : true
+        },
+        /* 模块配置 */
+        "distribute" : {
+            /* 应用发布信息 */
+            "android" : {
+                /* android打包配置 */
+                "permissions" : [
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
+                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            "ios" : {
+                "dSYMs" : false
+            },
+            /* ios打包配置 */
+            "sdkConfigs" : {
+                "ad" : {},
+                "maps" : {
+                    "amap" : {
+                        "appkey_ios" : "eff4cff0abfbd37d88a9f314716f0f5f",
+                        "appkey_android" : "eff4cff0abfbd37d88a9f314716f0f5f"
+                    }
+                },
+                "payment" : {
+                    "alipay" : {
+                        "__platform__" : [ "android" ]
+                    },
+                    "weixin" : {
+                        "__platform__" : [ "android" ],
+                        "appid" : "wxe351145e15909786",
+                        "UniversalLinks" : ""
+                    }
+                },
+                "share" : {
+                    "weixin" : {
+                        "appid" : "wxe351145e15909786",
+                        "UniversalLinks" : ""
+                    }
+                }
+            },
+            "icons" : {
+                "android" : {
+                    "hdpi" : "unpackage/res/icons/72x72.png",
+                    "xhdpi" : "unpackage/res/icons/96x96.png",
+                    "xxhdpi" : "unpackage/res/icons/144x144.png",
+                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
+                },
+                "ios" : {
+                    "appstore" : "unpackage/res/icons/1024x1024.png",
+                    "ipad" : {
+                        "app" : "unpackage/res/icons/76x76.png",
+                        "app@2x" : "unpackage/res/icons/152x152.png",
+                        "notification" : "unpackage/res/icons/20x20.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "proapp@2x" : "unpackage/res/icons/167x167.png",
+                        "settings" : "unpackage/res/icons/29x29.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "spotlight" : "unpackage/res/icons/40x40.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
+                    },
+                    "iphone" : {
+                        "app@2x" : "unpackage/res/icons/120x120.png",
+                        "app@3x" : "unpackage/res/icons/180x180.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "notification@3x" : "unpackage/res/icons/60x60.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "settings@3x" : "unpackage/res/icons/87x87.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
+                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
+                    }
+                }
+            }
+        },
+        /* SDK配置 */
+        "usingComponents" : true
+    },
+    "quickapp" : {},
+    /* 快应用特有相关 */
+    "mp-weixin" : {
+        /* 小程序特有相关 */
+        "usingComponents" : true,
+        "appid" : "wxd015215876dc4f4d",
+        "setting" : {
+            "urlCheck" : true
+        },
+        "permission" : {
+            "scope.userLocation" : {
+                "desc" : "获取地址信息"
+            }
+        },
+        "requiredPrivateInfos" : [ "getLocation", "chooseLocation" ]
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "mp-qq" : {
+        "usingComponents" : true
+    },
+    "h5" : {
+        "sdkConfigs" : {
+            "maps" : {
+                "amap" : {
+                    "key" : "24b6a7f3ed609d4af928a615b1d1bf0d",
+                    "securityJsCode" : "ec2755f42b1bdc8603b18fa67fdb947b",
+                    "serviceHost" : ""
+                }
+            }
+        }
+    }
+}

+ 33 - 0
src/packages/authorization/agreement.ts

@@ -0,0 +1,33 @@
+export default {
+	title: '伊兰迪用户协议',
+	content: `
+		<p  style="text-indent: 2em;">欢迎您来注册,您注册成为本应用用户后,即可享有本应用的信息和服务。</p>
+		<p  style="text-indent: 2em;">请先仔细阅读以下用户协议,谢谢您的配合。</p>
+		<p  style="text-indent: 2em;">1.前言</p>
+		<p  style="text-indent: 2em;">伊兰迪提供的服务及用户的责任,在用户注册使用本应用时点击“注册”按钮表示曾仔细阅读过本协议并接受当时版本的该协议全部条款,包括本协议包含的其他协议。本协议如有修改会在官方网公告中示出,请用户随时关注。</p>
+		<p  style="text-indent: 2em;">2.会员及账号管理</p>
+		<p  style="text-indent: 2em;">(1)注册账号</p>
+		<p  style="text-indent: 2em;">您应当是具备完全民事权利能力和完全民事行为能力的自然人、法人或其他组织。若您不具备前述主体资格,则需要监护人同意您方可注册成为本应用会员,否则您和您的监护人应承担因此而导致的一切后果,且本应用有权注销(永久冻结)您的账户,并向您及您的监护人索偿或者追偿。</p>
+		<p  style="text-indent: 2em;">您应对您的账号和密码的安全,以及对通过您的账号和密码实施的行为负责。除非经过正当法律程序,且征得本应用的同意,否则,账号和密码不得以任何方式转让、赠与或继承。如果发现任何人不当使用您的账号或有任何其他可能危及您的账号安全的情形时,您应当立即以有效方式联系本应用,要求本应用暂停相关服务。</p>
+		<p  style="text-indent: 2em;">(2)会员</p>
+		<p  style="text-indent: 2em;">在您按照注册页面提示填写信息、阅读并同意本协议并完成全部注册程序后或以其他本应用允许的方式实际使用伊兰迪服务时,您即成为伊兰迪会员(亦称会员)。</p>
+		<p  style="text-indent: 2em;">在注册时,您应当按照法律法规要求,或注册页面的提示准确提供,并及时更新您的资料,以使之真实、及时、完整和准确。</p>
+		<p  style="text-indent: 2em;">您应当准确填写并及时更新您提供的联系电话、联系地址等联系方式,以便伊兰迪工作人员或其他会员与您进行有效联系,因通过这些联系方式无法与您取得联系,导致您在使用本应用服务的过程中产生任何损失或增加费用的,应由您完全独自承担,本应用对此不予承担。</p>
+		<p  style="text-indent: 2em;">(3)信息</p>
+		<p  style="text-indent: 2em;">本应用会收集您的银行卡信息用于线下汇款。收集的信息不会用于其他操作切不会外漏至其他应用使用。</p>
+		<p  style="text-indent: 2em;">3.服务</p>
+		<p  style="text-indent: 2em;">(1)伊兰迪会员(以下简称会员)可以通过本应用购买商城中的商品,当推广的客户购买商品后,推荐人会获得部分奖励。</p>
+		<p  style="text-indent: 2em;">(2)会员获得的奖励由本应用根据产品已设置的金额发放到用户账户中。</p>
+		<p  style="text-indent: 2em;">(3)会员的奖励在正常申请情况下,本应用在收到申请后1个工作日内完成汇款工作(遇到节假日等特殊情况顺延)。</p>
+		<p  style="text-indent: 2em;">(4)服务</p>
+		<p  style="text-indent: 2em;">在用户接受本协议的前提下,本应用向注册用户提供不可转让,非独占性的服务,并保留今后修改,删除其中任意项或全部服务的权利。本应用收集并提供信息,用户同意本应用将其所认为合适的信息提供给其他用户或访问者并不承担任何真实性及时性或准确性的责任。用户同意尽量提供准确严肃的信息,并对自己提供的信息或回复以及随后的成约及合同的履行等负全部责任。如用户利用虚假身份在本应用活动产生的一切损失由该用户负全部责任。</p>
+		<p  style="text-indent: 2em;">(5)服务修订</p>
+		<p  style="text-indent: 2em;">伊兰迪可保留随时修改服务而不需要通知用户的权利。用户接受伊兰迪行使修改完善服务权利。</p>
+		<p  style="text-indent: 2em;">4.知识产权</p>
+		<p  style="text-indent: 2em;">用户及访问者承认本应用的所有财产(包括信息、软件、硬件及结构),以及本应用上所包含所有者为第三方的所有财产(包括信息、软件、硬件及结构)受国内和国际知识产权和中华人民共和国法律保护。</p>
+		<p  style="text-indent: 2em;">5.有限责任/担保</p>
+		<p  style="text-indent: 2em;">本应用不提供对于任何一方身份认定、履约能力、信息准确性、产品质量、数量、适用性、打印错误及其他任何形式的担保。用户及访问者同意尽可能准确真实地输入所有信息。</p>
+		<p  style="text-indent: 2em;">6.通讯</p>
+		<p  style="text-indent: 2em;">本应用所提供的一切与通讯有关的服务服从国家的政策法律。涉及第三方的服务除服务服从国家的政策法律外还同时服从第三方规定。如因本应用以外的原因导致有关的服务无法继续或收费改变,用户及访问者同意自行承担责任和义务。</p>
+	`
+}

+ 221 - 0
src/packages/authorization/authorization.vue

@@ -0,0 +1,221 @@
+<template>
+	<view class="authorization-box">
+		<Navbar title="微信授权" background-color="#fff" color="#333"></Navbar>
+		<image class="pic" :src="pic" mode="aspectFill"></image>
+		<view class="title">
+			{{ type === 'info' ? '伊兰迪' : (user.nickname ||'微信昵称') }}
+		</view>
+		<view class="tip">
+			{{ type === 'info' ? '申请获得你的公开信息(头像、昵称)' : '绑定手机号可以获取更多服务' }}
+		</view>
+		<view class="btn" @click="bindUserInfo" v-if="type === 'info'">微信用户授权</view>
+		<button @getphonenumber="getPhone" open-type="getPhoneNumber" class="btn" v-else>
+			微信手机号快速登录
+		</button>
+		<view class="agree">
+			注册登录即表示接受<text @click="handleAgree"> 《用户协议》</text>
+		</view>
+		<uni-popup ref="agreement" :safe-area="false">
+			<scroll-view class="agreement-box" :scroll-y="true">
+				<view class="title">{{ agreement.title }}</view>
+				<view class="content-styl" v-html="agreement.content"></view>
+			</scroll-view>
+		</uni-popup>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Mixins,
+		Watch
+	} from 'vue-property-decorator';
+	import loginMixin from '@/common/mixins/loginMixin';
+	import {
+		namespace
+	} from 'vuex-class';
+	import agreement from './agreement';
+	const baseModule = namespace('base');
+	@Component({})
+	export default class authorization extends Mixins(loginMixin) {
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		oss_url: any = this.$oss_url; //oss地址
+		pic: any = this.$oss_url + 'logo.jpg';
+		type: string = 'info';
+		agreement: {
+			title: string;content: string
+		} = agreement;
+		phone: string = '';
+		user = {
+			nickname: '',
+			avatar: ''
+		};
+
+		bindUserInfo(): void {
+			uni.getUserProfile({
+				desc: '获取你的昵称、头像、地区及性别',
+				success: (res: any) => {
+					this.user.avatar = res.userInfo.avatarUrl;
+					this.user.nickname = res.userInfo.nickName;
+					uni.showLoading({
+						title: '加载中',
+					});
+					this.$http
+						.put({
+							url: this.$api.updateUserInfo,
+							data: this.user
+						})
+						.then((res: any) => {
+							uni.hideLoading();
+							this.type = 'phone';
+							this.pic = this.user.avatar;
+						});
+				}
+			});
+		}
+		getPhone({
+			detail
+		}: any) {
+			if (detail.errMsg !== 'getPhoneNumber:ok') return;
+			this.phone = detail.code;
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.post({
+					url: this.$api.updatePhone,
+					data: {
+						auth: {
+							agent: 1,
+							way: 2,
+						},
+						third: {
+							way: 1,
+							phoneCode: this.phone
+						}
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '授权成功',
+						icon: 'none'
+					});
+					this.getUserInfo().then((res: any) => {
+						let query = this.$Route.query;
+						if (query.to) {
+							if (query.navType === 'pushTab') {
+								this.$Router.pushTab({
+									path: query.to,
+									query: query.data
+								});
+							} else {
+								this.$Router.replace({
+									path: query.to,
+									query: query.data
+								});
+							}
+						} else {
+							this.$Router.back(1);
+						}
+					});
+				});
+			// console.log(detail)
+			// this.getUserInfo().then((res: any) => {
+			// 	let query = this.$Route.query;
+			// 	if (query.to) {
+			// 		this.$Router.replace({
+			// 			path: query.to,
+			// 			query: query.data
+			// 		});
+			// 	} else {
+			// 		this.$Router.back(1);
+			// 	}
+			// });
+		}
+		handleAgree() {
+			(this.$refs.agreement as any).open('bottom');
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.authorization-box {
+		width: 100%;
+		background: #fff;
+		@include flex-y();
+		min-height: 100vh;
+		box-sizing: border-box;
+
+		.pic {
+			width: vw(100);
+			height: vw(100);
+			border-radius: vw(50);
+			margin-top: 30%;
+			background: #D8D8D8;
+		}
+
+		.name {
+			@include word-vw(24, #333);
+			font-weight: bold;
+			margin-top: vw(15);
+		}
+
+		.title {
+			@include word-vw(16, #333);
+			margin-top: vw(6);
+			line-height: vw(22);
+		}
+
+		.tip {
+			@include word-vw(16, #999);
+			line-height: vw(22);
+			margin-top: vw(12);
+		}
+
+		.btn {
+			width: vw(345);
+			height: vw(44);
+			border-radius: vw(4);
+			@include flex-x(center);
+			@include word-vw(16, #333);
+			margin-top: vw(25);
+			background: $bk-color;
+		}
+
+		.agree {
+			@include word-vw(14, #666);
+			margin-top: vw(25);
+
+			text {
+				color: #E6644E;
+			}
+		}
+
+		//用户协议
+		.agreement-box {
+			overflow: hidden;
+			// overflow-y: auto;
+			height: vw(480);
+			background: #fff;
+			border-top-left-radius: vw(5);
+			border-top-right-radius: vw(5);
+			padding-bottom: vw(30);
+			box-sizing: border-box;
+
+			.title {
+				margin: vw(24) 0 vw(30);
+				text-align: center;
+				@include word-vw(16, $gray3);
+			}
+
+			.content-styl {
+				@include word-vw(14, $gray6);
+				line-height: vw(24);
+				padding: 0 vw(15);
+			}
+		}
+	}
+</style>

+ 110 - 0
src/packages/goods/add-detail.vue

@@ -0,0 +1,110 @@
+<template>
+	<view class="add-detail-box">
+		<Navbar title="添加商品描述" color="#333"></Navbar>
+		<view class="content">
+			<view class="box">
+				<textarea class="detail" v-model="detailDes" placeholder-style="color:#999" placeholder="点击输入商品描述…" />
+				<MulImgUpload @update="getImgs" :imgs="detailPic" :max="20" :width="100 / 3.75" :height="100 / 3.75"
+					addColor="#FA402B">
+				</MulImgUpload>
+			</view>
+		</view>
+		<view class="bottom">
+			<view class="btn-box">
+				<view class="btn" @click="handleConfirm">保存</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	@Component({
+		filters: {
+			attrFormat(val: any) {
+				if (!val) return '';
+				let arr = [];
+				for (let key in val) {
+					arr.push(key + ':' + val[key]);
+				};
+				return arr.join('-');
+			}
+		}
+	})
+
+	export default class AddDetail extends Vue {
+		static: string = OSS_STATIC;
+		detailPic: any = [];
+		detailDes: any = '';
+		data: any = {};
+
+		onLoad() {
+			this.data = uni.getStorageSync('goodData');
+			if (this.data) {
+				this.detailDes = this.data.detailDes;
+				this.detailPic = this.data.detailPic;
+			}
+		}
+
+		getImgs(pics: any) {
+			this.detailPic = pics;
+		}
+		
+		handleConfirm(){
+			this.data.detailDes = this.detailDes;
+			this.data.detailPic = this.detailPic;
+			uni.setStorageSync('goodData', this.data);
+			this.$Router.back(1);
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.add-detail-box {
+		.content {
+			padding-bottom: vw(120);
+			@include flex-y(flex-start);
+
+			.box {
+				width: 100%;
+				background: #fff;
+				padding: vw(20);
+				box-sizing: border-box;
+
+				.detail {
+					font-size: vw(14);
+					height: vw(100);
+				}
+			}
+		}
+
+		.bottom {
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			height: vw(70);
+			background: #fff;
+			@include flex-y(center);
+			z-index: 99;
+
+			.btn {
+				@include flex-x(center);
+				@include solid-btn(300, 50, #fff, 25);
+				@include word-vw(16, #fff);
+			}
+
+			.btn-box {
+				width: 100%;
+				// padding: 0 vw(10);
+				box-sizing: border-box;
+				@include flex-x(center);
+			}
+		}
+	}
+</style>

+ 500 - 0
src/packages/goods/add-good.vue

@@ -0,0 +1,500 @@
+<template>
+	<view class="add-business-box">
+		<Navbar title="添加商品" color="#333"></Navbar>
+		<view class="content">
+			<view class="item">
+				<view class="label">名称:</view>
+				<input type="text" class="input" v-model="data.name" placeholder="请输入商品名称">
+			</view>
+			<view class="item mph">
+				<view class="label">宣传语:<text>(选填)</text></view>
+				<textarea class="input" v-model="data.tagline" placeholder-class="placeholder"
+					placeholder="请输入宣传语,不超过40字" maxlength="40" cols="30" rows="10"></textarea>
+			</view>
+			<view class="item item2">
+				<view class="label">关联分类:</view>
+				<!-- <picker mode="selector" :range="typeList" range-key='name' @change="changeType">
+					<view class="selector">{{shopType.id ? shopType.name : '请选择'}}
+						<IconText class="icon" :code="`\ue84a`" size="12" color="#BDBBBB"></IconText>
+					</view>
+				</picker> -->
+				<uni-data-picker :localdata="categoryList" placeholder="点击选择" popup-title="请选择关联分类" v-model="category"
+					class="area-picker" @change="bindPickerChange">
+					<view class="category-show">
+						<text class="word13" v-if="!category.length">点击选择</text>
+						<text class="word13"
+							v-else>{{category[0] ? category[0].text : ''}}/{{category[1] ? category[1].text : ''}}</text>
+						<IconText class="icon" :code="`\ue84a`" size="12" color="#BDBBBB"></IconText>
+					</view>
+				</uni-data-picker>
+			</view>
+			<view class="item item3 pics">
+				<view class="label" style="flex-direction: row;">商品图片:<text
+						style="margin-left: 10px;">建议尺寸:600*600,图片类型jpg、png</text></view>
+				<view class="upload-box">
+					<ImgUpload @update="getImgs1" tip="主图" :img="data.masterPic" :width="75 / 3.75" :height="75 / 3.75"
+						addColor="#999" class="master-pic">
+					</ImgUpload>
+					<ImgUpload v-for="(item, index) in 5" :key="index" @update="val => getImgs2(index, val)" tip="细节图"
+						:img="data.slideshow[index]" :width="75 / 3.75" :height="75 / 3.75" addColor="#999"
+						class="master-pic">
+					</ImgUpload>
+				</view>
+			</view>
+			<view class="item item3 item2" @click="toSku">
+				<view class="label">商品售卖信息</view>
+				<view class="selector" style="color: #F75E24;">{{data.skuList.length ? '已设置' : '设置'}}
+					<IconText class="icon" :code="`\ue84a`" size="12" color="#BDBBBB"></IconText>
+				</view>
+			</view>
+			<view class="item">
+				<view class="label">原价:<text>(选填)</text></view>
+				<input type="digit" class="input" v-model.number="data.linePrice" placeholder="请输入价格">
+			</view>
+			<view class="item">
+				<view class="label">打赏金额</view>
+				<input type="digit" class="input" v-model.number="data.rewardAmount" placeholder="请输入打赏金额">
+			</view>
+			<view class="item item3 item2" @click="toDetail">
+				<view class="label">商品描述<text>商品详细说明(选填)</text></view>
+				<view class="selector">{{(data.detailDes || data.detailPic.length) ? '已添加' : '添加'}}
+					<IconText class="icon" :code="`\ue84a`" size="12" color="#BDBBBB"></IconText>
+				</view>
+			</view>
+			<view class="item item3 mph" v-if="detail.auditStatus === 2">
+				<view class="label">驳回理由:</view>
+				<view class="remark">
+					{{detail.auditRejectReason}}
+				</view>
+			</view>
+		</view>
+		<view class="bottom">
+			<view class="btn-box">
+				<view class="btn" @click="handleConfirm">{{gid ? '修改并提审' : '创建商品'}}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	@Component({})
+
+	export default class AddGood extends Vue {
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		typeList: any = [];
+		shopType: any = {};
+		info: any = {};
+		data: any = {
+			masterPic: '',
+			slideshow: [],
+			name: '',
+			tagline: '',
+			secondSortId: null,
+			skuList: [],
+			linePrice: null,
+			detailDes: '',
+			detailPic: [],
+			rewardAmount: null
+		};
+		spu: any = {
+			name: '',
+			tagline: '',
+			masterPic: '',
+			slideshow: [],
+			status: 1,
+			linePrice: null,
+			detailDes: '',
+			detailPic: [],
+			rewardAmount: null
+		};
+		static: string = OSS_STATIC;
+		category: any = [];
+		categoryList: any = [];
+		isFirst: any = true;
+		isSave: any = false;
+		gid: any = null;
+		id: any = null;
+		detail: any = {};
+
+		onLoad() {
+			this.getCategoryList();
+			if (this.$Route.query.gid) {
+				this.gid = +this.$Route.query.gid;
+				this.getDetail();
+			};
+			// uni.setStorageSync('goodData', this.data);
+		}
+
+		onShow() {
+			if (!this.isSave) return;
+			console.log(12223123)
+			let data = uni.getStorageSync('goodData');
+			data && (this.data = data);
+		}
+
+		getDetail() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.get({
+					url: this.$api.getGoodInfoB,
+					data: {
+						gid: this.gid,
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					this.detail = res;
+					let data: any = {};
+					for (let key in this.data) {
+						data[key] = res[key];
+					};
+					this.category = [{
+							value: res.firstSortId,
+							text: res.firstSortName
+						},
+						{
+							value: res.firstSortId + '-' + res.secondSortId,
+							text: res.secondSortName
+						}
+					]
+					this.data = data;
+					this.gid = res.gid;
+					this.id = res.id;
+				}, (err: any) => {
+					uni.hideLoading();
+				});
+		}
+
+		getCategoryList() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.get({
+					url: this.$api.getCategoryListB,
+					data: {}
+				})
+				.then((res: any) => {
+					this.categoryList = res.list.map((item: any) => {
+						return {
+							text: item.name,
+							value: item.id,
+							children: item.second.map((item2: any) => {
+								return {
+									text: item2.name,
+									value: item2.fid + '-' + item2.id,
+								}
+							})
+						}
+					});
+					uni.hideLoading();
+				}, (err: any) => {
+					uni.hideLoading();
+				});
+		}
+
+		getImgs1(val: any) {
+			console.log(val);
+			this.data.masterPic = val;
+			this.data = {
+				...this.data
+			};
+		}
+
+		getImgs2(index: any, val: any) {
+			this.data.slideshow[index] = val;
+			this.data = {
+				...this.data
+			};
+		}
+
+		bindPickerChange(val: any) {
+			console.log(1111, val.detail);
+			this.category = val.detail.value;
+		}
+
+		toSku() {
+			this.isSave = true;
+			uni.removeStorageSync('goodData');
+			uni.setStorageSync('goodData', this.data);
+			this.$Router.push({
+				path: '/packages/goods/attrs-setting'
+			})
+		}
+
+		toDetail() {
+			this.isSave = true;
+			uni.removeStorageSync('goodData');
+			uni.setStorageSync('goodData', this.data);
+			this.$Router.push({
+				path: '/packages/goods/add-detail'
+			})
+		}
+
+		handleConfirm() {
+			console.log(this.data)
+			uni.showLoading({
+				title: '加载中...'
+			});
+			let spu: any = {};
+			for (let key in this.spu) {
+				spu[key] = this.data[key];
+			};
+			spu.status = 3;
+			let url = 'post',
+				method = 'addGood';
+			if (this.gid) {
+				url = 'put';
+				method = 'updateGood';
+				spu.id = this.id;
+				spu.gid = this.gid;
+			}
+			this.$http[url]({
+					url: this.$api[method],
+					data: {
+						spu,
+						secondSortId: (this.category && this.category[1]) ? +this.category[1].value.split('-')[1] : null,
+						skuList: this.data.skuList.map((item: any) => {
+							return {
+								attrs: item.attrs,
+								sku: {
+									pic: item.pic,
+									price: item.price,
+									stock: item.stock,
+									code: item.code,
+								}
+							}
+						})
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					if (this.gid) {
+						// uni.showToast({
+						// 	title: '编辑成功',
+						// 	icon: 'none'
+						// });
+						// this.getDetail();
+						this.$Router.back(1);
+					} else {
+						this.$Router.back(1);
+					}
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.add-business-box {
+		.content {
+			padding-bottom: vw(120);
+
+			.item {
+				height: vw(66);
+				background: #fff;
+				margin-top: vw(1);
+				@include flex-x();
+				padding: 0 vw(15);
+
+				.label {
+					@include word-vw(14, #333);
+					@include flex-y(flex-start, flex-start);
+					white-space: nowrap;
+
+					text {
+						@include word-vw(14, #999);
+					}
+				}
+
+				.input {
+					width: vw(240);
+					height: vw(50);
+					background: #F6F6F6;
+					border-radius: vw(5);
+					padding: 0 vw(16);
+					font-size: vw(14);
+					box-sizing: border-box;
+				}
+
+				.selector {
+					@include flex-x();
+					@include word-vw(15, #999);
+
+					.icon {
+						margin-left: vw(5);
+					}
+				}
+
+				.position {
+					@include word-vw(14, #999);
+					@include flex-x(flex-end);
+					width: vw(240);
+
+					.icon {
+						margin-left: vw(5);
+					}
+				}
+			}
+
+			.item2 {
+				height: vw(55);
+			}
+
+			.category-show {
+				@include flex-x();
+
+				.icon {
+					margin-left: vw(6);
+				}
+			}
+
+			.item3 {
+				margin-top: vw(10);
+			}
+			
+			.remark{
+				@include word-vw(15, #333);
+			}
+
+			.item4 {
+				height: auto;
+
+				.textarea {
+					height: vw(75);
+				}
+			}
+
+			.mph,
+			.des,
+			.pics {
+				height: auto;
+				padding: vw(15) vw(12);
+
+				.label {
+					align-self: flex-start;
+					padding-top: vw(3);
+
+					text {
+						font-size: vw(12);
+					}
+				}
+			}
+
+			.pics {
+				@include flex-y(flex-start, flex-start);
+
+				.upload-box {
+					width: 100%;
+					@include flex-x(flex-start);
+					margin-top: vw(24);
+					flex-wrap: wrap;
+
+					.master-pic {
+						margin-right: vw(12);
+					}
+				}
+			}
+
+			.mph {
+				.input {
+					height: vw(66);
+					padding: vw(12) vw(16);
+					line-height: vw(21);
+				}
+
+				/deep/ .placeholder {
+					line-height: vw(21);
+				}
+			}
+
+			.des {
+				.input {
+					height: vw(100);
+					padding: vw(12) vw(16);
+				}
+			}
+
+			.master-img {
+				@include flex-x();
+
+				.img {
+					width: vw(40);
+					height: vw(40);
+					background: #ccc;
+					border-radius: vw(20);
+					margin-right: vw(5);
+				}
+			}
+
+			// .upload-box {
+			// 	width: vw(240);
+
+			// 	.empty {
+			// 		width: vw(66);
+			// 		height: vw(66);
+			// 		border-radius: vw(5);
+			// 		@include flex-x(center);
+			// 		background: #F6F6F6;
+			// 	}
+
+			// 	.video,
+			// 	.video-img {
+			// 		width: vw(66);
+			// 		height: vw(66);
+			// 		// background: #ccc;
+			// 		border-radius: vw(5);
+			// 	}
+
+			// 	.img-box {
+			// 		position: relative;
+			// 		display: inline-block;
+
+			// 		.delete-icon {
+			// 			position: absolute;
+			// 			top: vw(-6);
+			// 			right: vw(-6);
+			// 		}
+			// 	}
+			// }
+		}
+
+		.bottom {
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			height: vw(70);
+			background: #fff;
+			@include flex-y(center);
+			z-index: 99;
+
+			.btn {
+				@include flex-x(center);
+				@include solid-btn(300, 50, #fff, 25);
+				@include word-vw(14, #fff);
+			}
+
+			.btn-box {
+				width: 100%;
+				padding: 0 vw(10);
+				box-sizing: border-box;
+				@include flex-x(center);
+			}
+		}
+	}
+</style>

+ 35 - 0
src/packages/goods/area.vue

@@ -0,0 +1,35 @@
+<template>
+	<view class="area-box">
+		<Navbar title="不发货地区" color="#333"></Navbar>
+		<view class="content">
+			不发货地区: {{area}}
+		</view>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	@Component({})
+
+	export default class Area extends Vue {
+		area: string = '无';
+		onLoad() {
+			let area = this.$Route.query.area;
+			if (area) {
+				this.area = area || '无';
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content {
+		padding: vw(12) vw(15);
+		@include word-vw(14, #333);
+		border-top: vw(1) solid #efefef;
+	}
+</style>

+ 594 - 0
src/packages/goods/attrs-setting.vue

@@ -0,0 +1,594 @@
+<template>
+	<view class="add-business-box">
+		<Navbar title="设置规格" color="#333"></Navbar>
+		<view class="content">
+			<view class="sku" v-for="(sku, index) in skuList" :key="index">
+				<view class="item">
+					<view class="label">规格名称</view>
+					<view class="right">
+						<input type="text" class="input" v-model="sku.name" placeholder="请输入规格名称">
+						<IconText v-show="!lock" @click.native="deleteSku(index)" class="icon" size="16" color="#999"
+							:code="`\ue844`"></IconText>
+					</view>
+				</view>
+				<view class="item item2">
+					<view class="label">规格值</view>
+					<view class="list">
+						<view class="attr" v-for="(attr, attrIndex) in sku.attrs" :key="attrIndex">
+							<input type="text" class="input" v-model="sku.attrs[attrIndex]" placeholder="规格值">
+							<IconText v-show="!lock" @click.native="deleteAttr(sku.attrs, attrIndex)" class="icon"
+								size="16" color="#666" :code="`\ue872`"></IconText>
+						</view>
+						<view v-if="!lock" class="add-btn" @click="addAttr(sku)">+添加规格</view>
+					</view>
+				</view>
+			</view>
+			<view class="tip">
+				提示:编辑完成后,清点击“生成规格明细”填写相关明细,修改规格将会清空明细
+			</view>
+			<view class="setting-box" v-if="lock">
+				<view class="item batch">
+					<view class="label">规格明细</view>
+					<view class="right" @click="handleBatchModal">
+						批量设置库存价格
+					</view>
+				</view>
+				<view class="setting-item" v-for="(item, index) in tableData" :key="index">
+					<view class="name row">
+						{{item.attribute | attrFormat}}
+					</view>
+					<view class="row pic">
+						图片:
+						<view class="right">
+							<view @click="chooseImg(item)" class="pic-box">
+								<image class="avatar-img" v-if="item.pic" :src="item.pic" mode="aspectFill"></image>
+								<view class="camera-box" v-else>
+									<IconText size="24" color="#BFBFBF" :code="`\ue72b`"></IconText>
+								</view>
+								<IconText class="icon" size="12" color="#BFBFBF" :code="`\ue84a`"></IconText>
+							</view>
+						</view>
+					</view>
+					<view class="row price">
+						价格:
+						<view class="right">
+							<input type="digit" class="input" v-model.number="item.price" placeholder=" ">
+						</view>
+					</view>
+					<view class="row stock">
+						库存:
+						<view class="right">
+							<input type="number" class="input" v-model.number="item.stock" placeholder=" ">
+						</view>
+					</view>
+					<view class="row code">
+						编码:
+						<view class="right">
+							<input type="text" class="input" v-model="item.code" placeholder=" ">
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="bottom">
+			<view class="btn-box">
+				<view class="btn" @click="addSku">添加规格</view>
+				<view class="btn" v-if="!lock" @click="getAttrInfo">生成明细</view>
+				<view class="btn btn2" v-else @click="getAttrInfo2">解锁规格</view>
+				<view class="btn" @click="handleConfirm">保存设置</view>
+			</view>
+		</view>
+		<uni-popup ref="popup" type="center">
+			<view class="batch-box">
+				<view class="title">批量设置</view>
+				<view class="batch-item">
+					<view class="label">价格:</view>
+					<input type="digit" class="input" v-model.number="price" placeholder=" ">
+				</view>
+				<view class="batch-item">
+					<view class="label">库存:</view>
+					<input type="number" class="input" v-model.number="stock" placeholder=" ">
+				</view>
+				<view class="btn" @click="handleBatch">确认</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	import {
+		forEach
+	} from 'lodash';
+	@Component({
+		filters: {
+			attrFormat(val: any) {
+				if (!val) return '';
+				let arr = [];
+				for (let key in val) {
+					arr.push(key + ':' + val[key]);
+				};
+				return arr.join('-');
+			}
+		}
+	})
+
+	export default class AddGood extends Vue {
+		static: string = OSS_STATIC;
+		skuList: any = [];
+		lock: any = false;
+		attribute: any = [];
+		info: any = {
+			pic: '',
+			price: null,
+			stock: null,
+			code: '',
+			attribute: {}
+		}
+		tableData: any = [];
+		stock: any = null;
+		price: any = null;
+		data: any = {};
+
+
+		onLoad() {
+			this.data = uni.getStorageSync('goodData');
+			if (this.data.skuList && this.data.skuList.length) {
+				this.lock = true;
+				this.tableData = this.getAttrs(this.data.skuList);
+				let key = this.getAttrName(this.data.skuList);
+				key.forEach((item: any) => {
+					let arr = {
+						name: item,
+						attrs: []
+					};
+					this.skuList.push(arr);
+				});
+				this.tableData.forEach((item: any) => {
+					let attribute = item.attribute;
+					for (let i in attribute) {
+						this.skuList.forEach((item: any) => {
+							if (item.name === i) {
+								item.attrs.push(attribute[i]);
+							}
+						});
+					}
+				});
+				this.skuList.forEach((item: any) => {
+					item.attrs = [...new Set(item.attrs)];
+				}); // value去重
+			}
+		}
+
+		addSku() {
+			if (this.lock) return;
+			this.skuList.push({
+				name: '',
+				attrs: []
+			});
+		}
+
+		// 获取所有规格
+		getAttrName(skus: any) {
+			let newAttrs: any = [];
+			skus.forEach((item: any) => {
+				item.attrs.forEach((attr: any) => {
+					if (newAttrs.indexOf(attr.keyName) < 0) {
+						newAttrs.push(attr.keyName);
+					}
+				});
+			});
+			return newAttrs;
+		}
+
+		getAttrs(skus: any) {
+			let newSkus = [...skus];
+			let skusFormat = newSkus.map((item) => {
+				let obj: any = {};
+				item.attrs.forEach((attr: any) => {
+					obj[attr.keyName] = attr.value;
+				});
+				return {
+					pic: item.pic,
+					price: item.price,
+					stock: item.stock,
+					code: item.code,
+					attrs: obj,
+					attribute: obj
+				};
+			});
+			return skusFormat;
+		}
+
+		deleteSku(index: any) {
+			if (this.lock) return;
+			this.skuList.splice(index, 1);
+		}
+
+		getAttrInfo() {
+			// console.log(this.skuList);
+			this.tableData = [];
+			let flag = true;
+			this.skuList.forEach((item: any) => {
+				if (!item.name) flag = false;
+				item.attrs.forEach((item2: any) => {
+					if (!item2) flag = false;
+				});
+				if (!item.attrs.length) flag = false;
+			});
+			if (!flag) {
+				uni.showToast({
+					title: '请填写规格信息',
+					icon: 'none'
+				});
+				return;
+			};
+			this.lock = true;
+			// this.skuList.forEach((sku: any) => {
+			// 	sku.attrs.forEach((attr: any) => {
+
+			// 	})
+			// })
+			this.getTable(0, this.skuList.length);
+			console.log(this.tableData)
+		}
+
+		getTable(i: any, len: any) {
+			// 根据选择的attr生成规格明细列表
+			this.skuList[i].attrs.forEach((item: any) => {
+				this.$set(this.attribute, this.skuList[i].name, item);
+				if (i === len - 1) {
+					this.$set(this.info, 'attribute', {
+						...this.attribute
+					});
+					this.tableData.push({
+						...this.info
+					});
+					return false;
+				}
+				this.getTable(i + 1, len);
+			});
+		}
+
+		getAttrInfo2() {
+			this.lock = false;
+		}
+
+		chooseImg(item: any) {
+			uni.chooseImage({
+				count: 1, //默认9
+				sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+				success: (res) => {
+					// const tempFilePaths : any = res.tempFilePaths;
+					uni.showLoading({
+						title: '上传中...'
+					});
+					this.$http
+						.upPic({
+							filePath: res.tempFilePaths[0]
+						})
+						.then((res: any) => {
+							// this.data.shopIcon = res;
+							item.pic = res;
+							uni.hideLoading();
+						})
+						.catch((err: any) => {
+							uni.hideLoading();
+							console.log(err);
+						});
+				}
+			});
+		}
+
+		handleBatchModal() {
+			this.stock = null;
+			this.price = null;
+			(this.$refs.popup as any).open();
+		}
+
+		handleBatch() {
+			this.tableData = this.tableData.map((item: any) => {
+				return {
+					...item,
+					stock: this.stock ? this.stock : item.stock,
+					price: this.price ? this.price : item.price,
+				}
+			});
+			(this.$refs.popup as any).close();
+		}
+
+		addAttr(sku: any) {
+			if (this.lock) return;
+			sku.attrs.push('');
+		}
+
+		deleteAttr(attrs: any, index: any) {
+			if (this.lock) return;
+			attrs.splice(index, 1);
+		}
+
+		handleConfirm() {
+			console.log(this.tableData);
+			let skuList = this.tableData.map((item: any) => {
+				let attrs = []
+				for (let key in item.attribute) {
+					attrs.push({
+						keyName: key,
+						value: item.attribute[key]
+					});
+				}
+				return {
+					attrs,
+					pic: item.pic,
+					price: item.price,
+					stock: item.stock,
+					code: item.code,
+				}
+			});
+			this.data.skuList = skuList;
+			uni.setStorageSync('goodData', this.data);
+			this.$Router.back(1);
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.add-business-box {
+		.content {
+			padding-bottom: vw(120);
+			@include flex-y(flex-start);
+
+			.sku {
+				width: 100%;
+				margin-bottom: vw(10);
+			}
+
+			.item {
+				height: vw(66);
+				background: #fff;
+				margin-top: vw(1);
+				@include flex-x();
+				padding: 0 vw(15);
+
+				.label {
+					width: vw(90);
+					flex-shrink: 0;
+					@include word-vw(14, #333);
+					@include flex-y(flex-start, flex-start);
+
+					text {
+						@include word-vw(14, #999);
+					}
+				}
+
+				.right {
+					flex: 1;
+					@include flex-x();
+					// .icon{
+					// 	margin-left: vw(15);
+					// }
+				}
+
+				.input {
+					width: vw(220);
+					height: vw(50);
+					background: #F6F6F6;
+					border-radius: vw(5);
+					padding: 0 vw(16);
+					font-size: vw(14);
+					box-sizing: border-box;
+				}
+			}
+
+			.batch {
+				width: 100%;
+				margin-top: vw(12);
+				padding: 0 vw(15);
+				box-sizing: border-box;
+				@include flex-x();
+
+				.right {
+					flex: none;
+					@include word-vw(15, #FF4F50);
+				}
+			}
+
+			.item2 {
+				height: auto;
+				min-height: vw(60);
+
+				.label {
+					line-height: vw(32);
+					align-self: flex-start;
+				}
+
+				.list {
+					flex: 1;
+					@include flex-x(flex-start);
+					flex-wrap: wrap;
+
+					.attr {
+						width: vw(120);
+						height: vw(32);
+						margin: vw(5) 0;
+						margin-right: vw(12);
+						position: relative;
+
+						&:nth-of-type(2n) {
+							margin-right: 0;
+						}
+
+						.input {
+							width: vw(120);
+							height: vw(32);
+							text-align: center;
+							padding: 0 vw(24);
+						}
+
+						.icon {
+							position: absolute;
+							top: 50%;
+							transform: translateY(-50%);
+							right: vw(5);
+						}
+					}
+
+					.add-btn {
+						width: vw(120);
+						height: vw(32);
+						border-radius: vw(5);
+						background: #EFEFEF;
+						@include word-vw(14, $btn-color);
+						@include flex-x(center);
+						margin-right: vw(12);
+						margin: vw(5) 0;
+					}
+				}
+			}
+
+			.tip {
+				@include word-vw(12, #999);
+				margin-top: vw(18);
+				margin-left: vw(16);
+				width: vw(280);
+				line-height: vw(20);
+				align-self: flex-start;
+			}
+
+			.setting-box {
+				width: 100%;
+			}
+
+			.setting-item {
+				width: vw(355);
+				border-radius: vw(10);
+				overflow: hidden;
+				margin-top: vw(10);
+
+				.row {
+					min-height: vw(66);
+					background: #fff;
+					@include flex-x();
+					padding-left: vw(27);
+					padding-right: vw(15);
+					@include word-vw(15, #333);
+
+					.right {
+						width: vw(240);
+						@include flex-x(flex-end);
+
+						.input {
+							width: 100%;
+							height: vw(50);
+							background: #EFEFEF;
+							text-align: center;
+							padding: 0 vw(12);
+							@include word-vw(15, #333);
+						}
+
+						.pic-box {
+							@include flex-x();
+
+							.icon {
+								margin-left: vw(18);
+							}
+						}
+					}
+				}
+
+				.name {
+					@include word-vw(18, #333);
+					font-weight: 550;
+				}
+
+				.avatar-img {
+					width: vw(40);
+					height: vw(40);
+				}
+
+				.camera-box {
+					width: vw(40);
+					height: vw(40);
+					background: #F6F6F6;
+					@include flex-x(center);
+					.icon{
+						margin: 0;
+					}
+				}
+			}
+		}
+
+		.bottom {
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			height: vw(70);
+			background: #fff;
+			@include flex-y(center);
+			z-index: 99;
+
+			.btn {
+				@include flex-x(center);
+				@include solid-btn(106, 50, #fff, 25);
+				@include word-vw(14, #F75E24);
+				background: #E8E8E8;
+				font-weight: 550;
+			}
+
+			.btn2 {
+				background: #F75E24;
+				color: #fff;
+			}
+
+			.btn-box {
+				width: 100%;
+				padding: 0 vw(20);
+				box-sizing: border-box;
+				@include flex-x();
+			}
+		}
+
+		.batch-box {
+			width: vw(300);
+			background: #fff;
+			border-radius: vw(10);
+			@include flex-y(flex-start);
+
+			.title {
+				height: vw(65);
+				@include flex-x(center);
+			}
+
+			.batch-item {
+				padding: 0 vw(20);
+				margin: vw(10) 0;
+				@include word-vw(15, #333);
+				@include flex-x();
+
+				.input {
+					width: vw(200);
+					height: vw(50);
+					background: #EFEFEF;
+					border-radius: vw(5);
+					text-align: center;
+				}
+			}
+
+			.btn {
+				width: vw(200);
+				height: vw(50);
+				background: $btn-color;
+				border-radius: vw(25);
+				margin: vw(20) 0;
+				@include flex-x(center);
+				@include word-vw(16, #fff);
+			}
+		}
+	}
+</style>

+ 253 - 0
src/packages/goods/category.vue

@@ -0,0 +1,253 @@
+<template>
+	<view class="category-box">
+		<Navbar title="全部分类" :showBack="false" background-color="transparent" color="#333"></Navbar>
+		<view class="container">
+			<view class="top-search" @click="toPage('/packages/goods/search')">
+				<IconText :code="`\ue841`" color="#C4C4C4" size="14" style="margin-right: 5px;"></IconText>
+				请输入商品名称进行搜索
+			</view>
+			<view class="bottom-category">
+				<view class="left">
+					<view class="item" @click="handleFirst(item)" :class="{active: firstActive === item.id}"
+						v-for="item in categoryList" :key="item.id">
+						<view class="bar" v-if="firstActive === item.id"></view>
+						{{item.name}}
+					</view>
+				</view>
+				<view class="right">
+					<view class="first-name">
+						{{nameMap[firstActive] || ''}}
+					</view>
+					<view class="second-box">
+						<view class="item" v-for="item in secondList" :key="item.id" @click="toSearch(item)">
+							<image class="img" :src="item.pic" mode="aspectFill"></image>
+							<text>{{item.name}}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- <TabBar></TabBar> -->
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Mixins
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	import {
+		types
+	} from '@/common/store/index';
+	const baseModule = namespace('base');
+	import loginMixin from '@/common/mixins/loginMixin.ts';
+	@Component({})
+	export default class Category extends Mixins(loginMixin) {
+		@baseModule.Mutation(types.SET_TABBARINDEX) setTabBarIndex: any;
+		categoryList: any = [];
+		firstActive: any = null;
+		categoryObj: any = {};
+		secondList: any = [];
+		nameMap: any = {};
+		staticUrl: string = this.$oss_url; //oss地址
+		shareInfo: any = {};
+		async onShow() {
+			this.$nextTick(function() {
+				uni.hideTabBar();
+			});
+			this.setTabBarIndex(1);
+			this.getShareInfo();
+			await this.getCategoryList();
+			if (uni.getStorageSync('categoryId')) {
+				this.handleFirst({
+					id: +uni.getStorageSync('categoryId')
+				});
+				uni.setStorageSync('categoryId', '');
+			}
+		}
+		onShareAppMessage() {
+			return {
+				title: '花源溪',
+				path: '/pages/front/front?s=1&uid=' + this._userInfo.uid,
+				imageUrl: this.shareInfo.pic
+			};
+		}
+		//获取商品分类
+		getCategoryList() {
+			// uni.showLoading({
+			// 	title: '加载中',
+			// });
+			return this.$http
+				.get({
+					url: this.$api.getCategoryList
+				})
+				.then((res: any) => {
+					// this.categoryList = [...res.list, ...res.list];
+					this.categoryList = res.list;
+					// this.categoryList.unshift({
+					// 	id: 0,
+					// 	name: '全部商品',
+					// 	second: [{
+					// 		id: 0,
+					// 		name: '全部商品',
+					// 		pic: this.staticUrl ? this.staticUrl + 'all-goods.png' : ''
+					// 	}]
+					// });
+					let obj: any = {},
+						nameMap: any = {};
+					res.list.forEach((item: any) => {
+						obj[item.id] = item.second;
+						nameMap[item.id] = item.name;
+					})
+					this.nameMap = nameMap;
+					this.categoryObj = obj;
+					this.handleFirst(res.list[0]);
+					// uni.hideLoading();
+				}, (err: any) => {
+					console.log(err);
+					// uni.hideLoading();
+				});
+		}
+		getShareInfo() {
+			this.$http
+				.get({
+					url: this.$api.getShareInfo
+				})
+				.then((res: any) => {
+					this.shareInfo = res.info;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+		handleFirst(item: any) {
+			this.firstActive = item.id;
+			this.secondList = this.categoryObj[item.id];
+		}
+		toSearch(item: any) {
+			uni.setStorageSync('categoryId', item.fid);
+			this.$Router.push({
+				path: '/packages/goods/search',
+				query: {
+					name: item.name,
+					id: item.id
+				}
+			})
+		}
+		toPage(path: any) {
+			this.$Router.push({
+				path: path
+			})
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.category-box {
+		height: 100vh;
+		background: #fff;
+		@include flex-y();
+
+		.container {
+			width: 100%;
+			@include flex-y();
+			flex: 1;
+			// padding-bottom: vw(64);
+			box-sizing: border-box;
+			overflow: hidden;
+
+			.top-search {
+				width: vw(335);
+				height: vw(32);
+				background: #F6F6F6;
+				border-radius: vw(16);
+				@include flex-x(flex-start);
+				@include word-vw(14, #999);
+				padding: 0 vw(12);
+				box-sizing: border-box;
+				margin-top: vw(3);
+			}
+
+			.bottom-category {
+				flex: 1;
+				width: 100%;
+				@include flex-x(flex-start);
+				padding-top: vw(20);
+				box-sizing: border-box;
+				overflow: hidden;
+
+				.left {
+					width: vw(88);
+					height: 100%;
+					overflow-y: auto;
+					flex-shrink: 0;
+					background: #F6F6F6;
+
+					/deep/ ::-webkit-scrollbar {
+						/* 隐藏滚动条,但依旧具备可以滚动的功能 */
+						display: none
+					}
+
+					.item {
+						background: #F6F6F6;
+						height: vw(50);
+						width: 100%;
+						@include flex-x(center);
+						@include word-vw(13, #333);
+						position: relative;
+
+						&.active {
+							background: #fff;
+							color: $btn-color;
+						}
+
+						.bar {
+							width: vw(4);
+							height: vw(24);
+							background: $btn-color;
+							position: absolute;
+							left: 0;
+						}
+					}
+				}
+
+				.right {
+					flex: 1;
+					height: 100%;
+					padding: 0 vw(15);
+					overflow-y: auto;
+					box-sizing: border-box;
+
+					.first-name {
+						height: vw(36);
+						line-height: vw(36);
+						@include word-vw(14, #333);
+					}
+
+					.second-box {
+						@include flex-x(flex-start);
+						margin-top: vw(12);
+						flex-wrap: wrap;
+
+						.item {
+							@include flex-y();
+							@include word-vw(12, #333);
+							width: 1/3 * 100%;
+							margin-bottom: vw(10);
+
+							.img {
+								width: vw(72);
+								height: vw(72);
+								margin-bottom: vw(10);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 753 - 0
src/packages/goods/good-detail.vue

@@ -0,0 +1,753 @@
+<template>
+	<view class="content-styl">
+		<Navbar title="商品详情" color="#333" :showBack="!isShare" :showHome="isShare"></Navbar>
+		<!-- banner图 -->
+		<view class="banner-styl">
+			<SwiperBanner :autoPlay="false" @changeIndex="changeIndex" :bannerDetail="spuInfo.slideshow" bannerH="375"
+				:indicatorDot="false"></SwiperBanner>
+		</view>
+		<view class="goods-module">
+			<!-- <view class="price-box">
+				<view class="left">
+					<view class="price"><text>¥</text>{{spuInfo.minPrice | moneyFormat}}</view>
+					<view class="pre-price">¥{{spuInfo.linePrice | moneyFormat}}</view>
+				</view>
+				<view class="right">
+					<view class="member">{{swiperIndex}} / {{spuInfo.slideshow ? spuInfo.slideshow.length : 0}}</view>
+				</view>
+			</view> -->
+			<view class="goods-detail">
+				<view class="goods-name">
+					<!-- <text>{{spuInfo.partition}}</text> -->
+					<text class="type" :style="{background: goodsInfo.shopId > 0 ? '#FF6803' : '#FF6803'}">
+						<!-- 商城自营 -->
+						{{goodsInfo.genre === 1 ? '商城自营' : ''}}{{goodsInfo.genre === 2 ? '供应链' : ''}}{{goodsInfo.shopId > 0 ? '入驻商家' : ''}}
+					</text>
+					{{ spuInfo.name }}
+				</view>
+				<view class="goods-title">{{ spuInfo.tagline }}</view>
+			</view>
+			<view class="price-box">
+				<view class="left">
+					<view class="price">
+						¥{{goodsInfo.minPrice | moneyFormat}}
+					</view>
+					<view class="line-price">
+						¥{{goodsInfo.linePrice | moneyFormat}}
+					</view>
+				</view>
+			</view>
+			<view class="goods-sale">
+				<view class="sale-people">
+					<view class="stock-info">
+						<view class="sale-num">月销量{{ spuInfo.sales }}</view>
+						<!-- <view class="sale">总销量: {{ spuInfo.sales }}</view> -->
+						<!-- <view class="stock">当前库存:{{ spuInfo.total_stock }}</view> -->
+						<view class="stock">当前库存: {{goodsInfo.totalStock}}</view>
+						<!-- <view class="fee">快递费:{{ spuInfo.total_stock }}</view> -->
+						<view class="fee" v-if="spuInfo.minFreight">快递费: {{spuInfo.minFreight | moneyFormat}}</view>
+						<view class="fee" v-else>免邮</view>
+					</view>
+					<!-- <view class="invite-people" @click="toShare">
+						<IconText :code="`\ue88c`" class="icon" color="#fff" size="14"></IconText>
+						<text class="btn-title">立即分享</text>
+					</view> -->
+				</view>
+			</view>
+			<view class="reward" v-if="_token">
+				<view class="reward-item">
+					<IconText :code="`\ue899`" color="#FF6803"></IconText>
+					<view class="title">购买奖</view><text>{{goodsInfo.buyAward}} 积分</text>
+				</view>
+				<view class="reward-item">
+					<IconText :code="`\ue87c`" color="#FF6803"></IconText>
+					<view class="title">分享奖</view>
+					<text>{{goodsInfo.shareAward}} 积分</text>
+				</view>
+			</view>
+		</view>
+		<view class="spec-box" @click="chooseSpec('all')">
+			<view class="left">
+				选择
+				<text>请选择商品规格</text>
+			</view>
+			<IconText :code="`\ue84a`" size="12" color='#D4D4D4'></IconText>
+		</view>
+		<view class="goods-desc">
+			<!-- <view class="desc-title">商品描述</view> -->
+			<view class="desc-content">{{ spuInfo.detailDes }}</view>
+			<!-- <view class="desc-img" v-html="goodsInfo.detailContent"></view> -->
+			<u-parse class="desc-img" :content="goodsInfo.detailContent"/>
+			<view class="desc-img">
+				<image class="image-styl" :src="item" mode="widthFix" v-for="(item, index) in spuInfo.detailPic"
+					:key="index"></image>
+			</view>
+		</view>
+		<!-- 底部栏 -->
+		<view class="bottom-bar">
+			<view class="bottom-left">
+				<view class="call-customer btn1" @click="toIndex">
+					<IconText :code="`\ue898`" class="icon" color="#333"></IconText>
+					<view class="title-styl">首页</view>
+				</view>
+				<button class="call-customer btn1" hover-class="none" open-type="contact">
+					<IconText :code="`\ue89a`" class="icon" color="#333"></IconText>
+					<view class="title-styl">客服</view>
+				</button>
+				<view class="cart-styl btn1" @click="toCart">
+					<IconText :code="`\ue899`" class="icon" color="#333"></IconText>
+					<view class="title-styl">购物车</view>
+					<view class="quan-styl">{{cartNum}}</view>
+				</view>
+			</view>
+			<view class="bottom-right" v-if="spuInfo.status === 2">
+				<view class="cart-add disabled" @click="chooseSpec('add')">加入购物车</view>
+				<view class="buy-now disabled" @click="chooseSpec('buy')">立即购买</view>
+			</view>
+			<view class="bottom-right" v-else>
+				<view class="cart-add" @click="chooseSpec('add')">加入购物车</view>
+				<view class="buy-now" @click="chooseSpec('buy')">立即购买</view>
+			</view>
+		</view>
+		<!-- 规格组件 -->
+		<SpecPopup ref="pescEle" :product="goodsPopup" :btnShow="btnShow" :typeName="typeName" @addCart="addCart"
+			@buyNow="buyNow"></SpecPopup>
+		<GoodsShare ref="share" :goodsInfo="goodsInfo"></GoodsShare>
+	</view>
+</template>
+<script lang="ts">
+	import {
+		Component,
+		Mixins
+	} from 'vue-property-decorator';
+	import uParse from '@/components/gaoyia-parse/parse.vue'
+	import {
+		namespace
+	} from 'vuex-class';
+	import {
+		types
+	} from '@/common/store';
+	const baseModule = namespace('base');
+	const canvasModule = namespace('canvas');
+	import canvasMixin from '@/common/mixins/canvasMixin.ts';
+	import loginMixin from '@/common/mixins/loginMixin.ts';
+	@Component({
+		components: {
+			uParse
+		},
+		filters: {
+			moneyFormat(val : any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class GoodDetail extends Mixins(canvasMixin, loginMixin) {
+		@baseModule.Mutation(types.SET_GOODS) setGoods : any;
+		@canvasModule.Mutation(types.SET_CANVASDATA) setCanvasData : any;
+		@baseModule.Getter('_userInfo') userInfo : any;
+		goodsInfo : any = {}; //商品信息
+		spuInfo : any = {
+			slideshow: []
+		}; //商品信息
+		fatherInfo : any = {}; //父组件数据
+		cartNum : number = 0; //购物车中件数
+		roleMap : any = {
+			'-1': '游客',
+			0: '普通用户',
+			1: '体验官',
+			2: '总监',
+			3: '总裁',
+			4: '合伙人',
+			5: '董事',
+			6: '运营中心'
+		}
+		imgInfo : any = {
+			slideshow: []
+		}; // 轮播图和详情图app中不显示,定义新变量减少层级后显示
+		goodsPopup : any = {
+			skuList: [],
+			spuInfo: {},
+		} //规格弹窗专用
+		btnShow : string = ''; //规格组件按钮展示
+		typeName : string = ''; //规格组件按钮展示
+		isFirst : boolean = false;
+		isShare : boolean = false;
+		swiperIndex : any = 1;
+
+
+		onShow() {
+			this._token && this.getCartNum(); //获取购物车数量
+			if (this.$Route.query.scene) {
+				let sceneArr = decodeURIComponent(this.$Route.query.scene).split(',');
+				if (sceneArr[0] === 'isShare') {
+					this.fatherInfo = {
+						uid: sceneArr[1],
+						id: sceneArr[2],
+						// gid: sceneArr[3]
+					};
+					this.isShare = true;
+				} else {
+					this.fatherInfo = this.$Route.query;
+				}
+			} else {
+				this.fatherInfo = this.$Route.query;
+				if (this.$Route.query.isShare === '1') this.isShare = true;
+			}
+			this.getGoodsInfo(); //获取商品信息
+		}
+		async onLoad() {
+			this._token && this.getUserInfo();
+			// @ts-ignore
+			this.$Router.forceGuardEach();
+		}
+		onShareAppMessage() {
+			return {
+				title: this.goodsInfo.name,
+				path: '/packages/goods/good-detail?isShare=1&uid=' + this.userInfo.uid + '&id=' + this.goodsInfo
+					.id + '&gid=' + this.goodsInfo.gid,
+				imageUrl: this.goodsInfo.masterPic
+			};
+		}
+		//methods---------------
+
+		//跳转客服信息
+		toCustomer() {
+			this.$Router.push({
+				path: '/packages/goods/customer'
+			})
+		}
+
+		changeIndex(cur : any) {
+			this.swiperIndex = cur;
+		}
+
+		toShare() {
+			if (this.isAuthorization()) return;
+			let data = {
+				page: 'packages/goods/good-detail',
+				scene: `isShare,${this.userInfo.uid},${this.goodsInfo.id},${this.goodsInfo.gid}`
+			};
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.getQr(data, (url : any) => {
+				this.setCanvasData({
+					type: 'goodQr',
+					data: url
+				});
+				// (this.$refs.share as any).openPop();
+				uni.downloadFile({
+					url: this.userInfo.avatar,
+					complete: (result : any) => {
+						uni.hideLoading();
+						if (result.statusCode === 200) {
+							this.setCanvasData({
+								type: 'avatar',
+								data: result.tempFilePath
+							});
+							(this.$refs.share as any).openPop();
+						}
+					}
+				});
+			});
+		}
+		//获取商品信息
+		async getGoodsInfo() {
+			await this.$http
+				.get({
+					url: this.$api.getGoodsInfo,
+					data: this.fatherInfo
+				})
+				.then((res : any) => {
+					this.goodsInfo = { ...res, ...res.spu };
+					this.spuInfo = res.spu;
+					this.goodsPopup = { ...res, ...res.spu };
+					let info = {
+						...res, ...res.spu
+					};
+					// this.getGoodsShare();
+					uni.downloadFile({
+						url: res.spu.masterPic,
+						complete: (result : any) => {
+							uni.hideLoading();
+							if (result.statusCode === 200) {
+								info.goodImg = result.tempFilePath
+								this.setGoods(info);
+							}
+						}
+					});
+					uni.getImageInfo({
+						src: res.spu.masterPic,
+						success: (result : any) => {
+							info.width = result.width;
+							info.height = result.height;
+							this.setGoods(info);
+						}
+					});
+				})
+				.catch((err : any) => {
+					console.log(err);
+				});
+		}
+		//获取购物车数量
+		getCartNum() {
+			this.$http
+				.get({
+					url: this.$api.getCartNum
+				})
+				.then((res : any) => {
+					// this.cartNum = res.reduce((pre : any, cur : any) => {
+					// 	if (!cur.invalid) {
+					// 		return pre + cur.num;
+					// 	} else {
+					// 		return pre + 0;
+					// 	}
+					// }, 0)
+					// uni.hideLoading();
+					this.cartNum = res.num;
+				})
+				.catch((err : any) => {
+					// uni.hideLoading();
+					console.log(err);
+				});
+		}
+		//子->父 加购物车
+		addCart(e : any) : void {
+			console.log('加入购物车的数据', e);
+			let data = {
+				spuId: this.goodsInfo.id,
+				skuId: e.id,
+				num: e.num,
+			}
+			this.$http.post({
+				url: this.$api.addCarGoods,
+				data: data
+			}).then((res : any) => {
+				// this.addCartGoods(e);
+				this.getCartNum(); //获取购物车数量
+				uni.showToast({
+					title: '加入购物车成功',
+					icon: 'none'
+				});
+				console.log(res);
+			}).catch((err : any) => {
+				console.log(err);
+			})
+		}
+		//子->父 立即购买
+		buyNow(e : any) : void {
+			let sumPrice : string = (+e.price * e.num + 0.001).toFixed(2);
+			e.spuId = this.goodsInfo.id;
+			this.$Router.push({
+				path: '/packages/order/create-order',
+				query: {
+					data: [e],
+					sumPrice: +sumPrice,
+					sumCount: +e.num,
+					genre: this.goodsInfo.genre
+				}
+			})
+		}
+		//打开规格选择窗口
+		chooseSpec(val ?: string) : void {
+			if (this.goodsInfo.status === 2) {
+				uni.showToast({
+					title: "暂未开售",
+					icon: 'none'
+				})
+				return;
+			}
+			//验证是否登录
+			if (this.isAuthorization()) return;
+			// if (!this.verificationLogin("push")) return;
+			//规格组件 按钮全要
+			if (val == 'all') {
+				this.typeName = 'base';
+			} else {
+				//区分点击加购or购买,展示对应按钮
+				this.typeName = 'goodsDetail';
+				this.btnShow = val == 'add' ? 'add' : 'buy';
+			}
+			(this.$refs.pescEle as any).open();
+			console.log('哦豁', this.$refs.pescEle);
+		}
+		//跳转购物车
+		toCart() {
+			this.$Router.pushTab({
+				path: '/pages/cart/cart',
+				query: {}
+			});
+		}
+		toIndex() {
+			this.$Router.pushTab({
+				path: '/pages/front/front',
+				query: {}
+			});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content-styl {
+		box-sizing: border-box;
+		padding-bottom: vw(56);
+		@include flex-y();
+
+		.banner-styl {
+			width: 100%;
+		}
+
+		.goods-module {
+			// padding-top: vw(12);
+			width: 100%;
+			margin-top: vw(-16);
+			// background-color: #ffffff;
+			border-radius: vw(16);
+			position: relative;
+			// overflow: hidden;
+
+			.price-box {
+				@include flex-x();
+				height: vw(30);
+				padding-top: vw(10);
+				padding-left: vw(12);
+				padding-right: vw(20);
+				background: #fff;
+
+				.left {
+					@include flex-x(flex-start);
+
+					.price {
+						@include word-vw(24, #FF6803);
+						// font-weight: 600;
+					}
+
+					.line-price {
+						@include word-vw(14, #999);
+						margin-left: vw(15);
+						text-decoration: line-through;
+					}
+				}
+			}
+
+			.goods-detail {
+				padding: vw(12) vw(20) 0;
+				// border-bottom: 1px solid $grayEF;
+				position: relative;
+				background: #fff;
+				border-top-left-radius: vw(10);
+				border-top-right-radius: vw(10);
+				margin-top: vw(-6);
+				// border-radius: vw(16);
+
+				.goods-name {
+					@include word-vw(16, $gray3);
+					font-weight: bold;
+					line-height: vw(22);
+					vertical-align: middle;
+
+					text {
+						background: #D3325C;
+						@include word-vw(10, $grayF);
+						padding: 0 vw(6);
+						border-radius: vw(2);
+						margin-right: vw(3);
+						position: relative;
+						top: vw(-2);
+					}
+				}
+
+				.goods-title {
+					@include word-vw(12, $gray9);
+					// margin: vw(2) 0 vw(12) 0;
+					background: #fff;
+				}
+
+				.goods-info {
+					@include flex-x();
+					margin-bottom: vw(8);
+
+					.goods-price {
+						@include flex-x(flex-start);
+
+						.true-price {
+							@include word-vw(20, #000000);
+							font-weight: bold;
+						}
+
+						.false-price {
+							margin-left: vw(6);
+							@include word-vw(12, $gray9);
+							text-decoration: line-through;
+						}
+					}
+
+					.stock-num {
+						@include word-vw(12, $gray9);
+					}
+				}
+			}
+
+			.goods-sale {
+				// padding: 0 vw(13);
+				height: vw(50);
+				@include flex-x(center);
+				box-sizing: border-box;
+				// margin: vw(10) 0;
+
+				.sale-num {
+					@include word-vw(12, $gray3);
+					// margin: vw(10) 0 vw(6) vw(-8);
+					padding: 0 vw(10);
+					height: vw(22);
+					line-height: vw(22);
+					border-radius: vw(4);
+					background: #ECECEC;
+				}
+
+				.sale-people {
+					@include flex-x();
+					width: 100%;
+					height: 100%;
+					padding: 0 vw(13);
+					background: #fff;
+					box-sizing: border-box;
+
+					.stock-info {
+						box-sizing: border-box;
+						@include flex-x(space-between);
+						border-radius: vw(10);
+						background: #fff;
+						flex: 1;
+						margin-right: vw(18);
+
+						.sale {
+							// height: vw(30);
+							// @include flex-x(center);
+							// @include word-vw(12, #333);
+							// background: #ECECEC;
+							// border-radius: vw(4);
+							@include word-vw(12, #333);
+						}
+
+						.stock {
+							@include word-vw(12, #333);
+						}
+
+						.fee {
+							@include word-vw(12, #999);
+						}
+					}
+
+					.invite-people {
+						@include flex-x(center);
+						@include solid-btn(86, 30, #ffffff, 15);
+						background-color: $bk-color;
+
+						.btn-title {
+							@include word-vw(12, #fff);
+							margin-left: vw(5);
+						}
+					}
+				}
+			}
+
+			.spec-module {
+				@include flex-x();
+				padding: vw(15);
+
+				.spec-left {
+					@include flex-x();
+
+					.spec-title {
+						@include word-vw(14, $gray3);
+					}
+
+					.spec-choose {
+						@include word-vw(14, $gray9);
+						margin-left: vw(20);
+					}
+				}
+
+				.icon1 {
+					@include icon(16);
+				}
+			}
+		}
+
+		.reward {
+			padding: 0 vw(12);
+			border-top: vw(1) solid #F6F6F6;
+			background: #fff;
+			@include flex-x(flex-start);
+			height: vw(44);
+			border-bottom-left-radius: vw(10);
+			border-bottom-right-radius: vw(10);
+
+			&.reward2 {
+				height: vw(80);
+				@include flex-y(center, flex-start);
+			}
+
+			.reward-item {
+				@include flex-x(flex-start);
+				margin: vw(3) 0;
+				flex: 1;
+			}
+
+			.title {
+				width: vw(60);
+				height: vw(26);
+				border-radius: vw(5);
+				// background: #333;
+				@include word-vw(14, #333);
+				@include flex-x(center);
+				margin-right: vw(6);
+			}
+
+			text {
+				@include word-vw(14, #333);
+				// margin-right: vw(24);
+				// font-weight: 600;
+			}
+		}
+
+		.spec-box {
+			width: 100%;
+			height: vw(50);
+			margin-bottom: vw(10);
+			background: #fff;
+			@include flex-x();
+			padding: 0 vw(12);
+			box-sizing: border-box;
+			margin-top: vw(10);
+
+			.left {
+				@include word-vw(14, #999);
+
+				text {
+					@include word-vw(14, #333);
+					margin-left: vw(20);
+				}
+			}
+		}
+
+		.goods-desc {
+			width: 100%;
+			// margin-top: vw(-16);
+			background-color: #fff;
+			overflow: hidden;
+
+			.desc-title {
+				margin: vw(20) 0 vw(10) vw(20);
+				font-weight: bold;
+			}
+
+			.desc-content {
+				padding: vw(18) vw(20);
+				@include word-vw(12, #999);
+			}
+
+			.desc-img {
+				font-size: 0;
+
+				.image-styl {
+					width: 100%;
+				}
+			}
+		}
+
+		.bottom-bar {
+			@include fixed-bottom(50);
+			@include flex-x();
+			box-sizing: border-box;
+			// padding: 0 vw(16) 0 vw(18);
+			background: #fff;
+
+			.bottom-left {
+				@include flex-x();
+				flex: 1;
+				padding: 0 vw(12);
+
+				.call-customer {
+					@include flex-y(space-between);
+					height: vw(35);
+					padding: 0;
+					margin: 0;
+					border-radius: 0;
+					box-sizing: border-box;
+					background-color: #ffffff;
+					line-height: 1.1;
+
+					.icon2 {
+						@include icon(18);
+						height: vw(18);
+					}
+				}
+
+				button::after {
+					border: none;
+					height: 0;
+					width: 0;
+				}
+
+				.cart-styl {
+					height: vw(35);
+					@include flex-y(space-between);
+					line-height: 1.1;
+					text-align: center;
+					position: relative;
+
+					.icon3 {
+						@include icon(18);
+					}
+
+					.quan-styl {
+						padding: vw(3) vw(6);
+						background-color: #FF6803;
+						border-radius: vw(22);
+						@include word-vw(10, #ffffff);
+						position: absolute;
+						top: vw(-8);
+						right: vw(-5);
+					}
+				}
+
+				.title-styl {
+					@include word-vw(10, $gray9);
+				}
+			}
+
+			.bottom-right {
+				@include flex-x();
+
+				.cart-add {
+					@include wh(125, 50);
+					background-color: #000000;
+					@include word-vw(14, #ffffff);
+					// border-top-left-radius: vw(22);
+					// border-bottom-left-radius: vw(22);
+					text-align: center;
+					@include flex-x(center);
+					// line-height: vw(35);
+				}
+
+				.buy-now {
+					@include wh(125, 50);
+					background-color: #FF6803;
+					@include word-vw(14, #fff);
+					// border-top-right-radius: vw(22);
+					// border-bottom-right-radius: vw(22);
+					text-align: center;
+					@include flex-x(center);
+					// line-height: vw(35);
+				}
+
+				.disabled {
+					background: #BFBFBF;
+				}
+			}
+		}
+	}
+</style>

+ 252 - 0
src/packages/goods/goods-examine.vue

@@ -0,0 +1,252 @@
+<template>
+	<view class="record-box">
+		<Navbar title="商品审核" background-color="#fff" color="#333"></NavBar>
+		<view class="container">
+			<view class="noData" v-if="!list.length && !isLoading">
+				<NoData :show="!list.length" topNum="10"></NoData>
+			</view>
+			<view class="list" v-else>
+				<view class="item-box" v-for="item in list" :key="item.id" @click="toDetail(item)">
+					<view class="item">
+						<view class="pic-box">
+							<image class="pic" :src="item.masterPic" mode=""></image>
+							<view class="modal" v-if="item.auditStatus === 2">已驳回</view>
+						</view>
+						<view class="name">{{item.name}}</view>
+						<view class="price-box">
+							<view>¥<text>{{item.minPrice | moneyFormat}}</text></view>
+							<view>库存:<text>{{item.totalStock}}</text></view>
+						</view>
+					</view>
+				</view>
+				<view class="data-tips">
+					<text v-if="final">没有更多了</text>
+					<text v-else>加载更多</text>
+				</view>
+			</view>
+			<view class="add-box" @click="toAdd">
+				<IconText :code="`\ue711`" size="36" color="#F75E24" class="icon"></IconText>
+				添加商品
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue
+	} from 'vue-property-decorator';
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class GoodsExamine extends Vue {
+		img: string = this.$oss_url + 'zwdd.png';
+		isLoading: boolean = false;
+		list: any[] = [];
+		isLoad: boolean = false;
+		final: boolean = false;
+		current: number = 1;
+		size: number = 20;
+
+		onShow() {
+			this.list = [];
+			this.current = 1;
+			this.final = false;
+			this.getList();
+		}
+
+		onReachBottom() {
+			if (this.final) return;
+			this.current++;
+			this.getList();
+		}
+
+		getList() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.isLoading = true;
+			return this.$http.get({
+				url: this.$api.getAuditGoodsList,
+				data: {
+					classify: 1,
+					page: this.current,
+					size: this.size
+				}
+			}).then((res: any) => {
+				this.list = [...this.list, ...res.list];
+				this.isLoading = false;
+				if (!res.list || (res.list.length < this.size)) {
+					this.final = true;
+				}
+				uni.hideLoading();
+			}).catch((err: any) => {
+				console.log(err)
+				uni.hideLoading();
+				this.isLoading = false;
+			})
+		}
+
+		toAdd() {
+			this.$Router.push({
+				path: "/packages/goods/add-good"
+			})
+		}
+
+		toDetail(item: any) {
+			if (item.auditStatus !== 2) return;
+			this.$Router.push({
+				path: '/packages/goods/add-good',
+				query: {
+					gid: item.gid,
+					id: item.id
+				}
+			})
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.record-box {
+		min-height: 100%;
+		@include flex-y();
+		background: #F6F6F6;
+		padding-bottom: vw(30);
+
+		.container {
+			flex: 1;
+			width: 100%;
+			box-sizing: border-box;
+			overflow-y: auto;
+
+			.top {
+				@include flex-x();
+				background: #fff;
+				position: fixed;
+				width: 100%;
+				z-index: 20;
+				height: vw(55);
+				padding: 0 vw(18);
+				box-sizing: border-box;
+				margin-top: vw(1);
+			}
+
+			.noData {
+				padding-top: vw(55);
+			}
+
+			.status {
+				/* padding-right: vw(18); */
+				@include word-vw(14, #666);
+				@include flex-x(flex-start);
+
+				.icon {
+					margin-left: vw(6);
+				}
+			}
+
+			.list {
+				box-sizing: border-box;
+				margin-top: vw(10);
+				@include flex-x(flex-start);
+				flex-wrap: wrap;
+				padding: 0 vw(5);
+
+				.item-box {
+					width: 1 / 3 * 100%;
+					@include flex-y(center);
+				}
+
+				.item {
+					width: vw(112);
+					/* height: vw(170); */
+					background: #fff;
+					@include flex-y();
+					margin-top: vw(10);
+					border-radius: vw(4);
+
+					.pic-box {
+						width: vw(112);
+						height: vw(112);
+						flex-shrink: 0;
+						position: relative;
+
+						.modal {
+							position: absolute;
+							top: 0;
+							right: 0;
+							bottom: 0;
+							left: 0;
+							@include flex-x(center);
+							background: rgba(255, 47, 0, 0.5);
+							@include word-vw(15, #fff);
+						}
+					}
+
+					.pic {
+						width: vw(112);
+						height: vw(112);
+						flex-shrink: 0;
+					}
+
+					.name {
+						width: 100%;
+						@include word-vw(12, #333);
+						font-weight: bold;
+						padding: vw(6) vw(5) 0;
+						/* box-sizing: border-box; */
+						height: vw(32);
+						@include multi(2);
+					}
+
+					.price-box {
+						width: 100%;
+						@include flex-x();
+						padding: vw(3) vw(5) vw(3);
+						box-sizing: border-box;
+
+						view {
+							@include word-vw(10, #333);
+
+							text {
+								color: #FF4F50;
+							}
+						}
+					}
+				}
+			}
+
+			.add-box {
+				position: fixed;
+				bottom: vw(12);
+				right: vw(12);
+				width: vw(120);
+				height: vw(48);
+				@include flex-x(flex-start);
+				background: #fff;
+				box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.1);
+				border-radius: vw(24);
+				@include word-vw(14, $gray3);
+				padding-left: vw(7);
+				box-sizing: border-box;
+
+				.icon {
+					margin-right: vw(5);
+				}
+			}
+		}
+
+		.data-tips {
+			width: 100%;
+			text-align: center;
+			@include word-vw(12, $gray9);
+			margin-top: 10px;
+		}
+	}
+</style>

+ 501 - 0
src/packages/goods/goods-manage.vue

@@ -0,0 +1,501 @@
+<template>
+	<view class="business-detail-box">
+		<Navbar navType='customLeft' title=' ' :leftWidth='500' color="#666">
+			<view class="nav-left">
+				<view class="tabs">
+					<view class="tab" v-for="(item, index) in tab" :key="index" :class="{active: type === item.type}"
+						@click="changeTab(item.type)">{{item.name}}</view>
+				</view>
+			</view>
+		</Navbar>
+		<view class="content">
+			<view class="top"></view>
+			<view class="good-box">
+				<view class="left">
+					<view class="category-box">
+						<view class="category-item" v-for="item in categoryList" :key="item.id"
+							:class="{active: categoryId === item.id}" @click="changeCategory(item)">
+							{{item.name}}
+							<view class="bar"></view>
+						</view>
+					</view>
+				</view>
+				<view class="right">
+					<view class="list">
+						<view class="list-item" v-for="item in secCategoryList" :key="item.id" v-if="goodsObj[item.name]">
+							<view class="name">{{item.name}}</view>
+							<view class="goods">
+								<view class="good" :class="{active: good.id === id}" v-for="good in goodsObj[item.name]" @click="handleEditModal(good)">
+									<image class="pic" :src="good.masterPic" mode=""></image>
+									<view class="good-right">
+										<view class="name">{{good.name}}</view>
+										<view class="bottom">
+											<view>¥:<text>{{good.minPrice | moneyFormat}}</text></view>
+											<view>库存:<text>{{good.totalStock}}</text></view>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<uni-popup ref="editPopup" type="bottom" :safe-area="false" @change="changePopup">
+			<view class="options">
+				<view class="option" @click="toDetail">
+					<IconText :code="`\ue88e`" color="#1D9BF0" class="icon" size="30"></IconText>
+					编辑商品
+				</view>
+				<view class="option" @click="updateStatusModal">
+					<IconText :code="`\ue87e`" color="#FF8D1A" class="icon" size="30"></IconText>
+					{{ type === 3 ? '商品下架' : '商品开售' }}
+				</view>
+				<view class="option" @click="updateTwigModal">
+					<IconText :code="`\ue880`" color="#00BAAD" class="icon" size="30"></IconText>
+					商品排序
+				</view>
+				<view class="option" @click="deleteGoodModal">
+					<IconText :code="`\ue881`" color="#FF4A74" class="icon" size="30"></IconText>
+					删除
+				</view>
+			</view>
+		</uni-popup>
+		<uni-popup ref="updateTwig" type="center" :safe-area="false">
+			<view class="twig-box">
+				<view class="title">商品排序</view>
+				<view class="input-box">
+					<view class="label">排序:</view>
+					<input class="input" type="text" v-model="twig" placeholder=" " />
+				</view>
+				<view class="tip">数值越大,商品越靠前</view>
+				<view class="btn" @click="updateTwig">确认</view>
+			</view>
+		</uni-popup>
+		<ShowModal ref="updateStatus" title="提示" @submit="updateStatus" leftBtnText="取消" :content="`是否确认将该商品移动至“${type === 3 ? '仓库中' : '出售中'}”?`"
+			btnText="确认" />
+		<ShowModal ref="deleteGood" title="提示" @submit="deleteGood" leftBtnText="取消" content="是否确定删除该商品"
+			btnText="确认" />
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	@Component({
+		filters: {
+			juliFormat(val: any) {
+				if (!val) return '0m';
+				if (val < 1000) {
+					return val + 'm'
+				} else {
+					return (val / 1000).toFixed(2) + 'km'
+				};
+			},
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+
+	export default class BusinessDetail extends Vue {
+		id: any = null;
+		gid: any = null;
+		cur: number = 0 // 当前滑块的index
+		type: any = 3;
+		tab: any = [{
+				name: '出售中',
+				type: 3,
+			},
+			{
+				name: '仓库',
+				type: 1,
+			}
+		];
+		categoryList: any = [];
+		categoryId: any = null;
+		secCategoryList: any = [];
+		goodsObj: any = {};
+		twig: any = null;
+
+		onLoad() {
+			uni.setNavigationBarColor({
+				frontColor: '#ffffff', //文字颜色
+				backgroundColor: '#ffffff' //底部背景色
+			});
+			this.getCategoryList();
+		}
+
+		changeTab(type: any) {
+			this.type = type;
+			this.getGoodsList();
+		}
+
+		changeCategory(item: any) {
+			this.categoryId = item.id;
+			this.secCategoryList = item.second;
+			this.getGoodsList();
+		}
+		
+		handleEditModal(good: any){
+			this.id = good.id;
+			this.gid = good.gid;
+			this.twig = good.twig;
+			(this.$refs.editPopup as any).open();
+		}
+		
+		changePopup(e: any){
+			if(e.show === false) this.id = null;
+		}
+
+		getCategoryList() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.get({
+					url: this.$api.getCategoryListB,
+					data: {}
+				})
+				.then((res: any) => {
+					this.categoryList = res.list;
+					if (res.list.length) {
+						this.categoryId = res.list[0].id;
+						this.secCategoryList = res.list[0].second;
+					}
+					uni.hideLoading();
+					this.getGoodsList();
+				}, (err: any) => {
+					uni.hideLoading();
+				});
+		}
+
+		getGoodsList() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.get({
+					url: this.$api.getGoodsListB,
+					data: {
+						status: this.type,
+						firstSortId: this.categoryId,
+						page: 1,
+						size: 999
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					let obj: any = {};
+					res.list.forEach((item: any) => {
+						if (obj[item.secondSortName]) {
+							obj[item.secondSortName].push(item);
+						} else {
+							obj[item.secondSortName] = [item]
+						}
+					});
+					this.goodsObj = obj;
+				}, (err: any) => {
+					uni.hideLoading();
+				});
+		}
+		
+		toDetail(){
+			this.$Router.push({
+				path: '/packages/goods/add-good',
+				query: {
+					gid: this.gid,
+					id: this.id
+				}
+			})
+		}
+		
+		updateStatusModal(){
+			(this.$refs.updateStatus as any).open();
+		}
+		
+		updateStatus(){
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.put({
+					url: this.$api.updateGoodStatus,
+					data: {
+						id: this.id,
+						status: this.type === 3 ? 1 : 3
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					this.getGoodsList();
+				}, (err: any) => {
+					uni.hideLoading();
+				});
+		}
+		
+		updateTwigModal(){
+			(this.$refs.updateTwig as any).open();
+		}
+		
+		updateTwig(){
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.put({
+					url: this.$api.updateGoodTwig,
+					data: {
+						id: this.id,
+						twig: +this.twig
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					this.getGoodsList();
+					(this.$refs.updateTwig as any).close();
+				}, (err: any) => {
+					uni.hideLoading();
+				});
+		}
+		
+		deleteGoodModal(){
+			(this.$refs.deleteGood as any).open();
+		}
+		
+		deleteGood(){
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.delete({
+					url: this.$api.deleteGoodB,
+					data: {
+						gid: this.gid
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					this.getGoodsList();
+				}, (err: any) => {
+					uni.hideLoading();
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.business-detail-box {
+		height: 100vh;
+		@include flex-y(flex-start);
+
+		.top {
+			width: 100%;
+			box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.3);
+		}
+
+		.nav-left {
+			.tabs {
+				@include flex-x(flex-start);
+
+				.tab {
+					@include word-vw(20, #999);
+					font-weight: bold;
+					@include flex-x(flex-start);
+					padding: 0 vw(10);
+
+					&.active {
+						color: #333;
+					}
+				}
+			}
+		}
+
+		.content {
+			width: 100%;
+			flex: 1;
+
+			.good-box {
+				width: 100%;
+				height: 100%;
+				@include flex-x();
+
+				.left {
+					width: vw(80);
+					height: 100%;
+					background: #fff;
+					flex-shrink: 0;
+
+					.category-box {
+						.category-item {
+							height: vw(40);
+							@include flex-x(center);
+							@include word-vw(15, #999);
+							position: relative;
+
+							&.active {
+								background: #F8F8F8;
+								@include word-vw(15, #333);
+
+								.bar {
+									width: vw(4);
+									height: 100%;
+									background: #F75E24;
+									position: absolute;
+									left: 0;
+									top: 0;
+								}
+							}
+						}
+					}
+				}
+
+				.right {
+					flex: 1;
+					height: 100%;
+					background: #F7F7F7;
+					@include flex-y(flex-start);
+
+					.list {
+						width: 100%;
+						padding: vw(3) vw(15) 0;
+						@include flex-y(flex-start);
+						box-sizing: border-box;
+
+						.list-item {
+							width: 100%;
+							margin-top: vw(12);
+
+							.name {
+								line-height: vw(25);
+								height: vw(25);
+								@include word-vw(12, #333);
+								@include flex-x(flex-start);
+							}
+
+							.goods {
+								width: 100%;
+								margin-top: vw(3);
+
+								.good {
+									width: 100%;
+									background: #fff;
+									border-radius: vw(5);
+									@include flex-x();
+									padding: vw(8);
+									box-sizing: border-box;
+									border: vw(1) solid #fff;
+									margin-bottom: vw(10);
+									&.active{
+										border-color: $btn-color;
+									}
+
+									.pic {
+										width: vw(60);
+										height: vw(60);
+										margin-right: vw(5);
+										flex-shrink: 0;
+									}
+
+									.good-right {
+										flex: 1;
+										padding: vw(1) 0;
+										height: vw(60);
+										box-sizing: border-box;
+										@include flex-y(space-between, flex-start);
+
+										.name {
+											@include word-vw(12, #333);
+											font-weight: 550;
+										}
+
+										.bottom {
+											@include word-vw(10, #333);
+											@include flex-x(flex-start);
+
+											view {
+												margin-right: vw(15);
+
+												text {
+													color: #FF4F50;
+												}
+											}
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		
+		.twig-box{
+			width: vw(300);
+			background: #fff;
+			border-radius: vw(10);
+			padding: 0 vw(20);
+			box-sizing: border-box;
+			padding-bottom: vw(20);
+			.title{
+				height: vw(75);
+				@include flex-x(center);
+				@include word-vw(18, #333);
+			}
+			.input-box{
+				@include flex-x();
+				height: vw(45);
+				margin-top: vw(25);
+				.label{
+					width: vw(60);
+				}
+				.input{
+					flex: 1;
+					height: vw(45);
+					border-radius: vw(5);
+					background: #EFEFEF;
+					padding: 0 vw(16);
+				}
+			}
+			.tip{
+				padding-left: vw(60);
+				margin-top: vw(8);
+				@include word-vw(15, #999);
+			}
+			.btn{
+				width: vw(200);
+				height: vw(50);
+				border-radius: vw(25);
+				background: $btn-color;
+				@include word-vw(16, #fff);
+				margin: vw(30) auto 0;
+				@include flex-x(center);
+			}
+		}
+		
+		.options{
+			@include flex-x();
+			background: #fff;
+			flex-wrap: wrap;
+			padding: vw(20) vw(20);
+			border-top-left-radius: vw(10);
+			border-top-right-radius: vw(10);
+			.option{
+				width: vw(105);
+				height: vw(105);
+				border-radius: vw(10);
+				box-shadow: 0px 1px 7px 2px rgba(0, 0, 0, 0.05);
+				margin-bottom: vw(10);
+				@include flex-y(center);
+				@include word-vw(12, #333);
+				.icon{
+					margin-bottom: vw(12);
+				}
+			}
+		}
+	}
+</style>

+ 469 - 0
src/packages/goods/search.vue

@@ -0,0 +1,469 @@
+<template>
+	<view class='content'>
+		<Navbar :title='title'></Navbar>
+		<!-- 筛选框 -->
+		<view class="search-styl">
+			<!-- <SearchBox typeFlag="searchPage" :searchTitle="searchContent" @inputSearch="searchGoods"
+				@cancelEvent="cancelEvent"></SearchBox> -->
+			<view class="search-box">
+				<view class="search-left">
+					<text class="icon1">&#xe89f;</text>
+					<input type="text" class="input-styl" placeholder-class="placeholder" confirm-type="search"
+						v-model="searchContent" @confirm="searchGoods" @focus="focus = true" placeholder="搜索商品名称" />
+					<text class="icon1" v-if="searchContent" @click="deleteContent">&#xe87d;</text>
+				</view>
+				<view class="search-btn" @click="clickCancel" v-if="showHistory">取消</view>
+				<!-- <view class="search-btn" @click="clickCancel">取消</view> -->
+				<view v-else class="search-btn">
+					<IconText :code="`\ue870`" v-if="!sortType || sortType === 1" @click.native="changeType(2)">
+					</IconText>
+					<IconText :code="`\ue8ad`" v-else @click.native="changeType(1)"></IconText>
+				</view>
+			</view>
+		</view>
+		<view class="sort-box" v-if="!showHistory && !focus">
+			<view class="sort-item" :class="{active: rank === 0}" @click="changeRank(0)">
+				综合
+			</view>
+			<view class="sort-item" :class="{active: rank === 1}" @click="changeRank(1)">
+				销量
+			</view>
+			<view class="sort-item" :class="{active: rank === 2 || rank === 3}" @click="changeRank('price')">
+				价格
+				<view class="sj">
+					<view class="ssj" :class="{active: rank === 2}"></view>
+					<view class="xsj" :class="{active: rank === 3}"></view>
+				</view>
+			</view>
+		</view>
+		<view class="search-history" v-if="showHistory || focus">
+			<view class="search-title">
+				搜索历史
+				<IconText :code="`\ue8a1`" size="14" color="#999" @click.native="emptyHistory"></IconText>
+			</view>
+			<view class="search-content">
+				<view class="search-font" v-for="(item,index) in searchHistory" :key="index"
+					@longpress="pressItem(index)" @click="clickItem(item)">
+					{{item}}
+					<view class="delete" @click.stop="deleteHistory(item)" v-if="deleteIndex === index">
+						<IconText :code="`\ue87d`" color="#999"></IconText>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="goods-module" :class="{'goods-module2': sortType === 2}" v-else>
+			<!-- <view class="total">搜到个<text>{{total}}</text>商品</view> -->
+			<GoodItem v-for="(item, index) in goodsList" :item="item" :sortType="sortType" :key="index"></GoodItem>
+			<view class="no-data" v-if="!goodsList.length">
+				<NoData :show="!goodsList.length" topNum="10" title="没有搜到商品!" imgUrl="no-data.png"></NoData>
+			</view>
+		</view>
+
+		<!-- 空数据组件 -->
+		<!-- <NoData :show="nodataShow" v-if="!showHistory" imgUrl='search.png'></NoData> -->
+		<!-- 规格组件 -->
+		<!-- <SpecPopup ref="pescEle" @addCart="addCart" :product="goodsPopup" typeName="goodsDetail"></SpecPopup> -->
+	</view>
+</template>
+<script lang='ts'>
+	import {
+		Component,
+		// Prop,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	import {
+		types
+	} from '@/common/store';
+	const baseModule = namespace('base');
+	@Component({})
+
+	export default class Name extends Vue {
+		@baseModule.Getter('_searchHistory') searchHistory: any;
+		@baseModule.Mutation(types.SET_SEARCHHISTORY) setSearchHistory: any;
+		@baseModule.Mutation(types.EMPTY_SEARCHHISTORY) emptySearchHistory: any;
+		@baseModule.Mutation(types.DELETE_SEARCHHISTORY) deleteSearchHistory: any;
+		// @baseModule.Mutation(types.ADD_CARTGOODS) addCartGoods: any;
+		// data------------------------
+		goodsList: Array < any > = []; //商品列表
+		searchContent: string = ''; //搜索内容
+		showHistory: boolean = true; //历史搜索数据展示
+		nodataShow: boolean = false; //空数据展示
+		total: number = 0;
+		deleteIndex: any = null;
+		title: any = '商品搜索';
+		partition: any = '';
+		categoryId: any = null;
+		finish: boolean = false;
+		loading: boolean = false;
+		current: number = 1;
+		size: number = 20;
+		name: any = '';
+		iconShow: boolean = false;
+		sortType: number = 1;
+		rank: any = 0;
+		focus: boolean = false;
+		goodsPopup = {
+			skuList: [],
+			spu_info: {},
+		} //规格弹窗专用
+		onLoad() {
+			// this.searchGoods({
+			// 	detail: {
+			// 		value: ''
+			// 	}
+			// });
+			let query = this.$Route.query;
+			if (query.id) {
+				this.title = query.name;
+				if(query.partition) this.title = query.partition;
+				this.categoryId = +query.id;
+				this.partition = query.partition;
+				this.searchGoods({
+					detail: {
+						value: ''
+					}
+				});
+			}
+		}
+		onReachBottom() {
+			if (this.finish || this.loading) return;
+			this.current++;
+			this.getGoodsList('', 'load');
+		}
+		onPullDownRefresh() {
+			console.log('下拉');
+			this.finish = false;
+			this.getGoodsList('', 'pull').then(() => {
+				uni.stopPullDownRefresh();
+			}, () => {
+				uni.stopPullDownRefresh();
+			});
+		}
+		//methods----------------------
+		changeType(type: any) {
+			this.sortType = type;
+		}
+		clickCancel() {
+			this.$Router.back(1);
+		}
+		deleteContent() {
+			this.searchContent = '';
+			// this.showHistory = true;
+			this.goodsList = [];
+			this.current = 1;
+			this.finish = false;
+			this.deleteIndex = null;
+			this.getGoodsList('');
+		}
+		// 加入购物车
+		addCart(e: any): void {
+			console.log('加入购物车的数据', e);
+			let data = {
+				spu_id: e.spu_id,
+				sku_id: e.sku_id,
+				num: e.num,
+			}
+			this.$http.post({
+				url: this.$api.addCarGoods,
+				data: data
+			}).then((res: any) => {
+				uni.showToast({
+					title: '加入购物车成功',
+					icon: 'none'
+				});
+				// this.addCartGoods(e);
+			}).catch((err: any) => {
+				console.log(err);
+			})
+		}
+		//获取商品列表
+		getGoodsList(val ? : string, isLoad ? : any) {
+			console.log(val);
+			this.loading = true;
+			if (val) this.name = val;
+			if (isLoad === 'load' || isLoad == 'pull') val = this.name || '';
+			// return
+			let data: object = {
+				name: val,
+				status: '3',
+				secondSortId: this.categoryId || 0,
+				page: this.current,
+				size: this.size,
+				partition: this.partition || '',
+				rank: this.rank
+			}
+			uni.showLoading({
+				title: '加载中',
+			});
+			return this.$http.get({
+				url: this.$api.getGoodsList,
+				data: data
+			}).then((res: any) => {
+				if (isLoad === 'pull') {
+					this.goodsList = res.list;
+				} else {
+					this.goodsList = [...this.goodsList, ...res.list];
+				}
+				this.nodataShow = !this.goodsList.length;
+				this.total = res.total;
+				if (res.list.length < this.size) this.finish = true;
+				this.loading = false;
+				this.focus = false;
+				uni.hideLoading();
+			}).catch((err: any) => {
+				console.log(err);
+				this.loading = false;
+				uni.hideLoading();
+			})
+		}
+		//子->父 点击商品
+		clickRecGoods(e: any): void {
+			this.$Router.push({
+				path: '/pages/front/goods-detail',
+				query: {
+					id: e.id,
+					steady_id: e.steady_id
+				}
+			});
+		}
+		//子->父 点击商品推荐+号
+		clickAdd(val: any): void {
+			this.goodsPopup.skuList = val.skus;
+			this.goodsPopup.spu_info = val;
+			(this.$refs.pescEle as any).open();
+		}
+		//搜索商品内容
+		searchGoods(e: any) {
+			let value = e.detail.value;
+			this.goodsList = [];
+			this.current = 1;
+			this.finish = false;
+			this.deleteIndex = null;
+			this.setSearchHistory(value);
+			this.getGoodsList(value);
+			this.showHistory = false;
+		}
+		emptyHistory() {
+			this.deleteIndex = null;
+			this.emptySearchHistory();
+		}
+		//点击搜索历史
+		clickItem(item: string) {
+			this.searchContent = item;
+			this.searchGoods({
+				detail: {
+					value: this.searchContent
+				}
+			});
+		}
+		deleteHistory(item: any) {
+			this.deleteIndex = null;
+			this.deleteSearchHistory(item);
+		}
+		pressItem(index: any) {
+			if (index === this.deleteIndex) {
+				this.deleteIndex = null;
+			} else {
+				this.deleteIndex = index;
+			}
+		}
+		//子->父 点击取消按钮
+		cancelEvent() {
+			this.showHistory = true;
+		}
+
+		changeRank(rank: any) {
+			if (rank === this.rank) return;
+			if (rank === 'price') {
+				if (this.rank === 2) {
+					this.rank = 3;
+				} else if (this.rank === 3) {
+					this.rank = 2;
+				} else {
+					this.rank = 2;
+				}
+			} else {
+				this.rank = rank;
+			}
+			this.goodsList = [];
+			this.current = 1;
+			this.finish = false;
+			this.getGoodsList('', 'load');
+		}
+
+	}
+</script>
+
+<style lang='scss' scoped>
+	.content {
+		width: 100%;
+		min-height: 100vh;
+		@include flex-y();
+		background: #F6F6F6;
+
+		.search-styl {
+			width: 100%;
+			padding-top: vw(6);
+			padding-bottom: vw(8);
+			background-color: #ffffff;
+
+			.search-box {
+				@include flex-x();
+				@include wh(348, 32);
+				margin: 0 auto;
+
+				.search-left {
+					@include flex-x(flex-start);
+					@include wh(310, 32);
+					border-radius: vw(16);
+					background-color: #F6F6F6;
+
+					.icon1 {
+						margin: 0 vw(10);
+						@include icon(14);
+					}
+
+					.input-styl {
+						width: vw(315);
+						font-size: vw(14);
+					}
+
+					.placeholder {
+						color: #999;
+					}
+				}
+
+				.search-btn {
+					/* padding-left: vw(12);
+					margin-right: vw(13); */
+					flex: 1;
+					text-align: center;
+					color: #0241A1;
+					font-size: vw(14);
+				}
+			}
+		}
+
+		.sort-box {
+			height: vw(40);
+			width: 100%;
+			@include flex-x();
+			margin-top: vw(1);
+			background: #fff;
+
+			.sort-item {
+				flex: 1;
+				@include flex-x(center);
+				background: #fff;
+				height: vw(20);
+				@include word-vw(14, #999);
+				border-right: vw(1) solid #F5F5F5;
+
+				&:nth-last-of-type(1) {
+					border-width: 0;
+				}
+
+				.sj {
+					position: relative;
+					@include flex-y(center);
+					margin-left: vw(3);
+				}
+
+				.ssj {
+					border-top: vw(5) solid transparent;
+					border-bottom: vw(5) solid #ccc;
+					border-left: vw(5) solid transparent;
+					border-right: vw(5) solid transparent;
+
+					&.active {
+						border-bottom: vw(5) solid $btn-color;
+					}
+				}
+
+				.xsj {
+					border-top: vw(5) solid #ccc;
+					border-bottom: vw(5) solid transparent;
+					border-left: vw(5) solid transparent;
+					border-right: vw(5) solid transparent;
+					margin-top: vw(3);
+
+					&.active {
+						border-top: vw(5) solid $btn-color;
+					}
+				}
+
+				&.active {
+					color: $btn-color;
+				}
+			}
+		}
+
+		.search-history {
+			width: 100%;
+			flex: 1;
+			box-sizing: border-box;
+			padding: vw(12) vw(23) 0 vw(16);
+			@include word-vw(12, $gray6);
+
+			.search-title {
+				width: 100%;
+				@include flex-x();
+			}
+
+			.search-content {
+				@include flex-x(flex-start);
+				flex-flow: row wrap;
+				margin-top: vw(18);
+
+				.search-font {
+					padding: vw(8) vw(14);
+					margin: 0 vw(10) vw(10) 0;
+					background-color: #ffffff;
+					position: relative;
+				}
+
+				.delete {
+					position: absolute;
+					right: -6px;
+					top: -6px;
+				}
+			}
+		}
+
+		.goods-module {
+			width: 100%;
+			padding: vw(10) vw(10) 0;
+			box-sizing: border-box;
+			/* flex: 1;
+			overflow-y: auto; */
+			@include flex-x(space-between, flex-start);
+			flex-wrap: wrap;
+		
+			&.goods-module2 {
+				@include flex-y();
+				padding: vw(10) 0 0;
+			}
+		
+			.no-data {
+				width: 100%;
+				@include flex-y();
+			}
+		
+			.total {
+				padding: 0 vw(10);
+				margin-top: vw(6);
+				@include word-vw(14, #999);
+				height: vw(30);
+				line-height: vw(30);
+		
+				text {
+					color: #333;
+					padding: 0 vw(3);
+				}
+			}
+		}
+	}
+</style>

+ 376 - 0
src/packages/order/address-detail.vue

@@ -0,0 +1,376 @@
+<template>
+	<view class="container">
+		<Navbar title="地址信息" background-color="#fff" color="#333"></Navbar>
+		<view class="content">
+			<view class="area">
+				<text class="word14">收货地区:</text>
+				<uni-data-picker :localdata="items" placeholder="点击选择" popup-title="请选择地区" v-model="area"
+					class="area-picker" @change="bindPickerChange">
+					<view class="area-picker-box">
+						<text class="word13" v-if="!area.length">点击选择</text>
+						<text class="word13" v-else>{{ area[0] }},{{ area[1] }},{{ area[2] }}</text>
+						<text class="icon">&#xe75e;</text>
+					</view>
+				</uni-data-picker>
+			</view>
+			<view class="detail">
+				<text class="word14">详细地址:</text>
+				<textarea auto-height="true" class="input word13" type="text" v-model="address.address"
+					placeholder="请输入详细地址" />
+			</view>
+			<view class="person">
+				<text class="word14 name">收货人:</text>
+				<view class="name-wrap word12">
+					<input class="input" type="text" v-model="address.name" placeholder="请输入收货人姓名" />
+					<radio-group class="radio-wrap" @change="radioChange">
+						<label class="radio" @click="changeGender(1)">
+							<!-- <radio color="#D3325C" class="checkbox" value="1" :checked="address.gender == 1" /> -->
+							<IconText class="icon" :code="`\ue73f`" v-if="address.gender == 1" size="14" color="#D3325C"></IconText>
+							<IconText class="icon" :code="`\ue738`" size="14" color="#999" v-else></IconText>
+							先生
+						</label>
+						<label class="radio" @click="changeGender(2)">
+							<!-- <radio color="#D3325C" class="checkbox" value="2" :checked="address.gender == 2" /> -->
+							<IconText class="icon" :code="`\ue73f`" v-if="address.gender == 2" size="14" color="#D3325C"></IconText>
+							<IconText class="icon" :code="`\ue738`" size="14" color="#999" v-else></IconText>
+							女士
+						</label>
+					</radio-group>
+				</view>
+			</view>
+			<view class="phone">
+				<text class="word14">手机号:</text>
+				<input class="input word12" type="text" v-model="address.phone" placeholder="请输入收货人手机号码" />
+			</view>
+		</view>
+		<view class="fixed-bottom" @click="saveAddress">
+			<view class="solid-btn">确认</view>
+		</view>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		RegPhone,
+		AREA_OSS
+	} from '@/common/constants';
+	// @ts-ignore
+	// import uniDataPicker from '@/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js';
+	interface AddressType {
+		province: number;
+		city: number;
+		county: number;
+		gender: number;
+		address: string;
+		phone: string;
+		name: string;
+	}
+	@Component({})
+	export default class AddressDetail extends Vue {
+		id: number | string = '';
+		address: AddressType = {
+			province: 0,
+			city: 0,
+			county: 0,
+			gender: 1,
+			address: '',
+			phone: '',
+			name: ''
+		};
+		area: string[] = [];
+		items: any[] = [];
+		loading: boolean = false;
+		onShow() {
+			if (this.$Route.query.id) {
+				this.getDetail();
+			}
+			this.getAllArea();
+		}
+		
+		changeGender(gender: any){
+			this.address.gender = gender;
+		}
+
+		verifyPhone(phone: any): void {
+			let isRight = RegPhone(phone.detail.value);
+			if (!isRight) {
+				uni.showToast({
+					title: '手机号输入有误!',
+					icon: 'none'
+				});
+			}
+		}
+		getAllArea() {
+			this.$http
+				.get({
+					url: AREA_OSS,
+					baseUrl: "",
+				})
+				.then((res: any) => {
+					for (let i in res.province_list) {
+						let province: any = {
+							value: i,
+							text: res.province_list[i],
+							children: []
+						};
+						for (let j in res.city_list) {
+							if (i.slice(0, 2) == j.slice(0, 2)) {
+								let city: any = {
+									value: j,
+									text: res.city_list[j],
+									children: [] as any[]
+								};
+								province.children.push(city);
+								for (let k in res.county_list) {
+									if (k.slice(0, 4) == j.slice(0, 4)) {
+										city.children.push({
+											value: k,
+											text: res.county_list[k]
+										});
+									}
+								}
+							}
+						}
+						this.items.push(province);
+					}
+				})
+		}
+		getDetail() {
+			uni.showLoading({
+				title: '加载中'
+			});
+			this.$http
+				.get({
+					url: this.$api.addressDetail,
+					data: {
+						id: +this.$Route.query.id
+					}
+				})
+				.then((res: any) => {
+					const info: any = res;
+					this.address = {
+						province: +info.province,
+						city: +info.city,
+						county: +info.county,
+						gender: +info.gender,
+						address: info.address,
+						phone: info.phone,
+						name: info.name
+					};
+					this.area = [info.province_str, info.city_str, info.county_str || ''];
+					uni.hideLoading();
+				});
+		}
+		saveAddress(): void | boolean {
+			if (this.loading) return;
+			// 校验
+			console.log(222222, this.address);
+			let msg: string = '';
+			if (!this.area.length) {
+				msg = '请选择省市区!';
+			} else if (this.address.address == '') {
+				msg = '请输入详细地址!';
+			} else if (this.address.name == '') {
+				msg = '请输入收货人!';
+			} else if (this.address.phone == '' || !RegPhone(this.address.phone)) {
+				msg = '请输入正确的手机号码!';
+			}
+			if (!!msg) {
+				uni.showToast({
+					title: msg,
+					icon: 'none'
+				});
+				return false;
+			}
+			let url: string = 'addressAdd';
+			let method: string = 'post';
+			let data: any = {
+				province: +this.address.province,
+				city: +this.address.city,
+				county: +this.address.county,
+				gender: +this.address.gender,
+				address: this.address.address,
+				phone: this.address.phone,
+				name: this.address.name
+			};
+			if (this.$Route.query.id) {
+				url = 'addressEdit';
+				method = 'put';
+				data.id = +this.$Route.query.id;
+			}
+			this.loading = true;
+			this.$http[method]({
+					url: this.$api[url],
+					data: data
+				})
+				.then((res: any) => {
+					uni.showToast({
+						title: '提交成功!',
+						icon: 'none'
+					});
+					this.$Router.back(1);
+					this.loading = false;
+				}, () => {
+					this.loading = false;
+				});
+		}
+		radioChange(val: any): void {
+			this.address.gender = val.detail.value;
+		}
+		bindPickerChange(val: any): void {
+			console.log(1111, val.detail);
+			let area = val.detail.value;
+			this.area = [area[0].text, area[1].text, area[2]?.text || ''];
+			this.address.province = area[0].value;
+			this.address.city = area[1].value;
+			this.address.county = area[2]?.value || '';
+		}
+	}
+</script>
+<style lang="scss">
+	.checkbox .wx-radio-input {
+		&::before {
+			color: #333 !important;
+		}
+	}
+</style>
+<style lang="scss">
+	.word14 {
+		@include word-vw(14);
+	}
+
+	.word13 {
+		@include word-vw(13, $gray9);
+	}
+
+	.word12 {
+		@include word-vw(12, $gray9);
+	}
+
+	@mixin bk-block {
+		width: 100vw;
+		padding: vw(24) vw(15);
+		box-sizing: border-box;
+		background-color: white;
+	}
+
+	.container {
+		width: 100vw;
+		background: #F5F5F5;
+		height: 100vh;
+		@include flex-y();
+
+		.content {
+			flex: 1;
+			width: 100%;
+			overflow-y: auto;
+			margin-top: vw(1);
+		}
+	}
+
+	.area {
+		@include bk-block;
+		border-bottom: 1px solid $line-color;
+		@include flex-x();
+
+		.area-picker {
+			width: vw(250);
+			text-align: right;
+
+			text {
+				text-align: left;
+			}
+
+			.area-picker-box {
+				width: vw(250);
+				@include flex-x();
+			}
+		}
+
+		.input {
+			width: vw(250);
+			text-align: right;
+		}
+
+		.icon {
+			@include icon(12) margin-left: 10px;
+		}
+	}
+
+	.detail {
+		@include bk-block;
+		margin-bottom: 10px;
+		@include flex-x(space-between, flex-start);
+
+		.input {
+			width: vw(250);
+			text-align: left;
+			padding-top: 3px;
+		}
+	}
+
+	.person {
+		@include bk-block;
+		@include flex-x();
+		margin-bottom: 10px;
+
+		.name {
+			align-self: flex-start;
+		}
+
+		.name-wrap {
+			width: vw(250);
+
+			.input {
+				margin-bottom: vw(20);
+			}
+		}
+		
+		.radio-wrap{
+			@include flex-x(flex-start);
+		}
+
+		.radio {
+			margin-right: vw(30);
+			text-align: left;
+			@include flex-x(center);
+
+			radio {
+				transform: scale(0.6);
+			}
+			
+			.icon{
+				margin-right: vw(2);
+			}
+		}
+	}
+
+	.phone {
+		@include bk-block;
+		@include flex-x();
+
+		.input {
+			width: vw(250);
+			text-align: left;
+		}
+	}
+
+	.fixed-bottom {
+		height: vw(60);
+		width: 100%;
+		background: #fff;
+		@include flex-x(center);
+
+		.solid-btn {
+			background: $bk-color;
+			@include solid-btn(345, 48, #333);
+			border-radius: vw(24);
+			@include word-vw(14, #fff);
+		}
+	}
+</style>

+ 278 - 0
src/packages/order/address-manage.vue

@@ -0,0 +1,278 @@
+<template>
+	<view class="container">
+		<Navbar title="收货地址" background-color="#ffffff" color="#333333"></Navbar>
+		<view class="list">
+			<NoData :show="!isLoad && !addressList.length" topNum="10"></NoData>
+			<view v-for="(item, i) in addressList" :key="i" class="address-wrap" @click="selectAddress(item)">
+				<view class="top">
+					<text class="name">{{ item.name }}</text>
+					<text class="phone">{{ item.phone | phoneStatus }}</text>
+				</view>
+				<text class="detail">
+					{{item.province_str + item.city_str + item.county_str}}{{item.address}}
+				</text>
+				<view class="bottom">
+					<view class="default" @click.stop="setDefault(item.id)">
+						<!-- <text :class="{ 'icon-red': item.is_default, 'icon-gray': !item.is_default }">
+							&#xe645;
+						</text> -->
+						<view class="default-icon-box">
+							<IconText class="default-icon" :color="item.isDefault === 1 ? '#D3325C' : '#D4D4D4'"
+								:code="`\ue73f`" size="14"></IconText>
+						</view>
+						<text class="word12">默认地址</text>
+					</view>
+					<view class="edit-wrap">
+						<view @click.stop="editAddress(item.id)">
+							<IconText :code="`\ue758`" size="12" color="#666"></IconText>
+							<text class="word12">编辑</text>
+						</view>
+						<view @click.stop="delAddress(item.id)">
+							<IconText :code="`\ue740`" size="12" color="#666"></IconText>
+							<text class="word12">删除</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="fixed-bottom" @click="createAddress">
+			<view class="solid-btn">+ 添加新地址</view>
+		</view>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	import {
+		types
+	} from '@/common/store';
+	const baseModule = namespace('base');
+	@Component({
+		filters: {
+			phoneStatus(val: string): string {
+				val = val + '';
+				if (!val) return '';
+				return val.substring(0, 3) + '****' + val.substring(7);
+			}
+		}
+	})
+	export default class Address extends Vue {
+		@baseModule.Mutation(types.SET_ADDRESS) setAddress: any
+		addressList: any[] = [];
+		isLoad: boolean = false;
+		// img: string = this.$oss_url + 'zwdd.png';
+		onShow() {
+			this.getList();
+		}
+		getList() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.isLoad = true;
+			this.$http
+				.get({
+					url: this.$api.addressList,
+					data: {}
+				})
+				.then((res: any) => {
+					this.addressList = res.list;
+					this.isLoad = false;
+					uni.hideLoading();
+				}, (err: any) => {
+					this.isLoad = false;
+					uni.hideLoading();
+				});
+		}
+		delAddress(id: number): void {
+			let that = this;
+			uni.showModal({
+				title: '请再次确认',
+				content: '确认删除该地址吗?',
+				cancelText: '再看看',
+				success: function(res) {
+					if (res.confirm) {
+						// 设置默认
+						that.$http
+							.delete({
+								url: that.$api.deleteAddress,
+								data: {
+									id: id
+								}
+							})
+							.then((res: any) => {
+								uni.showToast({
+									title: '删除成功!',
+									icon: 'none'
+								});
+								that.getList();
+							});
+					} else if (res.cancel) {
+						console.log('用户点击取消');
+					}
+				}
+			});
+		}
+		setDefault(id: number): void {
+			let that = this;
+			uni.showModal({
+				title: '提示',
+				content: '确认设置该地址为默认地址?',
+				success: function(res) {
+					if (res.confirm) {
+						// 设置默认
+						that.$http
+							.put({
+								url: that.$api.addressDefault,
+								data: {
+									id: id
+								}
+							})
+							.then((res: any) => {
+								uni.showToast({
+									title: '设置成功!',
+									icon: 'none'
+								});
+								that.getList();
+							});
+					} else if (res.cancel) {
+						console.log('用户点击取消');
+					}
+				}
+			});
+		}
+		editAddress(id: any): void {
+			this.$Router.push({
+				path: '/packages/order/address-detail',
+				query: {
+					id: id
+				}
+			});
+		}
+		createAddress(): void {
+			this.$Router.push({
+				path: '/packages/order/address-detail'
+			});
+		}
+
+		selectAddress(item: any) {
+			let query = this.$Route.query;
+			if (!query.from) return;
+			this.setAddress(item);
+			this.$Router.back(1);
+		}
+	}
+</script>
+
+<style lang="scss">
+	@mixin word14() {
+		@include word-vw(14);
+	}
+
+	.container {
+		background: #F5F5F5;
+		height: 100vh;
+		@include flex-y();
+
+		.list {
+			width: 100%;
+			margin-top: vw(1);
+			flex: 1;
+			overflow-y: auto;
+			padding: 0 vw(10);
+			box-sizing: border-box;
+		}
+	}
+
+	.word12 {
+		@include word-vw(12) margin-left: 5px;
+	}
+
+	.icon-red {
+		@include icon(15, #FFDE4C);
+	}
+
+	.icon-gray {
+		@include icon(15, #EFEFEF);
+	}
+
+	.address-wrap {
+		width: 100%;
+		display: flex;
+		flex-wrap: wrap;
+		align-content: space-between;
+		padding: $cell-padding;
+		box-sizing: border-box;
+		background-color: white;
+		margin-top: vw(10);
+		border-radius: vw(5);
+
+		.top,
+		.bottom {
+			width: 100%;
+			@include flex-x();
+		}
+
+		.name {
+			@include word14;
+			// width: vw(225);
+		}
+
+		.phone {
+			@include word14;
+			// width: vw(120);
+			text-align: right;
+		}
+
+		.detail {
+			width: 100%;
+			@include word-vw(12, $gray9);
+			padding: 12px 0;
+			border-bottom: 1px solid $line-color;
+			margin-bottom: 6px;
+		}
+
+		.default {
+			// width: vw(200);
+			@include flex-x(flex-start);
+
+			.default-icon-box {
+				@include flex-x(center);
+
+				.default-icon {
+					@include flex-x(center);
+				}
+			}
+		}
+
+		.edit-wrap {
+			@include flex-x(flex-end);
+			// width: vw(145);
+
+			.icon {
+				@include icon(14, #8a8a8a);
+				margin-left: 10px;
+			}
+		}
+	}
+
+	.fixed-bottom {
+		height: vw(60);
+		width: 100%;
+		background: #fff;
+		@include flex-x(center);
+
+		.solid-btn {
+			background: $bk-color;
+			@include solid-btn(335, 48, #333);
+			border-radius: vw(10);
+			@include word-vw(14, #fff);
+		}
+	}
+</style>

+ 629 - 0
src/packages/order/after-sale-detail.vue

@@ -0,0 +1,629 @@
+<template>
+	<view class="container">
+		<Navbar title="我的订单" background-color="#fff" color="#333"></Navbar>
+		<view class="head">
+			<text class="status">{{ infoStatus | filterStatus }}</text>
+		</view>
+		<!-- <view class="logistics" @click="tologistics" v-if="logList.length">
+			<text class="icon">&#xe6f3;</text>
+			<view class="logistics-detail">
+				<text class="word12 title">{{ logList[0].context }}</text>
+				<text class="word12-gray9 time">{{ logList[0].time }}</text>
+			</view>
+			<text class="right">&#xe70d;</text>
+		</view> -->
+		<view class="address-info" v-if="infoStatus === 2">
+			退货地址:{{returnInfo.address}}
+			<view>
+				<text class="name">{{returnInfo.name}}</text>
+				<text class="phone">{{returnInfo.phone}}</text>
+			</view>
+		</view>
+		<view class="order-wrap">
+			<OrderItem :sku="skuList" :oid="oid" :total="payment"></OrderItem>
+		</view>
+		<view class="row">
+			退款金额
+			<text>¥{{info.amount | moneyFormat}}</text>
+		</view>
+		<view class="row">
+			售后方式
+			<text>{{typeMap[info.afterType]}}</text>
+		</view>
+		<view class="row row2">
+			退款原因
+			<text>{{info.afterReason}}</text>
+		</view>
+		<view class="remark">
+			{{info.afterRemark}}
+		</view>
+		<view class="detail">
+			<text class="word12-gray9">订单编号:</text>
+			<text class="word12-gray9 half">{{ oid }}</text>
+			<text class="word12-gray9">申请时间</text>
+			<text class="word12-gray9 half">{{ info.created }}</text>
+		</view>
+		<button class="conchat" open-type="contact" :session-from="`7moor|${_userInfo.nickname}|${_userInfo.avatar}|${JSON.stringify({uid: _userInfo.uid})}`">
+			<view class="left">
+				<IconText class="icon" :code="`\ue751`" size="12" color="#333"></IconText>
+				联系客服
+			</view>
+			<IconText :code="`\ue84a`" size="12" color="#999"></IconText>
+		</button>
+		<view class="steps-box">
+			<uni-steps :options="histories" active-color="#333" :active="0" direction="column" />
+		</view>
+		<view class="btn-box" v-if="infoStatus === 1">
+			<view class="btn btn2" @click.stop="cancelAfterSaleModal">撤销售后</view>
+		</view>
+		<view class="bottom-btn" v-if="infoStatus === 2">
+			<view class="solid-btn" @click="toDeliverGoods">去发货</view>
+		</view>
+		<ShowModal ref="cancelOrder" title="提示" @submit="cancelAfterSale" leftBtnText="取消" content="确定要撤销该售后吗"
+			btnText="确认" />
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Vue,
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	@Component({
+		filters: {
+			filterStatus(val: any) {
+				let objMap: any = {
+					1: '已申请待审核',
+					2: '已审核待退货',
+					3: '已退货待确认',
+					5: '已审核待退款',
+					6: '售后成功',
+					7: '售后失败'
+				}
+				return objMap[val] || '';
+			},
+			phoneStatus(val: string): string {
+				if (!val) return '';
+				return val.substring(0, 3) + '****' + val.substring(7);
+			},
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			},
+			freightFormat(val: any) {
+				if (val <= 0) {
+					return "包邮"
+				} else {
+					return (+val).toFixed(2);
+				}
+			}
+		}
+	})
+	export default class OrderDetail extends Vue {
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		detail: any = {
+			address: {
+				phone: ''
+			}
+		};
+		oid: number = 0;
+		info: any = {};
+		Status: any = {};
+		minite: number = 0;
+		second: number = 0;
+		timer: any = null; // 倒计时定时器
+		from: string = '';
+		logList: any[] = [];
+		isFirst: boolean = false;
+		payment: number = 0;
+		skuList: any[] = [];
+		infoStatus: number = 0;
+		statusMap: any = {
+			1: '已申请待审核',
+			2: '已审核待退货',
+			3: '已退货待确认',
+			5: '已审核待退款',
+			6: '售后成功',
+			7: '售后失败'
+		};
+		typeMap: any = {
+			2: '仅退款',
+			3: '退货退款'
+		};
+		statusMap2: any = {
+			1: '未收货',
+			2: '已收货'
+		};
+		returnInfo: any = {};
+		histories: any = [];
+		onLoad() {
+			// this.from = this.$Route.query.from;
+			// this.getShareInfo();
+			// this.getDetail();
+		}
+		onShow() {
+			if (this.$Route.query.id) {
+				this.getDetail();
+			}
+		}
+		updateData() {
+			this.getDetail();
+		}
+		getDetail(): void {
+			let id = this.$Route.query.id;
+			if (!id) return;
+			// 获取订单详情
+			this.$http
+				.get({
+					url: this.$api.getAfterSaleDetail,
+					data: {
+						id: id
+					}
+				})
+				.then((res: any) => {
+					this.detail = res;
+					// 以下变量均为app层级太深无法渲染创建
+					this.info = res.afterSale;
+					this.payment = +res.afterSale.payment;
+					this.skuList = res.skuList;
+					this.oid = res.afterSale.oid;
+					this.returnInfo = res.returnInfo;
+					this.infoStatus = res.afterSale.status;
+					this.histories = res.histories.map((item: any) => {
+						return {
+							...item,
+							title: item.content,
+							desc: item.created
+						}
+					});
+				})
+				.catch((err: any) => {
+					console.log(err);
+				});
+		}
+		tologistics(): void {
+			this.$Router.push({
+				path: '/packages/order/logistics',
+				query: {
+					oid: this.oid
+				}
+			});
+		}
+		cancelAfterSaleModal() {
+			(this.$refs.cancelOrder as any).open();
+		}
+		cancelAfterSale() {
+			this.$http
+				.put({
+					url: this.$api.cancelAfterSale,
+					data: {
+						id: this.info.id
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					this.$Router.pushTab({
+						path: '/pages/order/order-list',
+					});
+					uni.showToast({
+						title: "已撤销售后",
+						icon: 'none'
+					})
+				}, (err: any) => {
+					uni.hideLoading();
+					console.log(err);
+				});
+		}
+
+		toDeliverGoods() {
+			this.$Router.push({
+				path: '/packages/order/deliver-goods',
+				query: {
+					id: this.info.id
+				}
+			})
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.word14 {
+		@include word-vw(14, $gray3);
+	}
+
+	.word12 {
+		@include word-vw(12);
+	}
+
+	.word12-gray9 {
+		@include word-vw(12, $gray9);
+	}
+
+	.container {
+		width: 100vw;
+		padding-bottom: vw(100);
+		background: #F8F8F8;
+	}
+
+	.address {
+		width: 100%;
+		background-color: white;
+		padding: $cell-padding;
+		box-sizing: border-box;
+		display: flex;
+		flex-wrap: wrap;
+		align-content: space-between;
+
+		.icon {
+			@include icon(16, $gray9);
+		}
+
+		.address-detail {
+			width: vw(310);
+			display: flex;
+			flex-wrap: wrap;
+			align-content: space-between;
+			margin-left: 10px;
+
+			.area {
+				width: vw(310);
+				margin-top: vw(8);
+			}
+
+			.name {
+				width: vw(200);
+			}
+		}
+	}
+
+	.logistics {
+		width: 100%;
+		background-color: white;
+		padding: $cell-padding;
+		box-sizing: border-box;
+		display: flex;
+		justify-content: space-between;
+		flex-flow: row;
+		flex-wrap: wrap;
+		align-content: space-between;
+		margin: 10px 0;
+
+		.icon {
+			@include icon(16, $gray9);
+			margin-top: 3px;
+		}
+
+		.right {
+			@include icon(12, $gray9);
+			align-self: center;
+		}
+
+		.logistics-detail {
+			width: vw(280);
+			display: flex;
+			flex-wrap: wrap;
+			align-content: flex-start;
+
+			.time {
+				width: vw(280);
+				margin-top: vw(8);
+			}
+
+			.title {
+				width: vw(280);
+				line-height: 1.5;
+			}
+		}
+	}
+
+	.remark {
+		margin-top: 1px;
+		width: 100vw;
+		background-color: white;
+		@include word-vw(14);
+		padding: vw(15);
+		box-sizing: border-box;
+	}
+
+	.head {
+		width: 100vw;
+		height: vw(90);
+		@include flex-y(center, flex-start);
+		background: #333333;
+		padding: $cell-padding;
+		box-sizing: border-box;
+		color: #fff;
+		font-size: vw(12);
+
+		.status {
+			font-size: vw(18);
+			margin-bottom: vw(5);
+			font-weight: 600;
+		}
+	}
+
+	.address-info {
+		width: 100%;
+		padding: vw(10) vw(15);
+		box-sizing: border-box;
+		@include word-vw(14, #666);
+		line-height: vw(20);
+		background: #fff;
+
+		.name {
+			margin-right: vw(12);
+		}
+
+		view {
+			margin-top: vw(8);
+		}
+	}
+
+	.order-wrap {
+		width: 100vw;
+		display: flex;
+		margin-top: vw(10);
+		flex-wrap: wrap;
+		align-content: space-between;
+		background: white;
+		padding-top: vw(10);
+
+		.oid {
+			flex: 1;
+			padding: vw(15);
+			box-sizing: border-box;
+			@include word-vw(12);
+		}
+
+		.time {
+			flex: 1;
+			padding: vw(15);
+			box-sizing: border-box;
+			text-align: right;
+		}
+
+		.total-detail {
+			width: 100%;
+			padding: vw(6) vw(15);
+			box-sizing: border-box;
+			border-top: vw(1) solid #F5F5F5;
+			border-bottom: vw(1) solid #F5F5F5;
+			line-height: vw(27);
+
+			.top {
+				@include word-vw(14, #333);
+				@include flex-x();
+			}
+
+			.bottom {
+				@include word-vw(14, #999);
+				@include flex-x();
+			}
+		}
+
+		.total {
+			width: 100%;
+			height: vw(50);
+			text-align: right;
+			padding: 0 vw(15);
+			box-sizing: border-box;
+			@include flex-x(flex-end);
+			background: #fff;
+			@include word-vw(14, #999);
+
+			text {
+				@include word-vw(16, #333);
+			}
+		}
+	}
+
+	.row {
+		height: vw(40);
+		@include flex-x();
+		background: #fff;
+		@include word-vw(14, #333);
+		padding: 0 vw(15);
+		margin-top: vw(10);
+	}
+
+	.row2 {
+		margin-top: vw(1);
+	}
+
+	.remark {
+		@include word-vw(14, #333);
+		padding: vw(10) vw(15);
+		margin-top: vw(1);
+		line-height: vw(20);
+	}
+
+	.oid {
+		height: vw(36);
+		@include flex-x();
+		background: #fff;
+		margin-top: vw(10);
+		padding: 0 vw(15);
+		box-sizing: border-box;
+		@include word-vw(14, #999);
+	}
+
+	.detail {
+		margin-top: 10px;
+		@include flex-x();
+		flex-wrap: wrap;
+		align-content: space-between;
+		width: 100vw;
+		padding: vw(10) vw(15);
+		box-sizing: border-box;
+		background-color: white;
+		line-height: 2;
+
+		.half {
+			width: vw(250);
+			text-align: right;
+		}
+	}
+
+	.conchat {
+		@include flex-x();
+		@include word-vw(14, #333);
+		height: vw(50);
+		background: #fff;
+		margin-top: vw(10);
+		padding: 0 vw(15);
+
+		.icon {
+			margin-right: vw(10);
+		}
+
+		&::after {
+			border: none;
+		}
+	}
+	
+	.steps-box{
+		background: #fff;
+		margin-top: vw(10);
+	}
+
+	.btn-box {
+		height: vw(56);
+		@include flex-x(flex-end);
+		width: 100%;
+		padding: 0 vw(15);
+		box-sizing: border-box;
+		background: #fff;
+		position: fixed;
+		bottom: 0;
+
+		.btn {
+			height: vw(30);
+			width: vw(90);
+			line-height: vw(30);
+			@include word-vw(12, #fff);
+			background: $btn-color;
+			border-radius: vw(15);
+			margin-left: vw(10);
+			text-align: center;
+			box-sizing: border-box;
+		}
+
+		.btn2 {
+			color: #333;
+			border: vw(1) solid #BF2071;
+			background: #FFEBF1;
+		}
+	}
+
+	.bottom-btn {
+		height: vw(60);
+		width: 100%;
+		background: #fff;
+		@include flex-x(center);
+		position: fixed;
+		bottom: 0;
+		left: 0;
+
+		.solid-btn {
+			background: $bk-color;
+			@include solid-btn(345, 48, #333);
+			border-radius: vw(24);
+			@include word-vw(14, #fff);
+		}
+	}
+
+	.select-pay-type {
+		background: #FAFAFA;
+		border-top-right-radius: vw(34);
+		border-top-left-radius: vw(34);
+		overflow: hidden;
+		padding: vw(20) vw(10);
+		box-sizing: border-box;
+		@include flex-y();
+
+		.title {
+			@include word-vw(18, #333);
+			font-weight: bold;
+		}
+
+		.time-tip {
+			@include word-vw(10, #999);
+			margin-top: vw(5);
+		}
+
+		.amount {
+			@include word-vw(40, #000);
+			font-weight: 450;
+			margin-top: vw(20);
+		}
+
+		.price {
+			@include word-vw(14, #999);
+			margin-top: vw(3);
+		}
+
+		.pay-item-box {
+			border-radius: vw(10);
+			overflow: hidden;
+			width: 100%;
+			margin-top: vw(36);
+		}
+
+		.pay-item {
+			background: #fff;
+			// margin-bottom: vw(10);
+			height: vw(70);
+			line-height: vw(70);
+			padding: 0 vw(18);
+			// border-radius: vw(10);
+			@include word-vw(16, #333);
+			@include flex-x();
+			overflow: hidden;
+			margin-bottom: vw(1);
+
+			.item-left {
+				@include flex-x(flex-start);
+			}
+
+			.icon {
+				margin-right: vw(10);
+			}
+
+			.item-right {
+				.icon {
+					margin: 0;
+				}
+			}
+		}
+
+		.popup-btn-box {
+			width: 100%;
+			@include flex-x();
+			margin-top: vw(20);
+
+			.btn {
+				font-weight: bold;
+				border-radius: vw(24);
+				height: vw(48);
+				@include flex-x(center);
+			}
+
+			.cancel-btn {
+				width: vw(127);
+				background: #fff;
+				@include word-vw(16, $btn-color);
+
+			}
+
+			.confirm-btn {
+				width: vw(355);
+				background: $btn-color;
+				@include word-vw(16, #fff);
+			}
+		}
+	}
+</style>

+ 234 - 0
src/packages/order/after-sale.vue

@@ -0,0 +1,234 @@
+<template>
+	<view class="container">
+		<Navbar title="我的订单" background-color="#fff" color="#333"></Navbar>
+		<view class="content">
+			<OrderItem :sku="skuList"></OrderItem>
+			<view class="payment">
+				退款金额
+				<text>¥{{payment | moneyFormat}}</text>
+			</view>
+			<view class="reason-box" @click="reasonModal">
+				退款原因
+				<view class="right">
+					{{reason || '选择原因'}}
+					<IconText :code="`\ue84a`" class="icon" size="12" color="#999"></IconText>
+				</view>
+			</view>
+			<view class="remark-box">
+				<textarea class="remark" placeholder="在这里填写您的退款说明" v-model="remark"></textarea>
+			</view>
+		</view>
+		<view class="fixed-bottom" @click="handleConfirm">
+			<view class="solid-btn">提交</view>
+		</view>
+		<uni-popup ref="reasonPop" :is-mask-click="false" :safe-area="false">
+			<view class="reason-popup-box">
+				<view class="title">选择退款原因</view>
+				<view class="reason-list">
+					<view class="item" v-for="item in reasonList" :key="item.value" @click="reasonActive = item.name">
+						{{item.name}}
+						<IconText :code="`\ue73f`" class="icon" size="15"
+							:color="reasonActive === item.name ? '#E32733' : '#DEDEDE'"></IconText>
+					</view>
+				</view>
+				<view class="solid-btn" @click="handleSelectReason">确认</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Vue,
+	} from 'vue-property-decorator';
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			},
+		}
+	})
+	export default class AfterSale extends Vue {
+		skuList: any = [];
+		remark: any = "";
+		reason: any = '';
+		reasonActive: any = "";
+		payment: any = '';
+		oid: any = null;
+		reasonList: any = [{
+				name: '不想要了',
+			},
+			{
+				name: '未按时发货',
+			},
+			{
+				name: '物流问题',
+			},
+			{
+				name: '包裹破损',
+			},
+			{
+				name: '商家发错货',
+			}
+		]
+
+		onShow() {
+			let query = this.$Route.query;
+			this.skuList = query.skuList;
+			this.oid = query.oid;
+			this.payment = query.payment;
+		}
+
+		reasonModal() {
+			this.reasonActive = this.reason;
+			(this.$refs.reasonPop as any).open('bottom');
+		}
+
+		handleSelectReason() {
+			this.reason = this.reasonActive;
+			(this.$refs.reasonPop as any).close();
+		}
+
+		handleConfirm() {
+			this.$http
+				.post({
+					url: this.$api.applyAfterSale,
+					data: {
+						afterSale:{
+							oid: this.oid,
+							afterType: 2,
+							goodsStatus: 1,
+							afterReason: this.reason,
+							afterRemark: this.remark,
+						},
+						skuList: this.skuList,
+						cashAmount: this.payment
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					this.$Router.push({
+						path: '/packages/order/order-list',
+						query: {
+							status: 8
+						}
+					});
+					uni.showToast({
+						title:"已通知商家审核",
+						icon: 'none'
+					})
+				}, (err: any) => {
+					uni.hideLoading();
+					console.log(err);
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		min-height: 100vh;
+		background: #F8F8F8;
+	}
+
+	.content {
+		padding-bottom: vw(80);
+		.payment {
+			width: 100%;
+			height: vw(50);
+			background: #fff;
+			@include flex-x();
+			padding: 0 vw(15);
+			@include word-vw(14, #333);
+			box-sizing: border-box;
+			margin-top: vw(10);
+		}
+
+		.reason-box {
+			width: 100%;
+			height: vw(50);
+			background: #fff;
+			@include flex-x();
+			padding: 0 vw(15);
+			@include word-vw(14, #333);
+			box-sizing: border-box;
+			margin-top: vw(10);
+
+			.icon {
+				margin-left: vw(8);
+			}
+		}
+
+		.remark-box {
+			margin-top: vw(1);
+
+			.remark {
+				width: 100%;
+				box-sizing: border-box;
+				height: vw(80);
+				padding: vw(10) vw(15);
+				background: #fff;
+				@include word-vw(14, #333);
+			}
+		}
+	}
+
+	.fixed-bottom {
+		height: vw(60);
+		width: 100%;
+		background: #fff;
+		@include flex-x(center);
+		position: fixed;
+		bottom: 0;
+
+		.solid-btn {
+			background: $bk-color;
+			@include solid-btn(345, 48, #333);
+			border-radius: vw(24);
+			@include word-vw(14, #fff);
+		}
+	}
+
+	.reason-popup-box {
+		background: #FAFAFA;
+		@include flex-y();
+		border-top-left-radius: vw(34);
+		border-top-right-radius: vw(34);
+
+		.title {
+			width: 100%;
+			height: vw(60);
+			@include word-vw(18, #000);
+			font-weight: bold;
+			@include flex-x(center);
+		}
+
+		.reason-list {
+			width: vw(355);
+			@include flex-y();
+			border-radius: vw(10);
+			overflow: hidden;
+
+			.item {
+				width: 100%;
+				height: vw(60);
+				background: #fff;
+				@include flex-x();
+				padding: 0 vw(16);
+				box-sizing: border-box;
+				@include word-vw(14, #333);
+				margin-top: vw(1);
+			}
+		}
+
+		.solid-btn {
+			background: $bk-color;
+			@include solid-btn(345, 48, #333);
+			border-radius: vw(24);
+			@include word-vw(14, #fff);
+			margin: vw(24) 0;
+		}
+	}
+</style>

+ 955 - 0
src/packages/order/create-order.vue

@@ -0,0 +1,955 @@
+<template>
+	<view class="content">
+		<Navbar title="提交订单" backgroundColor="#F8F8F8"></Navbar>
+		<view class="address-styl" @click="chooseAddress">
+			<view class="address-left" v-if="Object.keys(defaultAddress).length">
+				<view class="province-styl">
+					{{
+						defaultAddress.province_str +
+							defaultAddress.city_str +
+							defaultAddress.county_str +
+							defaultAddress.address
+					}}
+				</view>
+				<!-- <view class="detail-address">{{ defaultAddress.address }}</view> -->
+				<view class="user-info">
+					<view class="user-name">{{ defaultAddress.name }}</view>
+					<view class="user-phone">{{ defaultAddress.phone }}</view>
+				</view>
+			</view>
+			<view class="address-copy" v-else>
+				<image class="img" :src="static ? static + 'position.svg' : ''" mode="aspectFill"></image>
+				填写您的收货地址
+			</view>
+			<text class="address-right">&#xe75e;</text>
+		</view>
+		<view class="goods-module">
+			<view class="goods-card" v-for="(item, index) in goodsList" :key="index">
+				<image class="image-styl" :src="item.master_pic || item.masterPic" mode="aspectFill"></image>
+				<view class="goods-info">
+					<view class="goods-name">{{ item.name }}</view>
+					<view class="goods-spec">{{ item.attrsName }}</view>
+					<view class="goods-num">
+						<view class="goods-price">¥{{ item.price }}</view>
+						X{{ item.num }}
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="total-box">
+			<view class="top">
+				商品合计
+				<text>¥{{(sumPrice - freight) | moneyFormat}}</text>
+			</view>
+			<view class="mid">
+				邮费
+				<text v-if="freight">{{freight | moneyFormat}}</text>
+				<text v-else>包邮</text>
+			</view>
+			<view class="total">
+				合计 ¥<text>{{sumPrice | moneyFormat}}</text>
+			</view>
+		</view>
+		<view class="desc-styl">
+			<textarea placeholder-style="color:#999" class="remark" v-model="remark" placeholder="在这里填写您的备注" />
+		</view>
+		<view class="bottom-btn">
+			<view class="btn-right" @click="confirmPay">提交订单(¥{{sumPrice | moneyFormat}})</view>
+		</view>
+		<!-- <ShowModal ref="confirm" title="提示" @submit="confirm" leftBtnText="取消" content="确定提交为提货订单?" btnText="确认" /> -->
+
+		<uni-popup ref="payPopup" :is-mask-click="false" :safe-area="false">
+			<view class="select-pay-type" @click.stop>
+				<view class="title">选择支付方式</view>
+				<view class="amount">{{payInfo.payment | moneyFormat}}元</view>
+				<view class="time-tip">页面有效期10分钟</view>
+				<view class="pay-item-box">
+					<view class="pay-item" @click="selectPayType('wxPayMini')">
+						<view class="item-left">
+							<IconText :code="`\ue75a`" color="#40BA49" class="icon" size="20"></IconText>
+							微信支付
+						</view>
+						<view class="item-right">
+							<IconText :code="`\ue73f`" :color="payType === 'wxPayMini' ? '#D3325C' : '#DEDEDE'"
+								class="icon" size="16">
+							</IconText>
+						</view>
+					</view>
+					<!-- <view class="pay-item" @click="selectPayType('aliPayApp')">
+						<view class="item-left">
+							<IconText :code="`\ue760`" color="#06B4FD" class="icon" size="20"></IconText>
+							支付宝支付
+						</view>
+						<view class="item-right">
+							<IconText :code="`\ue73f`" :color="payType === 'aliPayApp' ? '#BF2071' : '#DEDEDE'"
+								class="icon" size="16">
+							</IconText>
+						</view>
+					</view> -->
+					<view class="pay-item" @click="selectPayType('balance')">
+						<view class="item-left">
+							<IconText :code="`\ue747`" color="#E6456A" class="icon" size="16"></IconText>
+							余额支付(余额:{{balanceInfo.balance | moneyFormat}})
+						</view>
+						<view class="item-right">
+							<IconText :code="`\ue73f`" :color="payType === 'balance' ? '#BF2071' : '#DEDEDE'"
+								class="icon" size="16"></IconText>
+						</view>
+					</view>
+					<view class="pay-item" @click="selectPayType('bean')">
+						<view class="item-left">
+							<IconText :code="`\ue87e`" color="#FF7737" class="icon" size="16"></IconText>
+							金豆支付(余额:{{balanceInfo.bean | moneyFormat}})
+						</view>
+						<view class="item-right">
+							<IconText :code="`\ue73f`" :color="payType === 'bean' ? '#BF2071' : '#DEDEDE'" class="icon"
+								size="16"></IconText>
+						</view>
+					</view>
+				</view>
+				<view class="btn-box">
+					<view class="cancel-btn btn" @click="closePay">取消</view>
+					<view class="confirm-btn btn" @click="selectType">支付</view>
+				</view>
+			</view>
+		</uni-popup>
+		<Password ref="password" :money="payInfo.payment" @finish="passwordFinish"></Password>
+		<AddressPopup ref="addressElem" :chooseId="defaultAddress.id || 0" :addressList="addressList"
+			@clickAddress="getAddressInfo"></AddressPopup>
+	</view>
+</template>
+<script lang="ts">
+	import {
+		Component,
+		Vue
+	} from 'vue-property-decorator';
+	// import {
+	// 	Getter,
+	// 	Mutation
+	// } from 'vuex-class';
+	import {
+		types
+	} from '@/common/store';
+	// interface PayInfo {
+	// 	amount: 0;
+	// 	oid: 0;
+	// 	unique: 0;
+	// };
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	@Component({
+		filters: {
+			moneyFormat(val : any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class CreateOrder extends Vue {
+		@baseModule.Getter('_address') _address : any;
+		@baseModule.Mutation(types.SET_ADDRESS) setAddress : any;
+		@baseModule.Getter('_userInfo') _userInfo : any;
+		titleContent : string = ''; //备注信息展示
+		payBillId : any = ''; // 支付票据
+		remark : string = ''; //备注信息
+		isTihuo : boolean = false;
+		goodsList : Array<any> = []; //商品数据
+		sumPrice : number = 0; // 应付金额
+		sumCount : number = 0;
+		addressList : Array<any> = []; //地址列表
+		defaultAddress : any = {}; //默认地址列表
+		canSubmit : boolean = true; //支付锁
+		isFirst : boolean = true; //第一次进入
+		tihuoCheck : boolean = false;
+		payType : any = 'wxPayMini';
+		payInfo : any = {};
+		static : string = OSS_STATIC;
+		balanceInfo : any = {};
+		isPay : boolean = false;
+		freight : any = 0;
+		genre : any = null;
+		providerMap : any = {
+			wxPayMini: 'wxpay',
+			aliPayApp: 'alipay'
+		};
+		setSafe : any = false;
+		oid: any = null;
+
+		async onLoad() {
+			this.goodsList = this.$Route.query.data;
+			this.sumCount = this.$Route.query.sumCount;
+			this.genre = this.$Route.query.genre;
+			this.setAddress(null);
+			await this.getAddressList();
+			this.searchPrice(); //查询总价
+		}
+
+		onShow() { 
+			if(this.oid){
+				this.getDetail();
+			}
+		}
+		
+		getDetail() : void {
+			// 获取订单详情
+			this.$http
+				.get({
+					url: this.$api.orderDetail,
+					data: {
+						oid: this.oid
+					}
+				})
+				.then((res : any) => {
+					if(res.main.status !== 2){
+						this.$Router.replace({
+							path: "/packages/order/order-list"
+						})
+					}
+				})
+				.catch((err : any) => {
+					console.log(err);
+				});
+		}
+
+		//获取地址列表
+		async getAddressList() {
+			await this.$http
+				.get({
+					url: this.$api.addressList,
+					data: {}
+				})
+				.then((res : any) => {
+					this.addressList = res.list;
+					res.list.find((val : any) => {
+						if (val.isDefault == 1) {
+							this.defaultAddress = val;
+							return true;
+						}
+					});
+				})
+				.catch((err : any) => {
+					console.log(err);
+				});
+		}
+		//查询商品价格
+		searchPrice() {
+			if (!this.canSubmit) return;
+			let data : any = {
+				order: {
+					delivery: 1,
+				},
+				genre: this.genre,
+				addressId: (this.defaultAddress as any).id || 0,
+				skuList: {}
+			};
+			if (!data.addressId) return;
+			this.goodsList.forEach((val : any) => {
+				data.skuList[val.skuId] = val.num;
+			});
+			this.$http
+				.post({
+					url: this.$api.submitOrder,
+					data: data
+				})
+				.then((res : any) => {
+					this.sumPrice = res.payment;
+					this.freight = +res.freight;
+					this.isTihuo = res.hasLadingPermission;
+				})
+				.catch((err : any) => {
+					console.log(err);
+				});
+		}
+
+		getBalance() {
+			uni.showLoading({
+				title: '加载中'
+			});
+			return this.$http
+				.get({
+					url: this.$api.getBalance
+				})
+				.then((res : any) => {
+					this.balanceInfo = res;
+					uni.hideLoading();
+				}, (err : any) => {
+					uni.hideLoading();
+					console.log(err);
+				});
+		}
+
+		isPayPassword() {
+			return this.$http
+				.get({
+					url: this.$api.isPayPassword
+				})
+				.then((res : any) => {
+					this.setSafe = res;
+					uni.hideLoading();
+				}, (err : any) => {
+					uni.hideLoading();
+					console.log(err);
+				});
+		}
+
+		//手动选择地址
+		getAddressInfo(val : any) {
+			this.defaultAddress = val;
+			this.searchPrice(); //查询总价
+		}
+
+		selectType() {
+			if (this.payType === 'wxPayMini' || this.payType === 'aliPayApp') {
+				this.getParmas(this.payInfo)
+				return;
+			};
+			if (this.payType === 'balance' || this.payType === 'bean') {
+				if (!this.setSafe) {
+					uni.showToast({
+						title: "请设置支付密码",
+						icon: 'none'
+					})
+					return;
+				}
+				(this.$refs.password as any).open();
+			};
+		}
+		selectPayType(type : any) {
+			this.payType = type;
+		}
+		confirmPay() {
+			// 提交订单信息
+			if (!this.defaultAddress.id) {
+				uni.showToast({
+					title: '请选择收货地址',
+					icon: 'none',
+					duration: 1500
+				});
+				return;
+			}
+			//支付锁
+			if (!this.canSubmit) {
+				uni.showToast({
+					title: '请勿多次重复点击支付订单按钮!',
+					icon: 'none',
+					duration: 1500
+				});
+				return false;
+			}
+			this.canSubmit = false;
+			uni.showLoading({
+				title: '加载中'
+			});
+			let mode = this.payType;
+			// #ifdef APP-PLUS
+			if (this.payType === 'wxPayMini') mode = 'wxPayApp';
+			// #endif
+			let data : any = {
+				remark: this.remark,
+				// payMode: mode,
+				addressId: (this.defaultAddress as any).id,
+				order: {
+					delivery: 1,
+				},
+				skuList: {},
+				genre: this.genre
+			};
+			this.goodsList.forEach((val : any) => {
+				data.skuList[val.skuId] = val.num;
+			});
+			this.$http
+				.post({
+					url: this.$api.createOrder,
+					data: data
+				})
+				.then(async (res : any) => {
+					this.canSubmit = true;
+					this.payBillId = res.payBillId;
+					this.payInfo = res;
+					uni.hideLoading();
+					await this.getBalance();
+					await this.isPayPassword();
+					this.isPay = true;
+					(this.$refs.payPopup as any).open('bottom');
+				})
+				.catch((err : any) => {
+					console.log(err);
+					this.canSubmit = true;
+					uni.hideLoading();
+				});
+		}
+		passwordFinish(val : any) {
+			this.getParmas(this.payInfo, val);
+		}
+		async getParmas(info : any, safe : any = {}) {
+			// 拉取支付参数
+			this.canSubmit = false;
+			uni.showLoading({
+				title: '加载中'
+			});
+			let eve : any = {};
+			// #ifdef MP-WEIXIN
+			if (this.payType === 'wxPayMini') eve = await this.getCode();
+			// #endif
+			let mode = this.payType;
+			// #ifdef APP-PLUS
+			if (this.payType === 'wxPayMini') mode = 'wxPayApp';
+			// #endif
+			this.$http
+				.post({
+					url: this.$api.getPayParmas,
+					data: {
+						payBill: {
+							id: info.payBillId, //支付票据ID
+							amount: info.payment, //支付金额
+							oid: info.oid,
+							payType: 2, //支付类型:2,订单支付;
+							mode: mode
+						},
+						third: {
+							code: eve.code,
+						},
+						safe: safe
+					}
+				})
+				.then((res : any) => {
+					if (this.payType === 'wxPayMini' || this.payType === 'aliPayApp') {
+						console.log(res, 1232133123);
+						// #ifdef APP-PLUS
+						if (res.appAppid) {
+							(this.$refs.payPopup as any).close('bottom');
+							this.oid = info.oid;
+							uni.hideLoading();
+							plus.share.getServices(function (res2) {
+								var sweixin = null;
+								for (var i = 0; i < res2.length; i++) {
+									var t = res2[i];
+									if (t.id == 'weixin') {
+										sweixin = t;
+									}
+								}
+								if (sweixin) {
+									sweixin.launchMiniProgram({
+										// id: APPID, //这里写你的小程序原始id(以gh开头)
+										id: res.originalID, //这里写你的小程序原始id(以gh开头)
+										type: 0, //这里是不同的环境(默认0)
+										path: res.path //这里是指定页的路径,如需传参直接字符串拼接(首页可以省略)
+										// path: '/pages/front/front' //这里是指定页的路径,如需传参直接字符串拼接(首页可以省略)
+									});
+								}
+							}, function (res2) {
+								console.log(JSON.stringify(res2));
+							});
+							return;
+						}
+						// #endif
+						this.moneyPay(res, info);
+					} else {
+						this.canSubmit = true;
+						this.payBillId = null;
+						uni.showToast({
+							title: '支付成功!',
+							icon: 'none',
+							duration: 2000
+						});
+						this.$Router.replace({
+							path: '/packages/order/pay-success',
+							query: {
+								oid: info.oid,
+								payment: info.payment
+							}
+						});
+					}
+					uni.hideLoading();
+				})
+				.catch((err : any) => {
+					console.log(err);
+					this.canSubmit = true;
+					uni.hideLoading();
+				});
+		}
+		getCode() {
+			return new Promise((resolve : any, reject : any) => {
+				uni.login({
+					provider: 'weixin',
+					success: (eve) => {
+						resolve(eve);
+					},
+					fail: (err) => {
+						console.log(err);
+						reject();
+						this.canSubmit = true;
+					}
+				});
+			})
+		}
+		moneyPay(pay_info : any, info : any) : any {
+			// 拉起微信支付
+			let that : any = this;
+			let option = {};
+			// #ifdef MP-WEIXIN
+			option = {
+				timeStamp: pay_info.timeStamp,
+				nonceStr: pay_info.nonceStr,
+				package: pay_info.package,
+				signType: pay_info.signType,
+				paySign: pay_info.paySign,
+			};
+			// #endif
+			// #ifdef APP-PLUS
+			option = {
+				appid: pay_info.appId,
+				partnerid: pay_info.partnerid,
+				prepayid: pay_info.prepay_id,
+				sign: pay_info.paySign,
+				timestamp: pay_info.timeStamp,
+				noncestr: pay_info.nonceStr,
+				package: pay_info.package,
+			};
+			// #endif
+			let orderInfo : any = JSON.stringify(option);
+			if (this.payType === 'aliPayApp') orderInfo = this.objToCookie(pay_info);
+			// console.log(JSON.stringify(option), 121231)
+			uni.requestPayment({
+				"provider": this.providerMap[this.payType],
+				...option,
+				"orderInfo": orderInfo,
+				success: function (result) {
+					console.log('微信回调', result);
+					if (result.errMsg == 'requestPayment:ok') {
+						that.payBillId = null;
+						that.canSubmit = true;
+						uni.showToast({
+							title: '支付成功!',
+							icon: 'none',
+							duration: 2000
+						});
+						that.$Router.replace({
+							path: '/packages/order/pay-success',
+							query: {
+								oid: info.oid,
+								payment: info.payment
+							}
+						});
+					} else {
+						that.canSubmit = true;
+					}
+				},
+				fail: function (err : any) {
+					console.log('微信支付失败', err);
+					that.canSubmit = true;
+				}
+			});
+		}
+		closePay() {
+			(this.$refs.payPopup as any).close();
+			this.isPay = false;
+			this.$http
+				.post({
+					url: this.$api.closePay,
+					data: {
+						id: this.payBillId //支付票据ID
+					}
+				})
+				.then((res : any) => {
+					this.canSubmit = true;
+					this.payBillId = null;
+					uni.showToast({
+						title: '取消支付!',
+						icon: 'none',
+						duration: 2000
+					});
+				})
+				.catch((err : any) => {
+					this.canSubmit = true;
+				});
+		}
+		toPwd() {
+			this.$Router.push({
+				path: '/packages/user/code',
+				query: {
+					type: 'set',
+					name: 'pay'
+				}
+			})
+		}
+		objToCookie(obj : any) {
+			{
+				if (obj.constructor == Object) {
+					var cssStr = '';
+					for (var key in obj) {
+						cssStr += key + '=' + encodeURIComponent(obj[key]) + '&';
+					}
+					return cssStr.substr(0, cssStr.length - 1);
+				}
+			}
+		}
+		//打开选择地址弹窗
+		async chooseAddress() {
+			await this.getAddressList();
+			(this.$refs.addressElem as any).open();
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.icon {
+		@include icon(22, #cccccc);
+	}
+
+	.icon1 {
+		@include icon(22, $main-color);
+	}
+
+	.flex-x {
+		width: 100%;
+		@include flex-x();
+	}
+
+	.content {
+		padding: 0 vw(15) vw(100);
+		box-sizing: border-box;
+
+		.address-styl {
+			@include flex-x();
+			padding: vw(12);
+			background-color: #ffffff;
+			width: 100%;
+			box-sizing: border-box;
+			min-height: vw(96);
+			border-radius: vw(10);
+			margin-top: vw(8);
+
+			.address-left {
+				@include word-vw(14, #333333);
+
+				.province-styl {
+					@include word-vw(16, #333);
+					font-weight: bold;
+				}
+
+				.detail-address {
+					margin: vw(3) 0 vw(6) 0;
+					font-size: vw(18);
+					font-weight: bold;
+				}
+
+				.user-info {
+					@include flex-x(flex-start);
+					margin-top: vw(8);
+
+					.user-name {}
+
+					.user-phone {
+						margin-left: vw(20);
+					}
+				}
+			}
+
+			.address-copy {
+				@include word-vw(15, #999);
+				@include flex-x(flex-start);
+				margin: vw(10) 0;
+				font-weight: 600;
+
+				.img {
+					width: vw(32);
+					height: vw(32);
+					margin-right: vw(8);
+				}
+			}
+
+			.address-right {
+				@include icon(12, $btn-color);
+			}
+		}
+
+		.goods-module {
+			width: 100%;
+			// background-color: #ffffff;
+			box-sizing: border-box;
+			// padding: vw(10);
+			// border-radius: vw(5);
+			margin-top: vw(10);
+
+			.goods-card {
+				@include flex-x(flex-start, center);
+				font-size: vw(14);
+				margin-bottom: vw(10);
+				position: relative;
+				border-radius: vw(10);
+				background-color: #fff;
+				padding: vw(8);
+
+				.image-styl {
+					@include wh(84, 84);
+					border-radius: vw(8);
+					flex-shrink: 0;
+				}
+
+				.goods-info {
+					margin-left: vw(10);
+					min-height: vw(84);
+					box-sizing: border-box;
+					padding: vw(3) 0;
+					flex: 1;
+
+					.goods-name {
+						@include word-vw(14, $gray3);
+						font-weight: 600;
+						@include ellipsis();
+					}
+
+					.goods-spec {
+						@include word-vw(12, #666);
+						@include ellipsis();
+					}
+
+					.goods-num {
+						@include word-vw(14, #333);
+						font-weight: bold;
+						margin-top: vw(12);
+						@include flex-x();
+					}
+
+					.tips {
+						@include word-vw(14, $gray9);
+						margin-left: vw(5);
+						font-weight: normal;
+					}
+				}
+
+				.goods-price {
+					@include word-vw(18, #333);
+					font-weight: bold;
+					// position: absolute;
+					// bottom: vw(5);
+					// right: vw(10);
+				}
+			}
+
+			.sum-styl {
+				@include flex-x(flex-end, flex-end);
+				padding-top: vw(12);
+
+				.sum-title {
+					font-size: vw(12);
+				}
+
+				.sum-num {
+					font-size: vw(16);
+					font-weight: bold;
+				}
+			}
+		}
+
+		.total-box {
+			background: #fff;
+			margin-top: vw(10);
+			padding: vw(10);
+			border-radius: vw(10);
+
+			.top {
+				@include word-vw(14, #333);
+				@include flex-x();
+
+				text {
+					font-weight: 600;
+				}
+			}
+
+			.mid {
+				@include word-vw(14, #999);
+				@include flex-x();
+				margin-top: vw(16);
+			}
+
+			.total {
+				height: vw(54);
+				margin-top: vw(20);
+				border-top: vw(1) solid #F3F3F3;
+				@include flex-x(flex-end);
+				@include word-vw(12, #333);
+				font-weight: 600;
+
+				text {
+					font-size: vw(16);
+				}
+			}
+		}
+
+		.tihuo-styl {
+			@include flex-x();
+			background: #fff;
+			margin-top: vw(10);
+			padding: vw(12);
+
+			.left {
+				@include flex-y(center, flex-start);
+				@include word-vw(14, #333);
+
+				text {
+					@include word-vw(12, red);
+					margin-top: vw(8)
+				}
+			}
+
+			.icon {
+				@include icon(28, #979797);
+				margin-right: vw(8);
+			}
+
+			.icon1 {
+				@include icon(28, $btn-color);
+				margin-right: vw(8);
+			}
+		}
+
+		.desc-styl {
+			.remark {
+				background: #fff;
+				width: 100%;
+				height: vw(80);
+				border-radius: vw(10);
+				margin-top: vw(10);
+				padding: vw(10);
+				font-size: vw(14);
+				box-sizing: border-box;
+			}
+		}
+
+		.bottom-btn {
+			width: 100%;
+			height: vw(60);
+			@include flex-x();
+			position: fixed;
+			left: 0;
+			bottom: 0;
+			background: #fff;
+			padding: 0 vw(20);
+			box-sizing: border-box;
+
+			.btn-left {
+				.price-num {
+					@include word-vw(20, #333);
+					font-weight: 600;
+				}
+
+				.goods-sum {
+					@include word-vw(14, #999);
+					@include flex-y(center, flex-start);
+
+					text {
+						@include word-vw(20, #333);
+						font-weight: 550;
+					}
+				}
+			}
+
+			.btn-right {
+				width: vw(345);
+				height: vw(48);
+				border-radius: vw(24);
+				background: $btn-color;
+				@include flex-x(center);
+				@include word-vw(14, #fff);
+			}
+		}
+
+		.select-pay-type {
+			background: #FAFAFA;
+			border-top-right-radius: vw(34);
+			border-top-left-radius: vw(34);
+			overflow: hidden;
+			padding: vw(20) vw(10);
+			box-sizing: border-box;
+			@include flex-y();
+
+			.title {
+				@include word-vw(18, #333);
+				font-weight: bold;
+			}
+
+			.time-tip {
+				@include word-vw(10, #999);
+				margin-top: vw(5);
+			}
+
+			.amount {
+				@include word-vw(40, #000);
+				font-weight: 450;
+				margin-top: vw(20);
+			}
+
+			.price {
+				@include word-vw(14, #999);
+				margin-top: vw(3);
+			}
+
+			.pay-item-box {
+				border-radius: vw(10);
+				overflow: hidden;
+				width: 100%;
+				margin-top: vw(36);
+			}
+
+			.pay-item {
+				background: #fff;
+				// margin-bottom: vw(10);
+				height: vw(70);
+				line-height: vw(70);
+				padding: 0 vw(18);
+				// border-radius: vw(10);
+				@include word-vw(16, #333);
+				@include flex-x();
+				overflow: hidden;
+				margin-bottom: vw(1);
+
+				.item-left {
+					@include flex-x(flex-start);
+				}
+
+				.icon {
+					margin-right: vw(10);
+				}
+
+				.item-right {
+					.icon {
+						margin: 0;
+					}
+				}
+			}
+
+			.btn-box {
+				width: 100%;
+				@include flex-x();
+				margin-top: vw(20);
+
+				.btn {
+					font-weight: bold;
+					border-radius: vw(10);
+					height: vw(60);
+					@include flex-x(center);
+				}
+
+				.cancel-btn {
+					width: vw(127);
+					background: #fff;
+					@include word-vw(16, $btn-color);
+
+				}
+
+				.confirm-btn {
+					width: vw(210);
+					background: $btn-color;
+					@include word-vw(16, #fff);
+				}
+			}
+		}
+	}
+</style>

+ 184 - 0
src/packages/order/deliver-goods.vue

@@ -0,0 +1,184 @@
+<template>
+	<view class="container">
+		<Navbar title="我的订单" background-color="#fff" color="#333"></Navbar>
+		<view class="content">
+			<view class="row" @click="selectNameModal">
+				<view class="label">物流公司</view>
+				<view class="right">
+					{{name || '请选择'}}
+					<IconText size="12" :code="`\ue764`" color="#999"></IconText>
+				</view>
+			</view>
+			<view class="row">
+				<view class="label">物流单号</view>
+				<view class="right">
+					<input type="text" placeholder="请填写物流单号" v-model="code">
+				</view>
+			</view>
+			<view class="bottom-btn">
+				<view class="solid-btn" @click="handleConfirm">提交</view>
+			</view>
+		</view>
+		<uni-popup ref="namePop" :safe-area="false">
+			<view class="reason-popup-box">
+				<view class="title">选择物流公司</view>
+				<view class="reason-list">
+					<view class="item" v-for="item in list" :key="item" @click="nameActive = item">
+						{{item}}
+						<IconText :code="`\ue73f`" class="icon" size="15"
+							:color="nameActive === item ? '#BF2071' : '#DEDEDE'"></IconText>
+					</view>
+				</view>
+				<view class="solid-btn" @click="handleSelectName">确认</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Vue,
+	} from 'vue-property-decorator';
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			},
+		}
+	})
+	export default class DeliverGoods extends Vue {
+		list: any = [];
+		nameActive: any = '';
+		name: any = '';
+		code: any = '';
+
+		onShow() {
+			this.getCompanyList();
+		}
+
+		getCompanyList() {
+			this.$http
+				.get({
+					url: this.$api.getCompanyList,
+					data: {}
+				})
+				.then((res: any) => {
+					this.list = res.list;
+					uni.hideLoading();
+				}, (err: any) => {
+					uni.hideLoading();
+					console.log(err);
+				});
+		}
+
+		selectNameModal() {
+			this.nameActive = this.name;
+			(this.$refs.namePop as any).open('bottom');
+		}
+
+		handleSelectName() {
+			this.name = this.nameActive;
+			(this.$refs.namePop as any).close();
+		}
+		handleConfirm() {
+			this.$http
+				.put({
+					url: this.$api.setCompanyInfo,
+					data: {
+						id: +this.$Route.query.id,
+						goodsReturnCompany: this.name,
+						goodsReturnCode: this.code
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					this.$Router.back(1);
+				}, (err: any) => {
+					uni.hideLoading();
+					console.log(err);
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.row {
+		height: vw(50);
+		margin-bottom: vw(10);
+		background: #fff;
+		@include flex-x();
+		@include word-vw(14, #333);
+		padding: 0 vw(15);
+		.label{
+			white-space: nowrap;
+		}
+
+		.right {
+			@include word-vw(14, #999);
+			text-align: right;
+		}
+	}
+
+	.reason-popup-box {
+		background: #FAFAFA;
+		@include flex-y();
+		border-top-left-radius: vw(34);
+		border-top-right-radius: vw(34);
+
+		.title {
+			width: 100%;
+			height: vw(60);
+			@include word-vw(18, #000);
+			font-weight: bold;
+			@include flex-x(center);
+		}
+
+		.reason-list {
+			width: vw(355);
+			@include flex-y();
+			border-radius: vw(10);
+			overflow: hidden;
+			height: 50vh;
+			overflow-y: auto;
+
+			.item {
+				width: 100%;
+				height: vw(60);
+				background: #fff;
+				@include flex-x();
+				padding: 0 vw(16);
+				box-sizing: border-box;
+				@include word-vw(14, #333);
+				margin-top: vw(1);
+				flex-shrink: 0;
+			}
+		}
+
+		.solid-btn {
+			background: $bk-color;
+			@include solid-btn(345, 48, #333);
+			border-radius: vw(24);
+			@include word-vw(14, #fff);
+			margin: vw(24) 0;
+		}
+	}
+
+	.bottom-btn {
+		height: vw(60);
+		width: 100%;
+		background: #fff;
+		@include flex-x(center);
+		position: fixed;
+		bottom: 0;
+		left: 0;
+
+		.solid-btn {
+			background: $bk-color;
+			@include solid-btn(345, 48, #333);
+			border-radius: vw(24);
+			@include word-vw(14, #fff);
+		}
+	}
+</style>

+ 253 - 0
src/packages/order/logistics.vue

@@ -0,0 +1,253 @@
+<template>
+	<view class="container">
+		<Navbar title="物流详情" background-color="#ffffff" color="#333333"></Navbar>
+		<view class="pad" :class="{ theme }">
+			<view class="top">
+				<image class="log-img" :src="staticImg ? staticImg + 'logistics.png' : ''"></image>
+				<view class="text flex-y">
+					<text>快递公司:{{ company }}</text>
+					<text>快递编号:{{ code }}</text>
+				</view>
+			</view>
+			<view class="body flex-space-top" v-if="logList.length > 0">
+				<view v-for="(item, index) in logList" :key="index">
+					<view v-if="index == 0" class="step-item">
+						<view class="active"></view>
+						<view class="step">
+							<view class="word14">{{ item.context }}</view>
+							<text class="tips">{{ item.time }}</text>
+						</view>
+					</view>
+					<view v-else class="step-item">
+						<view class="circle"></view>
+						<view class="step">
+							<text class="word14-gray9">{{ item.context }}</text>
+							<text class="tips-gray9">{{ item.time }}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit
+	} from 'vue-property-decorator';
+	@Component({})
+	export default class logistics extends Vue {
+		staticImg: string = this.$oss_url;
+		code: string = '';
+		company: string = '';
+		logList: any = [];
+		oid: number | null = 12; // 订单id
+		id: number | null = null; // 订单id
+		active: number = 0;
+		onShow() {
+			let query = this.$Route.query;
+			if (query.oid) {
+				this.oid = +query.oid;
+				this.id = +query.id;
+				this.getLogistics();
+			}
+		}
+
+		getLogistics(): void {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.get({
+					url: this.$api.logistics,
+					data: {
+						oid: this.oid,
+						id: this.id
+					}
+				})
+				.then((res: any) => {
+					this.code = res.code;
+					this.company = res.company;
+					this.logList = res.data;
+					uni.hideLoading();
+				})
+				.catch((err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+	
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+	.icon {
+		@include icon();
+	}
+
+	.flex-right {
+		@include flex-x(flex-end);
+	}
+
+	.flex-space {
+		width: 100%;
+		margin-bottom: vw(10);
+		@include flex-x();
+	}
+
+	.flex-space-top {
+		@include flex-x(space-between, flex-start);
+	}
+
+	.flex-left {
+		@include flex-x();
+	}
+
+	.flex-y {
+		width: 100%;
+		padding: 0 vw(5) vw(10);
+		@include flex-y(flex-start, flex-start);
+	}
+
+	.word14 {
+		@include word-vw(14);
+	}
+
+	.word14-gray9 {
+		@include word-vw(14, $gray9);
+	}
+
+	.pad {
+		width: 100vw;
+		min-height: 100vh;
+		background: border-color;
+		background: #F6F6F6;
+
+		.top {
+			height: vw(80);
+			@include flex-x(flex-start);
+			background: white;
+			padding: 0 vw(15);
+			position: relative;
+
+			.log-img {
+				width: vw(48);
+				height: vw(48);
+				border-radius: 50%;
+				background: #f5f5f5;
+				margin-right: vw(5);
+				@include flex-y();
+
+				.icon {
+					@include icon(24, gray9);
+				}
+			}
+
+			.avatar {
+				width: vw(60);
+				height: vw(60);
+				border-radius: 50%;
+				background-color: #f5f5f5;
+				@include flex-y();
+				overflow: hidden;
+
+				image {
+					width: vw(60);
+					height: vw(60);
+				}
+
+				.icon {
+					@include icon(30, #d8d8d8);
+				}
+			}
+
+			.text {
+				padding: vw(15);
+				flex: 1;
+
+				text {
+					line-height: 1.5;
+					color: $gray3;
+					font-size: vw(14);
+				}
+			}
+		}
+
+		.body {
+			background-color: white;
+			margin-top: vw(10);
+			padding: 0 vw(15) vw(15);
+			@include flex-y(flex-start);
+
+			.step-item {
+				@include flex-x(flex-start, flex-start);
+				margin-top: 27px;
+			}
+
+			.active {
+				width: vw(14);
+				height: vw(14);
+				background: $main-color;
+				border-radius: 50%;
+				margin: vw(8);
+				flex-shrink: 0;
+				position: relative;
+				z-index: 1;
+
+				&::after {
+					content: '';
+					position: absolute;
+					top: vw(14);
+					left: vw(6);
+					width: 1px;
+					height: 100px;
+					background-color: $grayEF;
+					z-index: 0;
+				}
+			}
+
+			.circle {
+				width: vw(8);
+				height: vw(8);
+				background: $grayEF;
+				border-radius: 50%;
+				margin: vw(8) vw(11) vw(10);
+				flex-shrink: 0;
+				position: relative;
+				z-index: 1;
+
+				&::after {
+					content: '';
+					position: absolute;
+					top: vw(-50);
+					left: vw(3);
+					width: 1px;
+					height: vw(110);
+					background-color: $grayEF;
+					z-index: 0;
+				}
+			}
+
+			.tips {
+				font-size: vw(12);
+				color: $gray3;
+			}
+
+			.tips-gray9 {
+				font-size: vw(12);
+				color: $gray9;
+			}
+
+			.circle-empty {
+				width: vw(20);
+			}
+
+			.step {
+				@include flex-y(flex-start, flex-start);
+			}
+		}
+	}
+</style>

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