Your Name 1 month ago
commit
c7a8a966a9
100 changed files with 48269 additions and 0 deletions
  1. 6 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. 9 0
      env.prd.js
  7. 17114 0
      package-lock.json
  8. 109 0
      package.json
  9. 22 0
      postcss.config.js
  10. 28 0
      public/index.html
  11. 61 0
      src/App.vue
  12. 27 0
      src/androidPrivacy.json
  13. 206 0
      src/common/api.ts
  14. 39 0
      src/common/constants.ts
  15. 37 0
      src/common/error.ts
  16. 22 0
      src/common/http/config.ts
  17. 158 0
      src/common/http/http.ts
  18. 17 0
      src/common/http/index.ts
  19. 5379 0
      src/common/jsencrypt.js
  20. 365 0
      src/common/mixins/canvasMixin.ts
  21. 42 0
      src/common/mixins/loginMixin.ts
  22. 0 0
      src/common/qqmap-wx-jssdk.min.js
  23. 192 0
      src/common/store/base/index.ts
  24. 45 0
      src/common/store/canvas/index.ts
  25. 29 0
      src/common/store/index.ts
  26. 52 0
      src/common/store/types.ts
  27. 143 0
      src/common/utils.ts
  28. 4 0
      src/common/weapp.qrcode.min.js
  29. 209 0
      src/components/AddressPopup/AddressPopup.vue
  30. 162 0
      src/components/AppShare/AppShare.vue
  31. 76 0
      src/components/BottomPopup/BottomPopup.vue
  32. 172 0
      src/components/GoodItem/GoodItem.vue
  33. 206 0
      src/components/GoodsShare/GoodsShare.vue
  34. 43 0
      src/components/IconText/IconText.vue
  35. 539 0
      src/components/IconText/demo.css
  36. 3592 0
      src/components/IconText/demo_index.html
  37. 607 0
      src/components/IconText/iconfont.css
  38. 0 0
      src/components/IconText/iconfont.js
  39. 1045 0
      src/components/IconText/iconfont.json
  40. BIN
      src/components/IconText/iconfont.ttf
  41. BIN
      src/components/IconText/iconfont.woff
  42. BIN
      src/components/IconText/iconfont.woff2
  43. 184 0
      src/components/ImgUpload/ImgUpload.vue
  44. 355 0
      src/components/MiniSpec/MiniSpec.vue
  45. 201 0
      src/components/MulImgUpload/MulImgUpload.vue
  46. 173 0
      src/components/MulVideoUpload/MulVideoUpload.vue
  47. 195 0
      src/components/Navbar/Navbar.vue
  48. 94 0
      src/components/NoData/NoData.vue
  49. 129 0
      src/components/OrderItem/OrderItem.vue
  50. 229 0
      src/components/Password/Password.vue
  51. 156 0
      src/components/SearchBox/SearchBox.vue
  52. 162 0
      src/components/ShopShare/ShopShare.vue
  53. 139 0
      src/components/ShowModal/ShowModal.vue
  54. 464 0
      src/components/SpecPopup/SpecPopup.vue
  55. 165 0
      src/components/Stepper/Stepper.vue
  56. 59 0
      src/components/SwiperBanner/SwiperBanner.md
  57. 256 0
      src/components/SwiperBanner/SwiperBanner.vue
  58. 96 0
      src/components/TabBar/TabBar.vue
  59. 192 0
      src/components/Tabs/Tabs.vue
  60. 21 0
      src/main.ts
  61. 154 0
      src/manifest.json
  62. 63 0
      src/packages/authorization/agreement.ts
  63. 221 0
      src/packages/authorization/authorization.vue
  64. 111 0
      src/packages/goods/add-detail.vue
  65. 586 0
      src/packages/goods/add-good.vue
  66. 35 0
      src/packages/goods/area.vue
  67. 627 0
      src/packages/goods/attrs-setting.vue
  68. 1020 0
      src/packages/goods/good-detail.vue
  69. 258 0
      src/packages/goods/goods-examine.vue
  70. 505 0
      src/packages/goods/goods-manage.vue
  71. 466 0
      src/packages/goods/search.vue
  72. 362 0
      src/packages/order/address-detail.vue
  73. 288 0
      src/packages/order/address-manage.vue
  74. 970 0
      src/packages/order/create-order.vue
  75. 226 0
      src/packages/order/deliver-goods.vue
  76. 253 0
      src/packages/order/logistics.vue
  77. 928 0
      src/packages/order/order-detail.vue
  78. 836 0
      src/packages/order/order-list.vue
  79. 122 0
      src/packages/order/pay-success.vue
  80. 600 0
      src/packages/user/business/add-business.vue
  81. 538 0
      src/packages/user/business/add-online-sale.vue
  82. 39 0
      src/packages/user/business/agreement.ts
  83. 145 0
      src/packages/user/business/area-business.vue
  84. 131 0
      src/packages/user/business/business-detail.vue
  85. 164 0
      src/packages/user/business/examine-list.vue
  86. 415 0
      src/packages/user/business/examine.vue
  87. 145 0
      src/packages/user/business/my-business.vue
  88. 323 0
      src/packages/user/business/yyzx-apply.vue
  89. 143 0
      src/packages/user/business/yyzx-yl.vue
  90. 322 0
      src/packages/user/business/zyyzx-apply.vue
  91. 203 0
      src/packages/user/fund/data-statistics.vue
  92. 192 0
      src/packages/user/fund/kpi.vue
  93. 626 0
      src/packages/user/fund/message-publish.vue
  94. 118 0
      src/packages/user/fund/recommend-list.vue
  95. 193 0
      src/packages/user/fund/record-all.vue
  96. 228 0
      src/packages/user/fund/record-recharge.vue
  97. 252 0
      src/packages/user/fund/record.vue
  98. 264 0
      src/packages/user/fund/reward.vue
  99. 555 0
      src/packages/user/fund/want-buy.vue
  100. 486 0
      src/packages/user/fund/withdraw-type.vue

+ 6 - 0
.env.dev.js

@@ -0,0 +1,6 @@
+module.exports = {
+  VUE_APP_USER_NAME: 'ybl',
+  VUE_APP_REMOTE_HOST: 'ybl-api-dev-go.datounet.com',
+  // VUE_APP_REMOTE_HOST: 'ybl-api.datouit.com',
+}
+// appid: wx69599a5147bbc600

+ 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
+}

+ 9 - 0
env.prd.js

@@ -0,0 +1,9 @@
+module.exports = {
+  VUE_APP_USER_NAME: 'ybl',
+  VUE_APP_REMOTE_HOST: 'ybl-api.datouit.com',
+  // VUE_APP_REMOTE_HOST: 'ybl-api-dev-go.datounet.com',
+  
+  // appid wx69599a5147bbc600
+  
+  // gsu684cp
+}

+ 17114 - 0
package-lock.json

@@ -0,0 +1,17114 @@
+{
+  "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=",
+      "dev": true,
+      "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="
+    },
+    "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"
+      }
+    },
+    "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
+    },
+    "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"
+      }
+    },
+    "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
+    },
+    "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=",
+      "dev": true
+    },
+    "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
+    },
+    "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-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
+        }
+      }
+    }
+  }
+}

+ 109 - 0
package.json

@@ -0,0 +1,109 @@
+{
+  "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",
+    "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-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')
+  ]
+}

+ 28 - 0
public/index.html

@@ -0,0 +1,28 @@
+<!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>
+        <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 3552342 */
+		src: url('//at.alicdn.com/t/c/font_3552342_hw0f26baqcj.woff2?t=1693388077712') format('woff2'),
+			url('//at.alicdn.com/t/c/font_3552342_hw0f26baqcj.woff?t=1693388077712') format('woff'),
+			url('//at.alicdn.com/t/c/font_3552342_hw0f26baqcj.ttf?t=1693388077712') format('truetype');
+	}
+
+	@font-face {
+		font-family: 'iconfont';
+		/* Project id 2795104 */
+		src: url('https://at.alicdn.com/t/font_2795104_ime1yj7fzpr.woff2?t=1639465471661') format('woff2'),
+			url('https://at.alicdn.com/t/font_2795104_ime1yj7fzpr.woff?t=1639465471661') format('woff'),
+			url('https://at.alicdn.com/t/font_2795104_ime1yj7fzpr.ttf?t=1639465471661') format('truetype');
+	}
+
+	page {
+		background-color: #F6F6F6;
+	}
+</style>

+ 27 - 0
src/androidPrivacy.json

@@ -0,0 +1,27 @@
+{
+	"version": "1",
+	"prompt": "template",
+	"title": "隐私保护提示",
+	"message": "  欢迎您使用绿价比商城APP系统应用,提醒用户在注册成为用户之前,请认真阅读本<a href=\"https://yzl-img.datouit.com/index1.html\">《绿价比商城APP系统用户协议》</a>及<a href=\"https://yzl-img.datouit.com/index2.html\">《绿价比商城APP系统隐私协议》</a>,确保您充分理解本协议中各条款。<br>  请您审慎阅读并选择接受或不接受本协议。在此您注册成为本应用用户后,您的注册、登录、使用等行为将视为对本协议的接受,并同意接受本协议各项条款的约束。<br>  本协议由山东悦贝链科技发展有限公司与用户之间关于“绿价比商城APP系统”应用的使用规范进行相互约定服务。",
+	"buttonAccept": "同意",
+	"buttonRefuse": "不同意",
+	"hrefLoader": "system|default",
+	"backToExit": "true",
+	"second": {
+		"title": "确认提示",
+		"message": "  您需要阅读并同意该协议,才能继续使用该应用",
+		"buttonAccept": "同意并继续",
+		"buttonRefuse": "退出应用"
+	},
+	"disagreeMode": {
+		"support": false,
+		"loadNativePlugins": false,
+		"showAlways": false
+	},
+	"styles": {
+		"buttonAccept": {
+			"color": "#6ABCE6",
+			"borderRadius": "5px"
+		}
+	}
+}

+ 206 - 0
src/common/api.ts

@@ -0,0 +1,206 @@
+// import { $http } from '@/common/http';
+
+
+export default {
+	getVideoList: '/news/video/list',
+	getList: '/admin/news/study/Pclist',
+	login: '/b/shop/user/login',
+	register: '/b/shop/user/register',
+	logout: '/admin/signout',
+	Qrcode: '/common/wx/mini/code',
+	bindReferrer: '/user/user/bind/referrer', //绑定临时上级
+	getShareInfo: '/user/setup/share/info', //C端分享设置详情
+	getArticle: '/user/setup/teletext/list', //图文设置列
+	sendCodeBase: '/common/send/sms/code',
+	sendCode: '/common/send/sms/code',
+	verifyCode: '/common/verify/sms/code',
+	hasPhone: '/user/user/phone/exist',
+	
+	bindId: '/user/order/notify/bind/manager', 
+	
+	getVersion: '/user/setup/check/version', //获取app当前版本号
+
+	// 商品相关=====================
+	getBannerList: '/user/setup/banner/get',//轮播图
+	getCategoryList: '/user/goods/sort/list', // 分类列表
+	getGoodsList: '/user/goods/list', // 商品列表
+	getGoodsInfo: '/user/goods/info', // 商品详情
+
+	// 购物车
+	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',//地区编码, //获取省市区地址
+
+	// 图文
+	getSourceGroupList: '/user/image/group/list',	//获取分组列表
+	updateSourceGroup: '/user/image/group/update',	//修改分组
+	deleteSourceGroup: '/user/image/group/delete',	//删除分组
+	orderBySourceGroup: '/user/image/group/orderBy',  //修改分组排序
+	getSourceGroupInfo: '/user/image/group/info', //分组详情
+	addSourceGroup: '/user/image/group/add', //添加分组
+
+	getSourceList: '/user/image/list', // 获取素材列表
+	addSource: '/user/image/add', // 添加素材
+	updateSource: '/user/image/update', // 修改素材
+	sourceInfo: '/user/image/info', // 素材详情
+	deleteSource: '/user/image/delete', // 删除素材
+	canSource: '/user/image/check', // 检查是否有添加素材权限
+
+	// 订单相关=====================
+	orderList: '/b/order/list', // 订单列表
+	orderDetail: '/b/order/info', // 订单详情
+	logistics: '/b/order/query/logistic', // 物流信息
+	cancelOrder: '/b/order/cancel', // 取消订单
+	confirmOrder: '/b/order/confirm', // 确认收货
+	submitOrder: '/b/order/query/payment', //计算订单应付金额
+	createOrder: '/b/order/create', // 创建订单
+	getPayParmas: '/b/pay/create',// 拉取支付参数
+	closePay: '/b/pay/close', //关闭支付
+	getOrderNum: '/b/order/count/num', //查询各状态订单数量
+	getLogisticsInfo: '/b/order/query/logistic', //获取物流信息
+	deliveryOrder: '/b/order/delivery',
+	updateOrderLogistic: '/b/order/update/logistic',
+
+	// 我的
+	getFansList: '/user/user/fans/list',  //获取盟友、粉丝列表
+	getUserInfo: '/user/user/info',//查询个人信息
+	getUserInfo2: '/user/user/get/info',//查询个人信息
+	getUserInfoByUid: '/user/user/base/info', //指定uid查询用户基本信息
+	updateUserInfo: '/user/user/update/info',//更新个人信息
+	updatePhone: '/user/user/bind/phone', //绑定手机号
+	getHeadPic: '/user/user/head/pic', //支付后,获取最近团长的二维码
+	setHeadPic: '/user/user/head/pic/set', //设置团长二维码
+
+	getBusinessList: '/user/shop/my/manage/list', //我的商家列表
+
+	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/get', //商家类型
+	addBusiness: '/user/shop/manage/add', //商家入驻
+	getBusinessInfo: '/user/shop/manage/info', //入驻商家详情
+	updateBusinessInfo: '/user/shop/manage/update', //编辑商家入驻信息
+	getBusinessDetail: '/user/shop/my/manage/info', //入驻商家详情
+
+	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', //设置登录密码
+	setPwd: '/b/shop/user/set/pass', //设置登录密码
+	setPayPwd: '/user/user/pay/password/set', //设置支付密码
+	getBalance: '/user/fund/get/balance/and/integral', //查询余额、积分、是否设置安全密码
+
+	getHuazhi: '/user/fund/get/integral/and/gold/detail', //查询积分、悦贝详情
+	getFunList: '/b/fund/list', //资金记录列表
+	getDataSum: '/user/fund/sum', //资金数据统计
+	getGoldPrice: '/user/fund/get/official/gold/price', //查询悦贝兑换产品系数
+
+	reward: '/user/fund/reward', //商家打赏
+
+	areaBusiness: '/user/shop/manage/head', //区域商家列表
+
+	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/shop/type/get', //商家类型列表
+	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/get/group/sum', //查询团队数据统计
+	
+	getMessage: '/user/fund/purchase/list/message',
+	
+	
+	getWithdrawInfo: '/user/sell/datum/info',
+	addWithdraw: '/user/sell/datum/add',
+	withdraw: '/user/sell/log/add',
+	
+	
+	
+	
+	deleteAccount: '/user/user/write/off',
+	
+	
+	
+	
+	
+	
+	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',
+	
+	
+	getShopQrInfo: '/b/shop/qr/info',
+	setShopQrRatio: '/b/shop/set/qr/ratio',
+	
+	
+	getFreightList: '/b/freight/list', // 运费模板列表
+	getFreightInfo: '/b/freight/info', // 运费模板详情
+	addFreight: '/b/freight/add', // 创建运费模板
+	updateFreight: '/b/freight/update', // 编辑运费模板
+	deleteFreight: '/b/freight/delete', // 删除运费模板
+	getAreaName: '/b/freight/name/list',
+	
+}

+ 39 - 0
src/common/constants.ts

@@ -0,0 +1,39 @@
+const EDITOR_CONTAINER_PADDING = 20;
+const LOGIN_URL = '/pages/login/login';
+const PHONE_LOGIN_URL = '/pages/login/phone-login';
+const OSS_STATIC = 'https://ybl-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://ybl-img.datouit.com/area/allArea.json';
+const PHONENNUMBER = '15554669791';
+// const EMAIL = '';
+const EMAIL = '';
+// const APPID = '';	//正式
+const APPID = '';	//测试
+const PAYCODE = 'https://ybl-img.datouit.com/pay/code.png';
+const APP_BASE_URL = 'https://ybl-img.datouit.com/app/';
+
+function RegPhone(str: string) {
+	// let regu = /^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$/;
+	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,
+	EMAIL,
+	APPID,
+	PAYCODE,
+	APP_BASE_URL
+};

+ 37 - 0
src/common/error.ts

@@ -0,0 +1,37 @@
+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 {
+	let retcode = parseInt(err.status);
+	if (retcode === 5001001 || retcode === 2000002 || retcode === 2000001) {
+		toLogin();
+		// Store.commit(types.LOGOUT);
+	} else if (retcode === 5012004) {
+		toLogin();
+		// Store.commit(types.LOGOUT);
+	} else if (retcode === 5001002) {
+		toLogin();
+		// Store.commit(types.LOGOUT);
+	} else if (retcode >= 3001001 && retcode <= 3002000) {
+		// window.location.href = '/'
+	} else if (retcode >= 3002001 && retcode <= 3002999) {
+		// window.location.href = '/user';
+	}
+	// uni.showModal({
+	// 	content: err.msg,
+	// 	confirmText: '知道了',
+	// });
+	setTimeout(() => {
+		uni.showToast({ title: err.msg, duration: 2000, icon: 'none' });
+	}, 100);
+};
+
+const toLogin = function(){
+	Store.commit(`base/${types.LOGOUT}`);
+	router.push({
+		path: LOGIN_URL
+	});
+}
+
+export default error_handle;

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

@@ -0,0 +1,22 @@
+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 === 'yzl-h5-dev.datounet.com'){
+	baseUrl = `https://yzl-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.status === 2000000) {
+						resolve(data.res);
+					} 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
+	});
+
+})));

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

@@ -0,0 +1,365 @@
+//@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: sceneStr }
+			})
+			.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 {
+		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');
+			}
+		});
+	}
+	// 文字省略号
+	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 => 图片文件路径,可以是临时文件路径或永久文件路径 (本地路径) ,不支持网络路径
+					 */
+					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
+								});
+							}
+						}
+					});
+				},
+				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.info)
+		  }
+		})
+		.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


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

@@ -0,0 +1,192 @@
+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,
+	SET_NOSHIPMENT,
+	SET_NEWAREA
+} from '@/common/store/types';
+
+const module = {
+  namespaced: true,
+  state() {
+    return {
+       token: uni.getStorageSync('token'),
+	   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:'',
+	   noShipment: [],
+	   newArea: []
+    }
+  },
+  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)),
+	_noShipment: (state:any) => state.noShipment,
+	_newArea: (state:any) => state.newArea,
+  },
+  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);
+	},
+	[SET_NOSHIPMENT]: (state:any, data:any) => {
+	  state.noShipment = data;
+	},
+	[SET_NEWAREA]: (state:any, data:any) => {
+	  state.newArea = data;
+	},
+  },
+  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,
+};

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

@@ -0,0 +1,52 @@
+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';
+const SET_NOSHIPMENT = 'setNoShipment';
+const SET_NEWAREA = 'setNewArea';
+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,
+  SET_NOSHIPMENT,
+  SET_NEWAREA
+};

+ 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="toEditress(item)">&#xe6fc;</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 $bk-color;
+
+							.small-quan {
+								@include wh(14, 14);
+								border-radius: 100%;
+								background-color: $bk-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, 10);
+			margin: vw(20) auto 0 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>

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

@@ -0,0 +1,76 @@
+<template>
+	<view>
+		<uni-popup ref="bottom_popup" type="bottom" is-mask-click="true" :safe-area="false">
+			<view class="long-data-picker">
+				<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>
+	.item {
+		height: vw(54);
+		background: #fff;
+		border-bottom: vw(1) solid #ddd;
+		@include flex-x(center);
+		@include word-vw(14, #333);
+	}
+
+	.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="`\ueb89`" size="18" color="#FA402B"></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,
+					gid: this.item.gid
+				}
+			});
+		}
+	}
+</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, #E33C64);
+					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, #E33C64);
+					font-weight: 600;
+				}
+			}
+		}
+	}
+</style>

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

@@ -0,0 +1,206 @@
+<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, '#FF2B3F', 'bold ');
+			this.textSet(
+				ctx,
+				Number(that.goodsInfo.minPrice).toFixed(2),
+				'19px',
+				19,
+				356,
+				'#FF2B3F',
+				'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>

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

@@ -0,0 +1,43 @@
+<template>
+	<view class="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';
+	.box{
+		@include flex-x(center);
+		background: transparent;
+	}
+	.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;
+}

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

@@ -0,0 +1,3592 @@
+<!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=3552342" 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">&#xe88c;</span>
+                <div class="name">zhanghu</div>
+                <div class="code-name">&amp;#xe88c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe883;</span>
+                <div class="name">画板33555</div>
+                <div class="code-name">&amp;#xe883;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe890;</span>
+                <div class="name">5asd</div>
+                <div class="code-name">&amp;#xe890;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe880;</span>
+                <div class="name">xuhao</div>
+                <div class="code-name">&amp;#xe880;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe881;</span>
+                <div class="name">a-shanchu</div>
+                <div class="code-name">&amp;#xe881;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe882;</span>
+                <div class="name">shanchu-67</div>
+                <div class="code-name">&amp;#xe882;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe884;</span>
+                <div class="name">eye-off-fill</div>
+                <div class="code-name">&amp;#xe884;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe885;</span>
+                <div class="name">eye-fill</div>
+                <div class="code-name">&amp;#xe885;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe886;</span>
+                <div class="name">ju866</div>
+                <div class="code-name">&amp;#xe886;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe887;</span>
+                <div class="name">331sss</div>
+                <div class="code-name">&amp;#xe887;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe888;</span>
+                <div class="name">peisongguanli</div>
+                <div class="code-name">&amp;#xe888;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe889;</span>
+                <div class="name">e3334</div>
+                <div class="code-name">&amp;#xe889;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe88a;</span>
+                <div class="name">shangpinguanli-4</div>
+                <div class="code-name">&amp;#xe88a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe88b;</span>
+                <div class="name">6yyyr</div>
+                <div class="code-name">&amp;#xe88b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe88d;</span>
+                <div class="name">1swwe</div>
+                <div class="code-name">&amp;#xe88d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe88e;</span>
+                <div class="name">ic_edit</div>
+                <div class="code-name">&amp;#xe88e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe88f;</span>
+                <div class="name">ase</div>
+                <div class="code-name">&amp;#xe88f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe87e;</span>
+                <div class="name">xiajia</div>
+                <div class="code-name">&amp;#xe87e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe87f;</span>
+                <div class="name">shangpinshenhe</div>
+                <div class="code-name">&amp;#xe87f;</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">分组 7</div>
+                <div class="code-name">&amp;#xe748;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe749;</span>
+                <div class="name">分组 1 (2)</div>
+                <div class="code-name">&amp;#xe749;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74b;</span>
+                <div class="name">分组 1</div>
+                <div class="code-name">&amp;#xe74b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74c;</span>
+                <div class="name">图层_2</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">分组 1 (4)</div>
+                <div class="code-name">&amp;#xe74e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74f;</span>
+                <div class="name">分组 1 (1)</div>
+                <div class="code-name">&amp;#xe74f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe750;</span>
+                <div class="name">分组 10 (5)</div>
+                <div class="code-name">&amp;#xe750;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe751;</span>
+                <div class="name">分组 9</div>
+                <div class="code-name">&amp;#xe751;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe752;</span>
+                <div class="name">分组 6</div>
+                <div class="code-name">&amp;#xe752;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe87b;</span>
+                <div class="name">qiandaosl</div>
+                <div class="code-name">&amp;#xe87b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe87c;</span>
+                <div class="name">xiaoxzhongx</div>
+                <div class="code-name">&amp;#xe87c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe87d;</span>
+                <div class="name">temanrili</div>
+                <div class="code-name">&amp;#xe87d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe72e;</span>
+                <div class="name">减圈-01</div>
+                <div class="code-name">&amp;#xe72e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe73e;</span>
+                <div class="name">分组 29</div>
+                <div class="code-name">&amp;#xe73e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe73f;</span>
+                <div class="name">分组 28</div>
+                <div class="code-name">&amp;#xe73f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe701;</span>
+                <div class="name">粘贴</div>
+                <div class="code-name">&amp;#xe701;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe72b;</span>
+                <div class="name">jiah</div>
+                <div class="code-name">&amp;#xe72b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe72c;</span>
+                <div class="name">jianh</div>
+                <div class="code-name">&amp;#xe72c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe735;</span>
+                <div class="name">分组 1</div>
+                <div class="code-name">&amp;#xe735;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74a;</span>
+                <div class="name">Edit Square</div>
+                <div class="code-name">&amp;#xe74a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe712;</span>
+                <div class="name">Group (1)</div>
+                <div class="code-name">&amp;#xe712;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe713;</span>
+                <div class="name">Group (8)</div>
+                <div class="code-name">&amp;#xe713;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe714;</span>
+                <div class="name">Group (2)</div>
+                <div class="code-name">&amp;#xe714;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe715;</span>
+                <div class="name">Group (5)</div>
+                <div class="code-name">&amp;#xe715;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe716;</span>
+                <div class="name">Group (12)</div>
+                <div class="code-name">&amp;#xe716;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe717;</span>
+                <div class="name">Group (9)</div>
+                <div class="code-name">&amp;#xe717;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe718;</span>
+                <div class="name">Group (17)</div>
+                <div class="code-name">&amp;#xe718;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe719;</span>
+                <div class="name">Group (16)</div>
+                <div class="code-name">&amp;#xe719;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe71a;</span>
+                <div class="name">Group (19)</div>
+                <div class="code-name">&amp;#xe71a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe71b;</span>
+                <div class="name">Group (13)</div>
+                <div class="code-name">&amp;#xe71b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe71c;</span>
+                <div class="name">Group (4)</div>
+                <div class="code-name">&amp;#xe71c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe71d;</span>
+                <div class="name">Group (7)</div>
+                <div class="code-name">&amp;#xe71d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe71e;</span>
+                <div class="name">Group (14)</div>
+                <div class="code-name">&amp;#xe71e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe71f;</span>
+                <div class="name">Group (10)</div>
+                <div class="code-name">&amp;#xe71f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe720;</span>
+                <div class="name">Group (11)</div>
+                <div class="code-name">&amp;#xe720;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe721;</span>
+                <div class="name">Group (18)</div>
+                <div class="code-name">&amp;#xe721;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe722;</span>
+                <div class="name">Group</div>
+                <div class="code-name">&amp;#xe722;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe723;</span>
+                <div class="name">Group (15)</div>
+                <div class="code-name">&amp;#xe723;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe724;</span>
+                <div class="name">Group (21)</div>
+                <div class="code-name">&amp;#xe724;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe725;</span>
+                <div class="name">Group (24)</div>
+                <div class="code-name">&amp;#xe725;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe726;</span>
+                <div class="name">Group (23)</div>
+                <div class="code-name">&amp;#xe726;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe727;</span>
+                <div class="name">Group (6)</div>
+                <div class="code-name">&amp;#xe727;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe728;</span>
+                <div class="name">Group (3)</div>
+                <div class="code-name">&amp;#xe728;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe729;</span>
+                <div class="name">Group (22)</div>
+                <div class="code-name">&amp;#xe729;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe72a;</span>
+                <div class="name">Group (20)</div>
+                <div class="code-name">&amp;#xe72a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe70d;</span>
+                <div class="name">分组 1 (1)</div>
+                <div class="code-name">&amp;#xe70d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe70e;</span>
+                <div class="name">分组 15</div>
+                <div class="code-name">&amp;#xe70e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe70f;</span>
+                <div class="name">分组 18</div>
+                <div class="code-name">&amp;#xe70f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe710;</span>
+                <div class="name">分组 16</div>
+                <div class="code-name">&amp;#xe710;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6bd;</span>
+                <div class="name">商家</div>
+                <div class="code-name">&amp;#xe6bd;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe645;</span>
+                <div class="name">SQL审核</div>
+                <div class="code-name">&amp;#xe645;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe660;</span>
+                <div class="name">统计</div>
+                <div class="code-name">&amp;#xe660;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xeb61;</span>
+                <div class="name">测试申请</div>
+                <div class="code-name">&amp;#xeb61;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe646;</span>
+                <div class="name">提现明细</div>
+                <div class="code-name">&amp;#xe646;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe66f;</span>
+                <div class="name">入驻申请</div>
+                <div class="code-name">&amp;#xe66f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe638;</span>
+                <div class="name">发布求购</div>
+                <div class="code-name">&amp;#xe638;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xeb89;</span>
+                <div class="name">icon_添加</div>
+                <div class="code-name">&amp;#xeb89;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe601;</span>
+                <div class="name">扫码</div>
+                <div class="code-name">&amp;#xe601;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe628;</span>
+                <div class="name">ZS二维码</div>
+                <div class="code-name">&amp;#xe628;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe72d;</span>
+                <div class="name">问号</div>
+                <div class="code-name">&amp;#xe72d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe634;</span>
+                <div class="name">支付宝支付</div>
+                <div class="code-name">&amp;#xe634;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe688;</span>
+                <div class="name">支付宝</div>
+                <div class="code-name">&amp;#xe688;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe600;</span>
+                <div class="name">play</div>
+                <div class="code-name">&amp;#xe600;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe87a;</span>
+                <div class="name">fanhui</div>
+                <div class="code-name">&amp;#xe87a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe876;</span>
+                <div class="name">jianshaosp</div>
+                <div class="code-name">&amp;#xe876;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe877;</span>
+                <div class="name">bianjidz</div>
+                <div class="code-name">&amp;#xe877;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe878;</span>
+                <div class="name">zengjiasp</div>
+                <div class="code-name">&amp;#xe878;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe879;</span>
+                <div class="name">chengg1</div>
+                <div class="code-name">&amp;#xe879;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe86d;</span>
+                <div class="name">bianjdz</div>
+                <div class="code-name">&amp;#xe86d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe86e;</span>
+                <div class="name">jiancgx</div>
+                <div class="code-name">&amp;#xe86e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe86f;</span>
+                <div class="name">cjtoux</div>
+                <div class="code-name">&amp;#xe86f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe870;</span>
+                <div class="name">kanb</div>
+                <div class="code-name">&amp;#xe870;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe871;</span>
+                <div class="name">lianxwm</div>
+                <div class="code-name">&amp;#xe871;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe872;</span>
+                <div class="name">qingkssnr</div>
+                <div class="code-name">&amp;#xe872;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe873;</span>
+                <div class="name">xuanzdz</div>
+                <div class="code-name">&amp;#xe873;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe874;</span>
+                <div class="name">lieb</div>
+                <div class="code-name">&amp;#xe874;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe875;</span>
+                <div class="name">yuezhif</div>
+                <div class="code-name">&amp;#xe875;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe863;</span>
+                <div class="name">gouwuche</div>
+                <div class="code-name">&amp;#xe863;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe864;</span>
+                <div class="name">gouwc2</div>
+                <div class="code-name">&amp;#xe864;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe865;</span>
+                <div class="name">shouye</div>
+                <div class="code-name">&amp;#xe865;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe866;</span>
+                <div class="name">quanbfl2</div>
+                <div class="code-name">&amp;#xe866;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe867;</span>
+                <div class="name">quanbfl</div>
+                <div class="code-name">&amp;#xe867;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe868;</span>
+                <div class="name">shouye2</div>
+                <div class="code-name">&amp;#xe868;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe869;</span>
+                <div class="name">shangq</div>
+                <div class="code-name">&amp;#xe869;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe86a;</span>
+                <div class="name">shangq2</div>
+                <div class="code-name">&amp;#xe86a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe86b;</span>
+                <div class="name">wode</div>
+                <div class="code-name">&amp;#xe86b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe86c;</span>
+                <div class="name">wode2</div>
+                <div class="code-name">&amp;#xe86c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe859;</span>
+                <div class="name">wulxx</div>
+                <div class="code-name">&amp;#xe859;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe85a;</span>
+                <div class="name">weixzye</div>
+                <div class="code-name">&amp;#xe85a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe85b;</span>
+                <div class="name">yelxkf</div>
+                <div class="code-name">&amp;#xe85b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe85c;</span>
+                <div class="name">xianxcz</div>
+                <div class="code-name">&amp;#xe85c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe85d;</span>
+                <div class="name">xuanzye</div>
+                <div class="code-name">&amp;#xe85d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe85e;</span>
+                <div class="name">xianscz</div>
+                <div class="code-name">&amp;#xe85e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe85f;</span>
+                <div class="name">xxfkpzjt</div>
+                <div class="code-name">&amp;#xe85f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe860;</span>
+                <div class="name">lxptsh</div>
+                <div class="code-name">&amp;#xe860;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe861;</span>
+                <div class="name">zhifbzf</div>
+                <div class="code-name">&amp;#xe861;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe862;</span>
+                <div class="name">yuehz</div>
+                <div class="code-name">&amp;#xe862;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe84f;</span>
+                <div class="name">daifk</div>
+                <div class="code-name">&amp;#xe84f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe850;</span>
+                <div class="name">daifh</div>
+                <div class="code-name">&amp;#xe850;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe851;</span>
+                <div class="name">shouhdz</div>
+                <div class="code-name">&amp;#xe851;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe852;</span>
+                <div class="name">dianpdh</div>
+                <div class="code-name">&amp;#xe852;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe853;</span>
+                <div class="name">dangqwz</div>
+                <div class="code-name">&amp;#xe853;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe854;</span>
+                <div class="name">daishouh</div>
+                <div class="code-name">&amp;#xe854;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe855;</span>
+                <div class="name">yishouh</div>
+                <div class="code-name">&amp;#xe855;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe856;</span>
+                <div class="name">guanywm</div>
+                <div class="code-name">&amp;#xe856;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe857;</span>
+                <div class="name">yuexq</div>
+                <div class="code-name">&amp;#xe857;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe858;</span>
+                <div class="name">tuijghy</div>
+                <div class="code-name">&amp;#xe858;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe845;</span>
+                <div class="name">bfhdq</div>
+                <div class="code-name">&amp;#xe845;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe846;</span>
+                <div class="name">fenx</div>
+                <div class="code-name">&amp;#xe846;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe847;</span>
+                <div class="name">guanbi</div>
+                <div class="code-name">&amp;#xe847;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe848;</span>
+                <div class="name">gwuc</div>
+                <div class="code-name">&amp;#xe848;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe849;</span>
+                <div class="name">huajfk</div>
+                <div class="code-name">&amp;#xe849;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe84a;</span>
+                <div class="name">youjt</div>
+                <div class="code-name">&amp;#xe84a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe84b;</span>
+                <div class="name">shouy</div>
+                <div class="code-name">&amp;#xe84b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe84c;</span>
+                <div class="name">wxzhif</div>
+                <div class="code-name">&amp;#xe84c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe84d;</span>
+                <div class="name">kefu</div>
+                <div class="code-name">&amp;#xe84d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe84e;</span>
+                <div class="name">weixz</div>
+                <div class="code-name">&amp;#xe84e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe83b;</span>
+                <div class="name">gouwc</div>
+                <div class="code-name">&amp;#xe83b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe83c;</span>
+                <div class="name">mima</div>
+                <div class="code-name">&amp;#xe83c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe83d;</span>
+                <div class="name">mimaks</div>
+                <div class="code-name">&amp;#xe83d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe83e;</span>
+                <div class="name">mimbks</div>
+                <div class="code-name">&amp;#xe83e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe83f;</span>
+                <div class="name">Vector</div>
+                <div class="code-name">&amp;#xe83f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe840;</span>
+                <div class="name">shoujh</div>
+                <div class="code-name">&amp;#xe840;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe841;</span>
+                <div class="name">sous1</div>
+                <div class="code-name">&amp;#xe841;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe842;</span>
+                <div class="name">weisy</div>
+                <div class="code-name">&amp;#xe842;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe843;</span>
+                <div class="name">yanzm</div>
+                <div class="code-name">&amp;#xe843;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe844;</span>
+                <div class="name">shanlsjl</div>
+                <div class="code-name">&amp;#xe844;</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=1689832876745') format('woff2'),
+       url('iconfont.woff?t=1689832876745') format('woff'),
+       url('iconfont.ttf?t=1689832876745') 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 icon-zhanghu"></span>
+            <div class="name">
+              zhanghu
+            </div>
+            <div class="code-name">.icon-zhanghu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-huaban33555"></span>
+            <div class="name">
+              画板33555
+            </div>
+            <div class="code-name">.icon-huaban33555
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-5asd"></span>
+            <div class="name">
+              5asd
+            </div>
+            <div class="code-name">.icon-a-5asd
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-xuhao"></span>
+            <div class="name">
+              xuhao
+            </div>
+            <div class="code-name">.icon-xuhao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-shanchu"></span>
+            <div class="name">
+              a-shanchu
+            </div>
+            <div class="code-name">.icon-a-shanchu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shanchu-67"></span>
+            <div class="name">
+              shanchu-67
+            </div>
+            <div class="code-name">.icon-shanchu-67
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-eye-off-fill"></span>
+            <div class="name">
+              eye-off-fill
+            </div>
+            <div class="code-name">.icon-eye-off-fill
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-eye-fill"></span>
+            <div class="name">
+              eye-fill
+            </div>
+            <div class="code-name">.icon-eye-fill
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-ju866"></span>
+            <div class="name">
+              ju866
+            </div>
+            <div class="code-name">.icon-ju866
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-331sss"></span>
+            <div class="name">
+              331sss
+            </div>
+            <div class="code-name">.icon-a-331sss
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-peisongguanli"></span>
+            <div class="name">
+              peisongguanli
+            </div>
+            <div class="code-name">.icon-peisongguanli
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-e3334"></span>
+            <div class="name">
+              e3334
+            </div>
+            <div class="code-name">.icon-e3334
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shangpinguanli-4"></span>
+            <div class="name">
+              shangpinguanli-4
+            </div>
+            <div class="code-name">.icon-shangpinguanli-4
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-6yyyr"></span>
+            <div class="name">
+              6yyyr
+            </div>
+            <div class="code-name">.icon-a-6yyyr
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-1swwe"></span>
+            <div class="name">
+              1swwe
+            </div>
+            <div class="code-name">.icon-a-1swwe
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-ic_edit"></span>
+            <div class="name">
+              ic_edit
+            </div>
+            <div class="code-name">.icon-ic_edit
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-ase"></span>
+            <div class="name">
+              ase
+            </div>
+            <div class="code-name">.icon-ase
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-xiajia"></span>
+            <div class="name">
+              xiajia
+            </div>
+            <div class="code-name">.icon-xiajia
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shangpinshenhe"></span>
+            <div class="name">
+              shangpinshenhe
+            </div>
+            <div class="code-name">.icon-shangpinshenhe
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu151"></span>
+            <div class="name">
+              分组 1 (5)
+            </div>
+            <div class="code-name">.icon-a-fenzu151
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu7"></span>
+            <div class="name">
+              分组 7
+            </div>
+            <div class="code-name">.icon-a-fenzu7
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu12"></span>
+            <div class="name">
+              分组 1 (2)
+            </div>
+            <div class="code-name">.icon-a-fenzu12
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu13"></span>
+            <div class="name">
+              分组 1
+            </div>
+            <div class="code-name">.icon-a-fenzu13
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-tuceng_2"></span>
+            <div class="name">
+              图层_2
+            </div>
+            <div class="code-name">.icon-tuceng_2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu131"></span>
+            <div class="name">
+              分组 1 (3)
+            </div>
+            <div class="code-name">.icon-a-fenzu131
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu14"></span>
+            <div class="name">
+              分组 1 (4)
+            </div>
+            <div class="code-name">.icon-a-fenzu14
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu111"></span>
+            <div class="name">
+              分组 1 (1)
+            </div>
+            <div class="code-name">.icon-a-fenzu111
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu105"></span>
+            <div class="name">
+              分组 10 (5)
+            </div>
+            <div class="code-name">.icon-a-fenzu105
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu9"></span>
+            <div class="name">
+              分组 9
+            </div>
+            <div class="code-name">.icon-a-fenzu9
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu6"></span>
+            <div class="name">
+              分组 6
+            </div>
+            <div class="code-name">.icon-a-fenzu6
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-qiandaosl"></span>
+            <div class="name">
+              qiandaosl
+            </div>
+            <div class="code-name">.icon-qiandaosl
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-xiaoxzhongx"></span>
+            <div class="name">
+              xiaoxzhongx
+            </div>
+            <div class="code-name">.icon-xiaoxzhongx
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-temanrili"></span>
+            <div class="name">
+              temanrili
+            </div>
+            <div class="code-name">.icon-temanrili
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-jianquan-01"></span>
+            <div class="name">
+              减圈-01
+            </div>
+            <div class="code-name">.icon-jianquan-01
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu29"></span>
+            <div class="name">
+              分组 29
+            </div>
+            <div class="code-name">.icon-a-fenzu29
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu28"></span>
+            <div class="name">
+              分组 28
+            </div>
+            <div class="code-name">.icon-a-fenzu28
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-niantie"></span>
+            <div class="name">
+              粘贴
+            </div>
+            <div class="code-name">.icon-niantie
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-jiah"></span>
+            <div class="name">
+              jiah
+            </div>
+            <div class="code-name">.icon-jiah
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-jianh"></span>
+            <div class="name">
+              jianh
+            </div>
+            <div class="code-name">.icon-jianh
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu1"></span>
+            <div class="name">
+              分组 1
+            </div>
+            <div class="code-name">.icon-a-fenzu1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-EditSquare"></span>
+            <div class="name">
+              Edit Square
+            </div>
+            <div class="code-name">.icon-EditSquare
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group1"></span>
+            <div class="name">
+              Group (1)
+            </div>
+            <div class="code-name">.icon-a-Group1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group8"></span>
+            <div class="name">
+              Group (8)
+            </div>
+            <div class="code-name">.icon-a-Group8
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group2"></span>
+            <div class="name">
+              Group (2)
+            </div>
+            <div class="code-name">.icon-a-Group2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group5"></span>
+            <div class="name">
+              Group (5)
+            </div>
+            <div class="code-name">.icon-a-Group5
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group12"></span>
+            <div class="name">
+              Group (12)
+            </div>
+            <div class="code-name">.icon-a-Group12
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group9"></span>
+            <div class="name">
+              Group (9)
+            </div>
+            <div class="code-name">.icon-a-Group9
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group17"></span>
+            <div class="name">
+              Group (17)
+            </div>
+            <div class="code-name">.icon-a-Group17
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group16"></span>
+            <div class="name">
+              Group (16)
+            </div>
+            <div class="code-name">.icon-a-Group16
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group19"></span>
+            <div class="name">
+              Group (19)
+            </div>
+            <div class="code-name">.icon-a-Group19
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group13"></span>
+            <div class="name">
+              Group (13)
+            </div>
+            <div class="code-name">.icon-a-Group13
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group4"></span>
+            <div class="name">
+              Group (4)
+            </div>
+            <div class="code-name">.icon-a-Group4
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group7"></span>
+            <div class="name">
+              Group (7)
+            </div>
+            <div class="code-name">.icon-a-Group7
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group14"></span>
+            <div class="name">
+              Group (14)
+            </div>
+            <div class="code-name">.icon-a-Group14
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group10"></span>
+            <div class="name">
+              Group (10)
+            </div>
+            <div class="code-name">.icon-a-Group10
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group11"></span>
+            <div class="name">
+              Group (11)
+            </div>
+            <div class="code-name">.icon-a-Group11
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group18"></span>
+            <div class="name">
+              Group (18)
+            </div>
+            <div class="code-name">.icon-a-Group18
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-Group"></span>
+            <div class="name">
+              Group
+            </div>
+            <div class="code-name">.icon-Group
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group15"></span>
+            <div class="name">
+              Group (15)
+            </div>
+            <div class="code-name">.icon-a-Group15
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group21"></span>
+            <div class="name">
+              Group (21)
+            </div>
+            <div class="code-name">.icon-a-Group21
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group24"></span>
+            <div class="name">
+              Group (24)
+            </div>
+            <div class="code-name">.icon-a-Group24
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group23"></span>
+            <div class="name">
+              Group (23)
+            </div>
+            <div class="code-name">.icon-a-Group23
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group6"></span>
+            <div class="name">
+              Group (6)
+            </div>
+            <div class="code-name">.icon-a-Group6
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group3"></span>
+            <div class="name">
+              Group (3)
+            </div>
+            <div class="code-name">.icon-a-Group3
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group22"></span>
+            <div class="name">
+              Group (22)
+            </div>
+            <div class="code-name">.icon-a-Group22
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-Group20"></span>
+            <div class="name">
+              Group (20)
+            </div>
+            <div class="code-name">.icon-a-Group20
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu11"></span>
+            <div class="name">
+              分组 1 (1)
+            </div>
+            <div class="code-name">.icon-a-fenzu11
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu15"></span>
+            <div class="name">
+              分组 15
+            </div>
+            <div class="code-name">.icon-a-fenzu15
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu18"></span>
+            <div class="name">
+              分组 18
+            </div>
+            <div class="code-name">.icon-a-fenzu18
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-fenzu16"></span>
+            <div class="name">
+              分组 16
+            </div>
+            <div class="code-name">.icon-a-fenzu16
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shangjia"></span>
+            <div class="name">
+              商家
+            </div>
+            <div class="code-name">.icon-shangjia
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-SQLshenhe"></span>
+            <div class="name">
+              SQL审核
+            </div>
+            <div class="code-name">.icon-SQLshenhe
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-tongji"></span>
+            <div class="name">
+              统计
+            </div>
+            <div class="code-name">.icon-tongji
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-ceshishenqing"></span>
+            <div class="name">
+              测试申请
+            </div>
+            <div class="code-name">.icon-ceshishenqing
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-tixianmingxi"></span>
+            <div class="name">
+              提现明细
+            </div>
+            <div class="code-name">.icon-tixianmingxi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-peizhitubiaosvg-"></span>
+            <div class="name">
+              入驻申请
+            </div>
+            <div class="code-name">.icon-peizhitubiaosvg-
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-fabuqiugou"></span>
+            <div class="name">
+              发布求购
+            </div>
+            <div class="code-name">.icon-fabuqiugou
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-icon_tianjia"></span>
+            <div class="name">
+              icon_添加
+            </div>
+            <div class="code-name">.icon-icon_tianjia
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-iconfontscan"></span>
+            <div class="name">
+              扫码
+            </div>
+            <div class="code-name">.icon-iconfontscan
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-erweima"></span>
+            <div class="name">
+              ZS二维码
+            </div>
+            <div class="code-name">.icon-erweima
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-wenhao"></span>
+            <div class="name">
+              问号
+            </div>
+            <div class="code-name">.icon-wenhao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-zhifubaozhifu"></span>
+            <div class="name">
+              支付宝支付
+            </div>
+            <div class="code-name">.icon-zhifubaozhifu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-zhifubao"></span>
+            <div class="name">
+              支付宝
+            </div>
+            <div class="code-name">.icon-zhifubao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-play"></span>
+            <div class="name">
+              play
+            </div>
+            <div class="code-name">.icon-play
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-fanhui"></span>
+            <div class="name">
+              fanhui
+            </div>
+            <div class="code-name">.icon-fanhui
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-jianshaosp"></span>
+            <div class="name">
+              jianshaosp
+            </div>
+            <div class="code-name">.icon-jianshaosp
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-bianjidz"></span>
+            <div class="name">
+              bianjidz
+            </div>
+            <div class="code-name">.icon-bianjidz
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-zengjiasp"></span>
+            <div class="name">
+              zengjiasp
+            </div>
+            <div class="code-name">.icon-zengjiasp
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-chengg1"></span>
+            <div class="name">
+              chengg1
+            </div>
+            <div class="code-name">.icon-chengg1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-bianjdz"></span>
+            <div class="name">
+              bianjdz
+            </div>
+            <div class="code-name">.icon-bianjdz
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-jiancgx"></span>
+            <div class="name">
+              jiancgx
+            </div>
+            <div class="code-name">.icon-jiancgx
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-cjtoux"></span>
+            <div class="name">
+              cjtoux
+            </div>
+            <div class="code-name">.icon-cjtoux
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-kanb"></span>
+            <div class="name">
+              kanb
+            </div>
+            <div class="code-name">.icon-kanb
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-lianxwm"></span>
+            <div class="name">
+              lianxwm
+            </div>
+            <div class="code-name">.icon-lianxwm
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-qingkssnr"></span>
+            <div class="name">
+              qingkssnr
+            </div>
+            <div class="code-name">.icon-qingkssnr
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-xuanzdz"></span>
+            <div class="name">
+              xuanzdz
+            </div>
+            <div class="code-name">.icon-xuanzdz
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-lieb"></span>
+            <div class="name">
+              lieb
+            </div>
+            <div class="code-name">.icon-lieb
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-yuezhif"></span>
+            <div class="name">
+              yuezhif
+            </div>
+            <div class="code-name">.icon-yuezhif
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-gouwuche"></span>
+            <div class="name">
+              gouwuche
+            </div>
+            <div class="code-name">.icon-gouwuche
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-gouwc2"></span>
+            <div class="name">
+              gouwc2
+            </div>
+            <div class="code-name">.icon-gouwc2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shouye"></span>
+            <div class="name">
+              shouye
+            </div>
+            <div class="code-name">.icon-shouye
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-quanbfl2"></span>
+            <div class="name">
+              quanbfl2
+            </div>
+            <div class="code-name">.icon-quanbfl2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-quanbfl"></span>
+            <div class="name">
+              quanbfl
+            </div>
+            <div class="code-name">.icon-quanbfl
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shouye2"></span>
+            <div class="name">
+              shouye2
+            </div>
+            <div class="code-name">.icon-shouye2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shangq"></span>
+            <div class="name">
+              shangq
+            </div>
+            <div class="code-name">.icon-shangq
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shangq2"></span>
+            <div class="name">
+              shangq2
+            </div>
+            <div class="code-name">.icon-shangq2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-wode"></span>
+            <div class="name">
+              wode
+            </div>
+            <div class="code-name">.icon-wode
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-wode2"></span>
+            <div class="name">
+              wode2
+            </div>
+            <div class="code-name">.icon-wode2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-wulxx"></span>
+            <div class="name">
+              wulxx
+            </div>
+            <div class="code-name">.icon-wulxx
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-weixzye"></span>
+            <div class="name">
+              weixzye
+            </div>
+            <div class="code-name">.icon-weixzye
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-yelxkf"></span>
+            <div class="name">
+              yelxkf
+            </div>
+            <div class="code-name">.icon-yelxkf
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-xianxcz"></span>
+            <div class="name">
+              xianxcz
+            </div>
+            <div class="code-name">.icon-xianxcz
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-xuanzye"></span>
+            <div class="name">
+              xuanzye
+            </div>
+            <div class="code-name">.icon-xuanzye
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-xianscz"></span>
+            <div class="name">
+              xianscz
+            </div>
+            <div class="code-name">.icon-xianscz
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-xxfkpzjt"></span>
+            <div class="name">
+              xxfkpzjt
+            </div>
+            <div class="code-name">.icon-xxfkpzjt
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-lxptsh"></span>
+            <div class="name">
+              lxptsh
+            </div>
+            <div class="code-name">.icon-lxptsh
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-zhifbzf"></span>
+            <div class="name">
+              zhifbzf
+            </div>
+            <div class="code-name">.icon-zhifbzf
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-yuehz"></span>
+            <div class="name">
+              yuehz
+            </div>
+            <div class="code-name">.icon-yuehz
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-daifk"></span>
+            <div class="name">
+              daifk
+            </div>
+            <div class="code-name">.icon-daifk
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-daifh"></span>
+            <div class="name">
+              daifh
+            </div>
+            <div class="code-name">.icon-daifh
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shouhdz"></span>
+            <div class="name">
+              shouhdz
+            </div>
+            <div class="code-name">.icon-shouhdz
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-dianpdh"></span>
+            <div class="name">
+              dianpdh
+            </div>
+            <div class="code-name">.icon-dianpdh
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-dangqwz"></span>
+            <div class="name">
+              dangqwz
+            </div>
+            <div class="code-name">.icon-dangqwz
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-daishouh"></span>
+            <div class="name">
+              daishouh
+            </div>
+            <div class="code-name">.icon-daishouh
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-yishouh"></span>
+            <div class="name">
+              yishouh
+            </div>
+            <div class="code-name">.icon-yishouh
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-guanywm"></span>
+            <div class="name">
+              guanywm
+            </div>
+            <div class="code-name">.icon-guanywm
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-yuexq"></span>
+            <div class="name">
+              yuexq
+            </div>
+            <div class="code-name">.icon-yuexq
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-tuijghy"></span>
+            <div class="name">
+              tuijghy
+            </div>
+            <div class="code-name">.icon-tuijghy
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-bfhdq"></span>
+            <div class="name">
+              bfhdq
+            </div>
+            <div class="code-name">.icon-bfhdq
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-fenx"></span>
+            <div class="name">
+              fenx
+            </div>
+            <div class="code-name">.icon-fenx
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-guanbi"></span>
+            <div class="name">
+              guanbi
+            </div>
+            <div class="code-name">.icon-guanbi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-gwuc"></span>
+            <div class="name">
+              gwuc
+            </div>
+            <div class="code-name">.icon-gwuc
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-huajfk"></span>
+            <div class="name">
+              huajfk
+            </div>
+            <div class="code-name">.icon-huajfk
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-youjt"></span>
+            <div class="name">
+              youjt
+            </div>
+            <div class="code-name">.icon-youjt
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shouy"></span>
+            <div class="name">
+              shouy
+            </div>
+            <div class="code-name">.icon-shouy
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-wxzhif"></span>
+            <div class="name">
+              wxzhif
+            </div>
+            <div class="code-name">.icon-wxzhif
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-kefu"></span>
+            <div class="name">
+              kefu
+            </div>
+            <div class="code-name">.icon-kefu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-weixz"></span>
+            <div class="name">
+              weixz
+            </div>
+            <div class="code-name">.icon-weixz
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-gouwc"></span>
+            <div class="name">
+              gouwc
+            </div>
+            <div class="code-name">.icon-gouwc
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-mima"></span>
+            <div class="name">
+              mima
+            </div>
+            <div class="code-name">.icon-mima
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-mimaks"></span>
+            <div class="name">
+              mimaks
+            </div>
+            <div class="code-name">.icon-mimaks
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-mimbks"></span>
+            <div class="name">
+              mimbks
+            </div>
+            <div class="code-name">.icon-mimbks
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-Vector"></span>
+            <div class="name">
+              Vector
+            </div>
+            <div class="code-name">.icon-Vector
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shoujh"></span>
+            <div class="name">
+              shoujh
+            </div>
+            <div class="code-name">.icon-shoujh
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-sous1"></span>
+            <div class="name">
+              sous1
+            </div>
+            <div class="code-name">.icon-sous1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-weisy"></span>
+            <div class="name">
+              weisy
+            </div>
+            <div class="code-name">.icon-weisy
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-yanzm"></span>
+            <div class="name">
+              yanzm
+            </div>
+            <div class="code-name">.icon-yanzm
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shanlsjl"></span>
+            <div class="name">
+              shanlsjl
+            </div>
+            <div class="code-name">.icon-shanlsjl
+            </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 icon-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="#icon-zhanghu"></use>
+                </svg>
+                <div class="name">zhanghu</div>
+                <div class="code-name">#icon-zhanghu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-huaban33555"></use>
+                </svg>
+                <div class="name">画板33555</div>
+                <div class="code-name">#icon-huaban33555</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-5asd"></use>
+                </svg>
+                <div class="name">5asd</div>
+                <div class="code-name">#icon-a-5asd</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-xuhao"></use>
+                </svg>
+                <div class="name">xuhao</div>
+                <div class="code-name">#icon-xuhao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-shanchu"></use>
+                </svg>
+                <div class="name">a-shanchu</div>
+                <div class="code-name">#icon-a-shanchu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shanchu-67"></use>
+                </svg>
+                <div class="name">shanchu-67</div>
+                <div class="code-name">#icon-shanchu-67</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-eye-off-fill"></use>
+                </svg>
+                <div class="name">eye-off-fill</div>
+                <div class="code-name">#icon-eye-off-fill</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-eye-fill"></use>
+                </svg>
+                <div class="name">eye-fill</div>
+                <div class="code-name">#icon-eye-fill</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-ju866"></use>
+                </svg>
+                <div class="name">ju866</div>
+                <div class="code-name">#icon-ju866</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-331sss"></use>
+                </svg>
+                <div class="name">331sss</div>
+                <div class="code-name">#icon-a-331sss</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-peisongguanli"></use>
+                </svg>
+                <div class="name">peisongguanli</div>
+                <div class="code-name">#icon-peisongguanli</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-e3334"></use>
+                </svg>
+                <div class="name">e3334</div>
+                <div class="code-name">#icon-e3334</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shangpinguanli-4"></use>
+                </svg>
+                <div class="name">shangpinguanli-4</div>
+                <div class="code-name">#icon-shangpinguanli-4</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-6yyyr"></use>
+                </svg>
+                <div class="name">6yyyr</div>
+                <div class="code-name">#icon-a-6yyyr</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-1swwe"></use>
+                </svg>
+                <div class="name">1swwe</div>
+                <div class="code-name">#icon-a-1swwe</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-ic_edit"></use>
+                </svg>
+                <div class="name">ic_edit</div>
+                <div class="code-name">#icon-ic_edit</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-ase"></use>
+                </svg>
+                <div class="name">ase</div>
+                <div class="code-name">#icon-ase</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-xiajia"></use>
+                </svg>
+                <div class="name">xiajia</div>
+                <div class="code-name">#icon-xiajia</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shangpinshenhe"></use>
+                </svg>
+                <div class="name">shangpinshenhe</div>
+                <div class="code-name">#icon-shangpinshenhe</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu151"></use>
+                </svg>
+                <div class="name">分组 1 (5)</div>
+                <div class="code-name">#icon-a-fenzu151</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu7"></use>
+                </svg>
+                <div class="name">分组 7</div>
+                <div class="code-name">#icon-a-fenzu7</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu12"></use>
+                </svg>
+                <div class="name">分组 1 (2)</div>
+                <div class="code-name">#icon-a-fenzu12</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu13"></use>
+                </svg>
+                <div class="name">分组 1</div>
+                <div class="code-name">#icon-a-fenzu13</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-tuceng_2"></use>
+                </svg>
+                <div class="name">图层_2</div>
+                <div class="code-name">#icon-tuceng_2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu131"></use>
+                </svg>
+                <div class="name">分组 1 (3)</div>
+                <div class="code-name">#icon-a-fenzu131</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu14"></use>
+                </svg>
+                <div class="name">分组 1 (4)</div>
+                <div class="code-name">#icon-a-fenzu14</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu111"></use>
+                </svg>
+                <div class="name">分组 1 (1)</div>
+                <div class="code-name">#icon-a-fenzu111</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu105"></use>
+                </svg>
+                <div class="name">分组 10 (5)</div>
+                <div class="code-name">#icon-a-fenzu105</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu9"></use>
+                </svg>
+                <div class="name">分组 9</div>
+                <div class="code-name">#icon-a-fenzu9</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu6"></use>
+                </svg>
+                <div class="name">分组 6</div>
+                <div class="code-name">#icon-a-fenzu6</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-qiandaosl"></use>
+                </svg>
+                <div class="name">qiandaosl</div>
+                <div class="code-name">#icon-qiandaosl</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-xiaoxzhongx"></use>
+                </svg>
+                <div class="name">xiaoxzhongx</div>
+                <div class="code-name">#icon-xiaoxzhongx</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-temanrili"></use>
+                </svg>
+                <div class="name">temanrili</div>
+                <div class="code-name">#icon-temanrili</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-jianquan-01"></use>
+                </svg>
+                <div class="name">减圈-01</div>
+                <div class="code-name">#icon-jianquan-01</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu29"></use>
+                </svg>
+                <div class="name">分组 29</div>
+                <div class="code-name">#icon-a-fenzu29</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu28"></use>
+                </svg>
+                <div class="name">分组 28</div>
+                <div class="code-name">#icon-a-fenzu28</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-niantie"></use>
+                </svg>
+                <div class="name">粘贴</div>
+                <div class="code-name">#icon-niantie</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-jiah"></use>
+                </svg>
+                <div class="name">jiah</div>
+                <div class="code-name">#icon-jiah</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-jianh"></use>
+                </svg>
+                <div class="name">jianh</div>
+                <div class="code-name">#icon-jianh</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu1"></use>
+                </svg>
+                <div class="name">分组 1</div>
+                <div class="code-name">#icon-a-fenzu1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-EditSquare"></use>
+                </svg>
+                <div class="name">Edit Square</div>
+                <div class="code-name">#icon-EditSquare</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group1"></use>
+                </svg>
+                <div class="name">Group (1)</div>
+                <div class="code-name">#icon-a-Group1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group8"></use>
+                </svg>
+                <div class="name">Group (8)</div>
+                <div class="code-name">#icon-a-Group8</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group2"></use>
+                </svg>
+                <div class="name">Group (2)</div>
+                <div class="code-name">#icon-a-Group2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group5"></use>
+                </svg>
+                <div class="name">Group (5)</div>
+                <div class="code-name">#icon-a-Group5</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group12"></use>
+                </svg>
+                <div class="name">Group (12)</div>
+                <div class="code-name">#icon-a-Group12</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group9"></use>
+                </svg>
+                <div class="name">Group (9)</div>
+                <div class="code-name">#icon-a-Group9</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group17"></use>
+                </svg>
+                <div class="name">Group (17)</div>
+                <div class="code-name">#icon-a-Group17</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group16"></use>
+                </svg>
+                <div class="name">Group (16)</div>
+                <div class="code-name">#icon-a-Group16</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group19"></use>
+                </svg>
+                <div class="name">Group (19)</div>
+                <div class="code-name">#icon-a-Group19</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group13"></use>
+                </svg>
+                <div class="name">Group (13)</div>
+                <div class="code-name">#icon-a-Group13</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group4"></use>
+                </svg>
+                <div class="name">Group (4)</div>
+                <div class="code-name">#icon-a-Group4</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group7"></use>
+                </svg>
+                <div class="name">Group (7)</div>
+                <div class="code-name">#icon-a-Group7</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group14"></use>
+                </svg>
+                <div class="name">Group (14)</div>
+                <div class="code-name">#icon-a-Group14</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group10"></use>
+                </svg>
+                <div class="name">Group (10)</div>
+                <div class="code-name">#icon-a-Group10</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group11"></use>
+                </svg>
+                <div class="name">Group (11)</div>
+                <div class="code-name">#icon-a-Group11</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group18"></use>
+                </svg>
+                <div class="name">Group (18)</div>
+                <div class="code-name">#icon-a-Group18</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-Group"></use>
+                </svg>
+                <div class="name">Group</div>
+                <div class="code-name">#icon-Group</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group15"></use>
+                </svg>
+                <div class="name">Group (15)</div>
+                <div class="code-name">#icon-a-Group15</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group21"></use>
+                </svg>
+                <div class="name">Group (21)</div>
+                <div class="code-name">#icon-a-Group21</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group24"></use>
+                </svg>
+                <div class="name">Group (24)</div>
+                <div class="code-name">#icon-a-Group24</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group23"></use>
+                </svg>
+                <div class="name">Group (23)</div>
+                <div class="code-name">#icon-a-Group23</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group6"></use>
+                </svg>
+                <div class="name">Group (6)</div>
+                <div class="code-name">#icon-a-Group6</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group3"></use>
+                </svg>
+                <div class="name">Group (3)</div>
+                <div class="code-name">#icon-a-Group3</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group22"></use>
+                </svg>
+                <div class="name">Group (22)</div>
+                <div class="code-name">#icon-a-Group22</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-Group20"></use>
+                </svg>
+                <div class="name">Group (20)</div>
+                <div class="code-name">#icon-a-Group20</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu11"></use>
+                </svg>
+                <div class="name">分组 1 (1)</div>
+                <div class="code-name">#icon-a-fenzu11</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu15"></use>
+                </svg>
+                <div class="name">分组 15</div>
+                <div class="code-name">#icon-a-fenzu15</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu18"></use>
+                </svg>
+                <div class="name">分组 18</div>
+                <div class="code-name">#icon-a-fenzu18</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-fenzu16"></use>
+                </svg>
+                <div class="name">分组 16</div>
+                <div class="code-name">#icon-a-fenzu16</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shangjia"></use>
+                </svg>
+                <div class="name">商家</div>
+                <div class="code-name">#icon-shangjia</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-SQLshenhe"></use>
+                </svg>
+                <div class="name">SQL审核</div>
+                <div class="code-name">#icon-SQLshenhe</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-tongji"></use>
+                </svg>
+                <div class="name">统计</div>
+                <div class="code-name">#icon-tongji</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-ceshishenqing"></use>
+                </svg>
+                <div class="name">测试申请</div>
+                <div class="code-name">#icon-ceshishenqing</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-tixianmingxi"></use>
+                </svg>
+                <div class="name">提现明细</div>
+                <div class="code-name">#icon-tixianmingxi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-peizhitubiaosvg-"></use>
+                </svg>
+                <div class="name">入驻申请</div>
+                <div class="code-name">#icon-peizhitubiaosvg-</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-fabuqiugou"></use>
+                </svg>
+                <div class="name">发布求购</div>
+                <div class="code-name">#icon-fabuqiugou</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-icon_tianjia"></use>
+                </svg>
+                <div class="name">icon_添加</div>
+                <div class="code-name">#icon-icon_tianjia</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-iconfontscan"></use>
+                </svg>
+                <div class="name">扫码</div>
+                <div class="code-name">#icon-iconfontscan</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-erweima"></use>
+                </svg>
+                <div class="name">ZS二维码</div>
+                <div class="code-name">#icon-erweima</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-wenhao"></use>
+                </svg>
+                <div class="name">问号</div>
+                <div class="code-name">#icon-wenhao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-zhifubaozhifu"></use>
+                </svg>
+                <div class="name">支付宝支付</div>
+                <div class="code-name">#icon-zhifubaozhifu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-zhifubao"></use>
+                </svg>
+                <div class="name">支付宝</div>
+                <div class="code-name">#icon-zhifubao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-play"></use>
+                </svg>
+                <div class="name">play</div>
+                <div class="code-name">#icon-play</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-fanhui"></use>
+                </svg>
+                <div class="name">fanhui</div>
+                <div class="code-name">#icon-fanhui</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-jianshaosp"></use>
+                </svg>
+                <div class="name">jianshaosp</div>
+                <div class="code-name">#icon-jianshaosp</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-bianjidz"></use>
+                </svg>
+                <div class="name">bianjidz</div>
+                <div class="code-name">#icon-bianjidz</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-zengjiasp"></use>
+                </svg>
+                <div class="name">zengjiasp</div>
+                <div class="code-name">#icon-zengjiasp</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-chengg1"></use>
+                </svg>
+                <div class="name">chengg1</div>
+                <div class="code-name">#icon-chengg1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-bianjdz"></use>
+                </svg>
+                <div class="name">bianjdz</div>
+                <div class="code-name">#icon-bianjdz</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-jiancgx"></use>
+                </svg>
+                <div class="name">jiancgx</div>
+                <div class="code-name">#icon-jiancgx</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-cjtoux"></use>
+                </svg>
+                <div class="name">cjtoux</div>
+                <div class="code-name">#icon-cjtoux</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-kanb"></use>
+                </svg>
+                <div class="name">kanb</div>
+                <div class="code-name">#icon-kanb</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-lianxwm"></use>
+                </svg>
+                <div class="name">lianxwm</div>
+                <div class="code-name">#icon-lianxwm</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-qingkssnr"></use>
+                </svg>
+                <div class="name">qingkssnr</div>
+                <div class="code-name">#icon-qingkssnr</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-xuanzdz"></use>
+                </svg>
+                <div class="name">xuanzdz</div>
+                <div class="code-name">#icon-xuanzdz</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-lieb"></use>
+                </svg>
+                <div class="name">lieb</div>
+                <div class="code-name">#icon-lieb</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-yuezhif"></use>
+                </svg>
+                <div class="name">yuezhif</div>
+                <div class="code-name">#icon-yuezhif</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-gouwuche"></use>
+                </svg>
+                <div class="name">gouwuche</div>
+                <div class="code-name">#icon-gouwuche</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-gouwc2"></use>
+                </svg>
+                <div class="name">gouwc2</div>
+                <div class="code-name">#icon-gouwc2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shouye"></use>
+                </svg>
+                <div class="name">shouye</div>
+                <div class="code-name">#icon-shouye</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-quanbfl2"></use>
+                </svg>
+                <div class="name">quanbfl2</div>
+                <div class="code-name">#icon-quanbfl2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-quanbfl"></use>
+                </svg>
+                <div class="name">quanbfl</div>
+                <div class="code-name">#icon-quanbfl</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shouye2"></use>
+                </svg>
+                <div class="name">shouye2</div>
+                <div class="code-name">#icon-shouye2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shangq"></use>
+                </svg>
+                <div class="name">shangq</div>
+                <div class="code-name">#icon-shangq</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shangq2"></use>
+                </svg>
+                <div class="name">shangq2</div>
+                <div class="code-name">#icon-shangq2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-wode"></use>
+                </svg>
+                <div class="name">wode</div>
+                <div class="code-name">#icon-wode</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-wode2"></use>
+                </svg>
+                <div class="name">wode2</div>
+                <div class="code-name">#icon-wode2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-wulxx"></use>
+                </svg>
+                <div class="name">wulxx</div>
+                <div class="code-name">#icon-wulxx</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-weixzye"></use>
+                </svg>
+                <div class="name">weixzye</div>
+                <div class="code-name">#icon-weixzye</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-yelxkf"></use>
+                </svg>
+                <div class="name">yelxkf</div>
+                <div class="code-name">#icon-yelxkf</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-xianxcz"></use>
+                </svg>
+                <div class="name">xianxcz</div>
+                <div class="code-name">#icon-xianxcz</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-xuanzye"></use>
+                </svg>
+                <div class="name">xuanzye</div>
+                <div class="code-name">#icon-xuanzye</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-xianscz"></use>
+                </svg>
+                <div class="name">xianscz</div>
+                <div class="code-name">#icon-xianscz</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-xxfkpzjt"></use>
+                </svg>
+                <div class="name">xxfkpzjt</div>
+                <div class="code-name">#icon-xxfkpzjt</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-lxptsh"></use>
+                </svg>
+                <div class="name">lxptsh</div>
+                <div class="code-name">#icon-lxptsh</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-zhifbzf"></use>
+                </svg>
+                <div class="name">zhifbzf</div>
+                <div class="code-name">#icon-zhifbzf</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-yuehz"></use>
+                </svg>
+                <div class="name">yuehz</div>
+                <div class="code-name">#icon-yuehz</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-daifk"></use>
+                </svg>
+                <div class="name">daifk</div>
+                <div class="code-name">#icon-daifk</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-daifh"></use>
+                </svg>
+                <div class="name">daifh</div>
+                <div class="code-name">#icon-daifh</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shouhdz"></use>
+                </svg>
+                <div class="name">shouhdz</div>
+                <div class="code-name">#icon-shouhdz</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-dianpdh"></use>
+                </svg>
+                <div class="name">dianpdh</div>
+                <div class="code-name">#icon-dianpdh</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-dangqwz"></use>
+                </svg>
+                <div class="name">dangqwz</div>
+                <div class="code-name">#icon-dangqwz</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-daishouh"></use>
+                </svg>
+                <div class="name">daishouh</div>
+                <div class="code-name">#icon-daishouh</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-yishouh"></use>
+                </svg>
+                <div class="name">yishouh</div>
+                <div class="code-name">#icon-yishouh</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-guanywm"></use>
+                </svg>
+                <div class="name">guanywm</div>
+                <div class="code-name">#icon-guanywm</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-yuexq"></use>
+                </svg>
+                <div class="name">yuexq</div>
+                <div class="code-name">#icon-yuexq</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-tuijghy"></use>
+                </svg>
+                <div class="name">tuijghy</div>
+                <div class="code-name">#icon-tuijghy</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-bfhdq"></use>
+                </svg>
+                <div class="name">bfhdq</div>
+                <div class="code-name">#icon-bfhdq</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-fenx"></use>
+                </svg>
+                <div class="name">fenx</div>
+                <div class="code-name">#icon-fenx</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-guanbi"></use>
+                </svg>
+                <div class="name">guanbi</div>
+                <div class="code-name">#icon-guanbi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-gwuc"></use>
+                </svg>
+                <div class="name">gwuc</div>
+                <div class="code-name">#icon-gwuc</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-huajfk"></use>
+                </svg>
+                <div class="name">huajfk</div>
+                <div class="code-name">#icon-huajfk</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-youjt"></use>
+                </svg>
+                <div class="name">youjt</div>
+                <div class="code-name">#icon-youjt</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shouy"></use>
+                </svg>
+                <div class="name">shouy</div>
+                <div class="code-name">#icon-shouy</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-wxzhif"></use>
+                </svg>
+                <div class="name">wxzhif</div>
+                <div class="code-name">#icon-wxzhif</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-kefu"></use>
+                </svg>
+                <div class="name">kefu</div>
+                <div class="code-name">#icon-kefu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-weixz"></use>
+                </svg>
+                <div class="name">weixz</div>
+                <div class="code-name">#icon-weixz</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-gouwc"></use>
+                </svg>
+                <div class="name">gouwc</div>
+                <div class="code-name">#icon-gouwc</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-mima"></use>
+                </svg>
+                <div class="name">mima</div>
+                <div class="code-name">#icon-mima</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-mimaks"></use>
+                </svg>
+                <div class="name">mimaks</div>
+                <div class="code-name">#icon-mimaks</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-mimbks"></use>
+                </svg>
+                <div class="name">mimbks</div>
+                <div class="code-name">#icon-mimbks</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-Vector"></use>
+                </svg>
+                <div class="name">Vector</div>
+                <div class="code-name">#icon-Vector</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shoujh"></use>
+                </svg>
+                <div class="name">shoujh</div>
+                <div class="code-name">#icon-shoujh</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-sous1"></use>
+                </svg>
+                <div class="name">sous1</div>
+                <div class="code-name">#icon-sous1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-weisy"></use>
+                </svg>
+                <div class="name">weisy</div>
+                <div class="code-name">#icon-weisy</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-yanzm"></use>
+                </svg>
+                <div class="name">yanzm</div>
+                <div class="code-name">#icon-yanzm</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shanlsjl"></use>
+                </svg>
+                <div class="name">shanlsjl</div>
+                <div class="code-name">#icon-shanlsjl</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>

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

@@ -0,0 +1,607 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 3552342 */
+  src: url('iconfont.woff2?t=1689832876745') format('woff2'),
+       url('iconfont.woff?t=1689832876745') format('woff'),
+       url('iconfont.ttf?t=1689832876745') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-zhanghu:before {
+  content: "\e88c";
+}
+
+.icon-huaban33555:before {
+  content: "\e883";
+}
+
+.icon-a-5asd:before {
+  content: "\e890";
+}
+
+.icon-xuhao:before {
+  content: "\e880";
+}
+
+.icon-a-shanchu:before {
+  content: "\e881";
+}
+
+.icon-shanchu-67:before {
+  content: "\e882";
+}
+
+.icon-eye-off-fill:before {
+  content: "\e884";
+}
+
+.icon-eye-fill:before {
+  content: "\e885";
+}
+
+.icon-ju866:before {
+  content: "\e886";
+}
+
+.icon-a-331sss:before {
+  content: "\e887";
+}
+
+.icon-peisongguanli:before {
+  content: "\e888";
+}
+
+.icon-e3334:before {
+  content: "\e889";
+}
+
+.icon-shangpinguanli-4:before {
+  content: "\e88a";
+}
+
+.icon-a-6yyyr:before {
+  content: "\e88b";
+}
+
+.icon-a-1swwe:before {
+  content: "\e88d";
+}
+
+.icon-ic_edit:before {
+  content: "\e88e";
+}
+
+.icon-ase:before {
+  content: "\e88f";
+}
+
+.icon-xiajia:before {
+  content: "\e87e";
+}
+
+.icon-shangpinshenhe:before {
+  content: "\e87f";
+}
+
+.icon-a-fenzu151:before {
+  content: "\e747";
+}
+
+.icon-a-fenzu7:before {
+  content: "\e748";
+}
+
+.icon-a-fenzu12:before {
+  content: "\e749";
+}
+
+.icon-a-fenzu13:before {
+  content: "\e74b";
+}
+
+.icon-tuceng_2:before {
+  content: "\e74c";
+}
+
+.icon-a-fenzu131:before {
+  content: "\e74d";
+}
+
+.icon-a-fenzu14:before {
+  content: "\e74e";
+}
+
+.icon-a-fenzu111:before {
+  content: "\e74f";
+}
+
+.icon-a-fenzu105:before {
+  content: "\e750";
+}
+
+.icon-a-fenzu9:before {
+  content: "\e751";
+}
+
+.icon-a-fenzu6:before {
+  content: "\e752";
+}
+
+.icon-qiandaosl:before {
+  content: "\e87b";
+}
+
+.icon-xiaoxzhongx:before {
+  content: "\e87c";
+}
+
+.icon-temanrili:before {
+  content: "\e87d";
+}
+
+.icon-jianquan-01:before {
+  content: "\e72e";
+}
+
+.icon-a-fenzu29:before {
+  content: "\e73e";
+}
+
+.icon-a-fenzu28:before {
+  content: "\e73f";
+}
+
+.icon-niantie:before {
+  content: "\e701";
+}
+
+.icon-jiah:before {
+  content: "\e72b";
+}
+
+.icon-jianh:before {
+  content: "\e72c";
+}
+
+.icon-a-fenzu1:before {
+  content: "\e735";
+}
+
+.icon-EditSquare:before {
+  content: "\e74a";
+}
+
+.icon-a-Group1:before {
+  content: "\e712";
+}
+
+.icon-a-Group8:before {
+  content: "\e713";
+}
+
+.icon-a-Group2:before {
+  content: "\e714";
+}
+
+.icon-a-Group5:before {
+  content: "\e715";
+}
+
+.icon-a-Group12:before {
+  content: "\e716";
+}
+
+.icon-a-Group9:before {
+  content: "\e717";
+}
+
+.icon-a-Group17:before {
+  content: "\e718";
+}
+
+.icon-a-Group16:before {
+  content: "\e719";
+}
+
+.icon-a-Group19:before {
+  content: "\e71a";
+}
+
+.icon-a-Group13:before {
+  content: "\e71b";
+}
+
+.icon-a-Group4:before {
+  content: "\e71c";
+}
+
+.icon-a-Group7:before {
+  content: "\e71d";
+}
+
+.icon-a-Group14:before {
+  content: "\e71e";
+}
+
+.icon-a-Group10:before {
+  content: "\e71f";
+}
+
+.icon-a-Group11:before {
+  content: "\e720";
+}
+
+.icon-a-Group18:before {
+  content: "\e721";
+}
+
+.icon-Group:before {
+  content: "\e722";
+}
+
+.icon-a-Group15:before {
+  content: "\e723";
+}
+
+.icon-a-Group21:before {
+  content: "\e724";
+}
+
+.icon-a-Group24:before {
+  content: "\e725";
+}
+
+.icon-a-Group23:before {
+  content: "\e726";
+}
+
+.icon-a-Group6:before {
+  content: "\e727";
+}
+
+.icon-a-Group3:before {
+  content: "\e728";
+}
+
+.icon-a-Group22:before {
+  content: "\e729";
+}
+
+.icon-a-Group20:before {
+  content: "\e72a";
+}
+
+.icon-a-fenzu11:before {
+  content: "\e70d";
+}
+
+.icon-a-fenzu15:before {
+  content: "\e70e";
+}
+
+.icon-a-fenzu18:before {
+  content: "\e70f";
+}
+
+.icon-a-fenzu16:before {
+  content: "\e710";
+}
+
+.icon-shangjia:before {
+  content: "\e6bd";
+}
+
+.icon-SQLshenhe:before {
+  content: "\e645";
+}
+
+.icon-tongji:before {
+  content: "\e660";
+}
+
+.icon-ceshishenqing:before {
+  content: "\eb61";
+}
+
+.icon-tixianmingxi:before {
+  content: "\e646";
+}
+
+.icon-peizhitubiaosvg-:before {
+  content: "\e66f";
+}
+
+.icon-fabuqiugou:before {
+  content: "\e638";
+}
+
+.icon-icon_tianjia:before {
+  content: "\eb89";
+}
+
+.icon-iconfontscan:before {
+  content: "\e601";
+}
+
+.icon-erweima:before {
+  content: "\e628";
+}
+
+.icon-wenhao:before {
+  content: "\e72d";
+}
+
+.icon-zhifubaozhifu:before {
+  content: "\e634";
+}
+
+.icon-zhifubao:before {
+  content: "\e688";
+}
+
+.icon-play:before {
+  content: "\e600";
+}
+
+.icon-fanhui:before {
+  content: "\e87a";
+}
+
+.icon-jianshaosp:before {
+  content: "\e876";
+}
+
+.icon-bianjidz:before {
+  content: "\e877";
+}
+
+.icon-zengjiasp:before {
+  content: "\e878";
+}
+
+.icon-chengg1:before {
+  content: "\e879";
+}
+
+.icon-bianjdz:before {
+  content: "\e86d";
+}
+
+.icon-jiancgx:before {
+  content: "\e86e";
+}
+
+.icon-cjtoux:before {
+  content: "\e86f";
+}
+
+.icon-kanb:before {
+  content: "\e870";
+}
+
+.icon-lianxwm:before {
+  content: "\e871";
+}
+
+.icon-qingkssnr:before {
+  content: "\e872";
+}
+
+.icon-xuanzdz:before {
+  content: "\e873";
+}
+
+.icon-lieb:before {
+  content: "\e874";
+}
+
+.icon-yuezhif:before {
+  content: "\e875";
+}
+
+.icon-gouwuche:before {
+  content: "\e863";
+}
+
+.icon-gouwc2:before {
+  content: "\e864";
+}
+
+.icon-shouye:before {
+  content: "\e865";
+}
+
+.icon-quanbfl2:before {
+  content: "\e866";
+}
+
+.icon-quanbfl:before {
+  content: "\e867";
+}
+
+.icon-shouye2:before {
+  content: "\e868";
+}
+
+.icon-shangq:before {
+  content: "\e869";
+}
+
+.icon-shangq2:before {
+  content: "\e86a";
+}
+
+.icon-wode:before {
+  content: "\e86b";
+}
+
+.icon-wode2:before {
+  content: "\e86c";
+}
+
+.icon-wulxx:before {
+  content: "\e859";
+}
+
+.icon-weixzye:before {
+  content: "\e85a";
+}
+
+.icon-yelxkf:before {
+  content: "\e85b";
+}
+
+.icon-xianxcz:before {
+  content: "\e85c";
+}
+
+.icon-xuanzye:before {
+  content: "\e85d";
+}
+
+.icon-xianscz:before {
+  content: "\e85e";
+}
+
+.icon-xxfkpzjt:before {
+  content: "\e85f";
+}
+
+.icon-lxptsh:before {
+  content: "\e860";
+}
+
+.icon-zhifbzf:before {
+  content: "\e861";
+}
+
+.icon-yuehz:before {
+  content: "\e862";
+}
+
+.icon-daifk:before {
+  content: "\e84f";
+}
+
+.icon-daifh:before {
+  content: "\e850";
+}
+
+.icon-shouhdz:before {
+  content: "\e851";
+}
+
+.icon-dianpdh:before {
+  content: "\e852";
+}
+
+.icon-dangqwz:before {
+  content: "\e853";
+}
+
+.icon-daishouh:before {
+  content: "\e854";
+}
+
+.icon-yishouh:before {
+  content: "\e855";
+}
+
+.icon-guanywm:before {
+  content: "\e856";
+}
+
+.icon-yuexq:before {
+  content: "\e857";
+}
+
+.icon-tuijghy:before {
+  content: "\e858";
+}
+
+.icon-bfhdq:before {
+  content: "\e845";
+}
+
+.icon-fenx:before {
+  content: "\e846";
+}
+
+.icon-guanbi:before {
+  content: "\e847";
+}
+
+.icon-gwuc:before {
+  content: "\e848";
+}
+
+.icon-huajfk:before {
+  content: "\e849";
+}
+
+.icon-youjt:before {
+  content: "\e84a";
+}
+
+.icon-shouy:before {
+  content: "\e84b";
+}
+
+.icon-wxzhif:before {
+  content: "\e84c";
+}
+
+.icon-kefu:before {
+  content: "\e84d";
+}
+
+.icon-weixz:before {
+  content: "\e84e";
+}
+
+.icon-gouwc:before {
+  content: "\e83b";
+}
+
+.icon-mima:before {
+  content: "\e83c";
+}
+
+.icon-mimaks:before {
+  content: "\e83d";
+}
+
+.icon-mimbks:before {
+  content: "\e83e";
+}
+
+.icon-Vector:before {
+  content: "\e83f";
+}
+
+.icon-shoujh:before {
+  content: "\e840";
+}
+
+.icon-sous1:before {
+  content: "\e841";
+}
+
+.icon-weisy:before {
+  content: "\e842";
+}
+
+.icon-yanzm:before {
+  content: "\e843";
+}
+
+.icon-shanlsjl:before {
+  content: "\e844";
+}
+

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


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

@@ -0,0 +1,1045 @@
+{
+  "id": "3552342",
+  "name": "华购商城C端图标",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "36530771",
+      "name": "zhanghu",
+      "font_class": "zhanghu",
+      "unicode": "e88c",
+      "unicode_decimal": 59532
+    },
+    {
+      "icon_id": "36530775",
+      "name": "画板33555",
+      "font_class": "huaban33555",
+      "unicode": "e883",
+      "unicode_decimal": 59523
+    },
+    {
+      "icon_id": "36529357",
+      "name": "5asd",
+      "font_class": "a-5asd",
+      "unicode": "e890",
+      "unicode_decimal": 59536
+    },
+    {
+      "icon_id": "36529373",
+      "name": "xuhao",
+      "font_class": "xuhao",
+      "unicode": "e880",
+      "unicode_decimal": 59520
+    },
+    {
+      "icon_id": "36529366",
+      "name": "a-shanchu",
+      "font_class": "a-shanchu",
+      "unicode": "e881",
+      "unicode_decimal": 59521
+    },
+    {
+      "icon_id": "36529371",
+      "name": "shanchu-67",
+      "font_class": "shanchu-67",
+      "unicode": "e882",
+      "unicode_decimal": 59522
+    },
+    {
+      "icon_id": "36529368",
+      "name": "eye-off-fill",
+      "font_class": "eye-off-fill",
+      "unicode": "e884",
+      "unicode_decimal": 59524
+    },
+    {
+      "icon_id": "36529369",
+      "name": "eye-fill",
+      "font_class": "eye-fill",
+      "unicode": "e885",
+      "unicode_decimal": 59525
+    },
+    {
+      "icon_id": "36529365",
+      "name": "ju866",
+      "font_class": "ju866",
+      "unicode": "e886",
+      "unicode_decimal": 59526
+    },
+    {
+      "icon_id": "36529359",
+      "name": "331sss",
+      "font_class": "a-331sss",
+      "unicode": "e887",
+      "unicode_decimal": 59527
+    },
+    {
+      "icon_id": "36529370",
+      "name": "peisongguanli",
+      "font_class": "peisongguanli",
+      "unicode": "e888",
+      "unicode_decimal": 59528
+    },
+    {
+      "icon_id": "36529358",
+      "name": "e3334",
+      "font_class": "e3334",
+      "unicode": "e889",
+      "unicode_decimal": 59529
+    },
+    {
+      "icon_id": "36529367",
+      "name": "shangpinguanli-4",
+      "font_class": "shangpinguanli-4",
+      "unicode": "e88a",
+      "unicode_decimal": 59530
+    },
+    {
+      "icon_id": "36529362",
+      "name": "6yyyr",
+      "font_class": "a-6yyyr",
+      "unicode": "e88b",
+      "unicode_decimal": 59531
+    },
+    {
+      "icon_id": "36529361",
+      "name": "1swwe",
+      "font_class": "a-1swwe",
+      "unicode": "e88d",
+      "unicode_decimal": 59533
+    },
+    {
+      "icon_id": "36529364",
+      "name": "ic_edit",
+      "font_class": "ic_edit",
+      "unicode": "e88e",
+      "unicode_decimal": 59534
+    },
+    {
+      "icon_id": "36529360",
+      "name": "ase",
+      "font_class": "ase",
+      "unicode": "e88f",
+      "unicode_decimal": 59535
+    },
+    {
+      "icon_id": "36529374",
+      "name": "xiajia",
+      "font_class": "xiajia",
+      "unicode": "e87e",
+      "unicode_decimal": 59518
+    },
+    {
+      "icon_id": "36529375",
+      "name": "shangpinshenhe",
+      "font_class": "shangpinshenhe",
+      "unicode": "e87f",
+      "unicode_decimal": 59519
+    },
+    {
+      "icon_id": "33708849",
+      "name": "分组 1 (5)",
+      "font_class": "a-fenzu151",
+      "unicode": "e747",
+      "unicode_decimal": 59207
+    },
+    {
+      "icon_id": "33708850",
+      "name": "分组 7",
+      "font_class": "a-fenzu7",
+      "unicode": "e748",
+      "unicode_decimal": 59208
+    },
+    {
+      "icon_id": "33708851",
+      "name": "分组 1 (2)",
+      "font_class": "a-fenzu12",
+      "unicode": "e749",
+      "unicode_decimal": 59209
+    },
+    {
+      "icon_id": "33708852",
+      "name": "分组 1",
+      "font_class": "a-fenzu13",
+      "unicode": "e74b",
+      "unicode_decimal": 59211
+    },
+    {
+      "icon_id": "33708853",
+      "name": "图层_2",
+      "font_class": "tuceng_2",
+      "unicode": "e74c",
+      "unicode_decimal": 59212
+    },
+    {
+      "icon_id": "33708854",
+      "name": "分组 1 (3)",
+      "font_class": "a-fenzu131",
+      "unicode": "e74d",
+      "unicode_decimal": 59213
+    },
+    {
+      "icon_id": "33708855",
+      "name": "分组 1 (4)",
+      "font_class": "a-fenzu14",
+      "unicode": "e74e",
+      "unicode_decimal": 59214
+    },
+    {
+      "icon_id": "33708856",
+      "name": "分组 1 (1)",
+      "font_class": "a-fenzu111",
+      "unicode": "e74f",
+      "unicode_decimal": 59215
+    },
+    {
+      "icon_id": "33708857",
+      "name": "分组 10 (5)",
+      "font_class": "a-fenzu105",
+      "unicode": "e750",
+      "unicode_decimal": 59216
+    },
+    {
+      "icon_id": "33708858",
+      "name": "分组 9",
+      "font_class": "a-fenzu9",
+      "unicode": "e751",
+      "unicode_decimal": 59217
+    },
+    {
+      "icon_id": "33708859",
+      "name": "分组 6",
+      "font_class": "a-fenzu6",
+      "unicode": "e752",
+      "unicode_decimal": 59218
+    },
+    {
+      "icon_id": "33679901",
+      "name": "qiandaosl",
+      "font_class": "qiandaosl",
+      "unicode": "e87b",
+      "unicode_decimal": 59515
+    },
+    {
+      "icon_id": "33679902",
+      "name": "xiaoxzhongx",
+      "font_class": "xiaoxzhongx",
+      "unicode": "e87c",
+      "unicode_decimal": 59516
+    },
+    {
+      "icon_id": "33679903",
+      "name": "temanrili",
+      "font_class": "temanrili",
+      "unicode": "e87d",
+      "unicode_decimal": 59517
+    },
+    {
+      "icon_id": "18489461",
+      "name": "减圈-01",
+      "font_class": "jianquan-01",
+      "unicode": "e72e",
+      "unicode_decimal": 59182
+    },
+    {
+      "icon_id": "32537220",
+      "name": "分组 29",
+      "font_class": "a-fenzu29",
+      "unicode": "e73e",
+      "unicode_decimal": 59198
+    },
+    {
+      "icon_id": "32537221",
+      "name": "分组 28",
+      "font_class": "a-fenzu28",
+      "unicode": "e73f",
+      "unicode_decimal": 59199
+    },
+    {
+      "icon_id": "588739",
+      "name": "粘贴",
+      "font_class": "niantie",
+      "unicode": "e701",
+      "unicode_decimal": 59137
+    },
+    {
+      "icon_id": "24396910",
+      "name": "jiah",
+      "font_class": "jiah",
+      "unicode": "e72b",
+      "unicode_decimal": 59179
+    },
+    {
+      "icon_id": "24396911",
+      "name": "jianh",
+      "font_class": "jianh",
+      "unicode": "e72c",
+      "unicode_decimal": 59180
+    },
+    {
+      "icon_id": "32221524",
+      "name": "分组 1",
+      "font_class": "a-fenzu1",
+      "unicode": "e735",
+      "unicode_decimal": 59189
+    },
+    {
+      "icon_id": "19705563",
+      "name": "Edit Square",
+      "font_class": "EditSquare",
+      "unicode": "e74a",
+      "unicode_decimal": 59210
+    },
+    {
+      "icon_id": "32208429",
+      "name": "Group (1)",
+      "font_class": "a-Group1",
+      "unicode": "e712",
+      "unicode_decimal": 59154
+    },
+    {
+      "icon_id": "32208430",
+      "name": "Group (8)",
+      "font_class": "a-Group8",
+      "unicode": "e713",
+      "unicode_decimal": 59155
+    },
+    {
+      "icon_id": "32208431",
+      "name": "Group (2)",
+      "font_class": "a-Group2",
+      "unicode": "e714",
+      "unicode_decimal": 59156
+    },
+    {
+      "icon_id": "32208432",
+      "name": "Group (5)",
+      "font_class": "a-Group5",
+      "unicode": "e715",
+      "unicode_decimal": 59157
+    },
+    {
+      "icon_id": "32208433",
+      "name": "Group (12)",
+      "font_class": "a-Group12",
+      "unicode": "e716",
+      "unicode_decimal": 59158
+    },
+    {
+      "icon_id": "32208434",
+      "name": "Group (9)",
+      "font_class": "a-Group9",
+      "unicode": "e717",
+      "unicode_decimal": 59159
+    },
+    {
+      "icon_id": "32208435",
+      "name": "Group (17)",
+      "font_class": "a-Group17",
+      "unicode": "e718",
+      "unicode_decimal": 59160
+    },
+    {
+      "icon_id": "32208436",
+      "name": "Group (16)",
+      "font_class": "a-Group16",
+      "unicode": "e719",
+      "unicode_decimal": 59161
+    },
+    {
+      "icon_id": "32208437",
+      "name": "Group (19)",
+      "font_class": "a-Group19",
+      "unicode": "e71a",
+      "unicode_decimal": 59162
+    },
+    {
+      "icon_id": "32208438",
+      "name": "Group (13)",
+      "font_class": "a-Group13",
+      "unicode": "e71b",
+      "unicode_decimal": 59163
+    },
+    {
+      "icon_id": "32208439",
+      "name": "Group (4)",
+      "font_class": "a-Group4",
+      "unicode": "e71c",
+      "unicode_decimal": 59164
+    },
+    {
+      "icon_id": "32208440",
+      "name": "Group (7)",
+      "font_class": "a-Group7",
+      "unicode": "e71d",
+      "unicode_decimal": 59165
+    },
+    {
+      "icon_id": "32208441",
+      "name": "Group (14)",
+      "font_class": "a-Group14",
+      "unicode": "e71e",
+      "unicode_decimal": 59166
+    },
+    {
+      "icon_id": "32208442",
+      "name": "Group (10)",
+      "font_class": "a-Group10",
+      "unicode": "e71f",
+      "unicode_decimal": 59167
+    },
+    {
+      "icon_id": "32208443",
+      "name": "Group (11)",
+      "font_class": "a-Group11",
+      "unicode": "e720",
+      "unicode_decimal": 59168
+    },
+    {
+      "icon_id": "32208444",
+      "name": "Group (18)",
+      "font_class": "a-Group18",
+      "unicode": "e721",
+      "unicode_decimal": 59169
+    },
+    {
+      "icon_id": "32208445",
+      "name": "Group",
+      "font_class": "Group",
+      "unicode": "e722",
+      "unicode_decimal": 59170
+    },
+    {
+      "icon_id": "32208446",
+      "name": "Group (15)",
+      "font_class": "a-Group15",
+      "unicode": "e723",
+      "unicode_decimal": 59171
+    },
+    {
+      "icon_id": "32208447",
+      "name": "Group (21)",
+      "font_class": "a-Group21",
+      "unicode": "e724",
+      "unicode_decimal": 59172
+    },
+    {
+      "icon_id": "32208448",
+      "name": "Group (24)",
+      "font_class": "a-Group24",
+      "unicode": "e725",
+      "unicode_decimal": 59173
+    },
+    {
+      "icon_id": "32208449",
+      "name": "Group (23)",
+      "font_class": "a-Group23",
+      "unicode": "e726",
+      "unicode_decimal": 59174
+    },
+    {
+      "icon_id": "32208450",
+      "name": "Group (6)",
+      "font_class": "a-Group6",
+      "unicode": "e727",
+      "unicode_decimal": 59175
+    },
+    {
+      "icon_id": "32208451",
+      "name": "Group (3)",
+      "font_class": "a-Group3",
+      "unicode": "e728",
+      "unicode_decimal": 59176
+    },
+    {
+      "icon_id": "32208452",
+      "name": "Group (22)",
+      "font_class": "a-Group22",
+      "unicode": "e729",
+      "unicode_decimal": 59177
+    },
+    {
+      "icon_id": "32208453",
+      "name": "Group (20)",
+      "font_class": "a-Group20",
+      "unicode": "e72a",
+      "unicode_decimal": 59178
+    },
+    {
+      "icon_id": "32204107",
+      "name": "分组 1 (1)",
+      "font_class": "a-fenzu11",
+      "unicode": "e70d",
+      "unicode_decimal": 59149
+    },
+    {
+      "icon_id": "32204116",
+      "name": "分组 15",
+      "font_class": "a-fenzu15",
+      "unicode": "e70e",
+      "unicode_decimal": 59150
+    },
+    {
+      "icon_id": "32204119",
+      "name": "分组 18",
+      "font_class": "a-fenzu18",
+      "unicode": "e70f",
+      "unicode_decimal": 59151
+    },
+    {
+      "icon_id": "32204122",
+      "name": "分组 16",
+      "font_class": "a-fenzu16",
+      "unicode": "e710",
+      "unicode_decimal": 59152
+    },
+    {
+      "icon_id": "182088",
+      "name": "商家",
+      "font_class": "shangjia",
+      "unicode": "e6bd",
+      "unicode_decimal": 59069
+    },
+    {
+      "icon_id": "1305492",
+      "name": "SQL审核",
+      "font_class": "SQLshenhe",
+      "unicode": "e645",
+      "unicode_decimal": 58949
+    },
+    {
+      "icon_id": "2678639",
+      "name": "统计",
+      "font_class": "tongji",
+      "unicode": "e660",
+      "unicode_decimal": 58976
+    },
+    {
+      "icon_id": "3868271",
+      "name": "测试申请",
+      "font_class": "ceshishenqing",
+      "unicode": "eb61",
+      "unicode_decimal": 60257
+    },
+    {
+      "icon_id": "7393510",
+      "name": "提现明细",
+      "font_class": "tixianmingxi",
+      "unicode": "e646",
+      "unicode_decimal": 58950
+    },
+    {
+      "icon_id": "11755641",
+      "name": "入驻申请",
+      "font_class": "peizhitubiaosvg-",
+      "unicode": "e66f",
+      "unicode_decimal": 58991
+    },
+    {
+      "icon_id": "15304867",
+      "name": "发布求购",
+      "font_class": "fabuqiugou",
+      "unicode": "e638",
+      "unicode_decimal": 58936
+    },
+    {
+      "icon_id": "4347520",
+      "name": "icon_添加",
+      "font_class": "icon_tianjia",
+      "unicode": "eb89",
+      "unicode_decimal": 60297
+    },
+    {
+      "icon_id": "162869",
+      "name": "扫码",
+      "font_class": "iconfontscan",
+      "unicode": "e601",
+      "unicode_decimal": 58881
+    },
+    {
+      "icon_id": "623182",
+      "name": "ZS二维码",
+      "font_class": "erweima",
+      "unicode": "e628",
+      "unicode_decimal": 58920
+    },
+    {
+      "icon_id": "577319",
+      "name": "问号",
+      "font_class": "wenhao",
+      "unicode": "e72d",
+      "unicode_decimal": 59181
+    },
+    {
+      "icon_id": "1486848",
+      "name": "支付宝支付",
+      "font_class": "zhifubaozhifu",
+      "unicode": "e634",
+      "unicode_decimal": 58932
+    },
+    {
+      "icon_id": "10268631",
+      "name": "支付宝",
+      "font_class": "zhifubao",
+      "unicode": "e688",
+      "unicode_decimal": 59016
+    },
+    {
+      "icon_id": "1857397",
+      "name": "play",
+      "font_class": "play",
+      "unicode": "e600",
+      "unicode_decimal": 58880
+    },
+    {
+      "icon_id": "30502865",
+      "name": "fanhui",
+      "font_class": "fanhui",
+      "unicode": "e87a",
+      "unicode_decimal": 59514
+    },
+    {
+      "icon_id": "30921563",
+      "name": "jianshaosp",
+      "font_class": "jianshaosp",
+      "unicode": "e876",
+      "unicode_decimal": 59510
+    },
+    {
+      "icon_id": "30921564",
+      "name": "bianjidz",
+      "font_class": "bianjidz",
+      "unicode": "e877",
+      "unicode_decimal": 59511
+    },
+    {
+      "icon_id": "30921565",
+      "name": "zengjiasp",
+      "font_class": "zengjiasp",
+      "unicode": "e878",
+      "unicode_decimal": 59512
+    },
+    {
+      "icon_id": "30921566",
+      "name": "chengg1",
+      "font_class": "chengg1",
+      "unicode": "e879",
+      "unicode_decimal": 59513
+    },
+    {
+      "icon_id": "30921524",
+      "name": "bianjdz",
+      "font_class": "bianjdz",
+      "unicode": "e86d",
+      "unicode_decimal": 59501
+    },
+    {
+      "icon_id": "30921525",
+      "name": "jiancgx",
+      "font_class": "jiancgx",
+      "unicode": "e86e",
+      "unicode_decimal": 59502
+    },
+    {
+      "icon_id": "30921526",
+      "name": "cjtoux",
+      "font_class": "cjtoux",
+      "unicode": "e86f",
+      "unicode_decimal": 59503
+    },
+    {
+      "icon_id": "30921527",
+      "name": "kanb",
+      "font_class": "kanb",
+      "unicode": "e870",
+      "unicode_decimal": 59504
+    },
+    {
+      "icon_id": "30921528",
+      "name": "lianxwm",
+      "font_class": "lianxwm",
+      "unicode": "e871",
+      "unicode_decimal": 59505
+    },
+    {
+      "icon_id": "30921529",
+      "name": "qingkssnr",
+      "font_class": "qingkssnr",
+      "unicode": "e872",
+      "unicode_decimal": 59506
+    },
+    {
+      "icon_id": "30921530",
+      "name": "xuanzdz",
+      "font_class": "xuanzdz",
+      "unicode": "e873",
+      "unicode_decimal": 59507
+    },
+    {
+      "icon_id": "30921531",
+      "name": "lieb",
+      "font_class": "lieb",
+      "unicode": "e874",
+      "unicode_decimal": 59508
+    },
+    {
+      "icon_id": "30921532",
+      "name": "yuezhif",
+      "font_class": "yuezhif",
+      "unicode": "e875",
+      "unicode_decimal": 59509
+    },
+    {
+      "icon_id": "30921499",
+      "name": "gouwuche",
+      "font_class": "gouwuche",
+      "unicode": "e863",
+      "unicode_decimal": 59491
+    },
+    {
+      "icon_id": "30921500",
+      "name": "gouwc2",
+      "font_class": "gouwc2",
+      "unicode": "e864",
+      "unicode_decimal": 59492
+    },
+    {
+      "icon_id": "30921501",
+      "name": "shouye",
+      "font_class": "shouye",
+      "unicode": "e865",
+      "unicode_decimal": 59493
+    },
+    {
+      "icon_id": "30921502",
+      "name": "quanbfl2",
+      "font_class": "quanbfl2",
+      "unicode": "e866",
+      "unicode_decimal": 59494
+    },
+    {
+      "icon_id": "30921503",
+      "name": "quanbfl",
+      "font_class": "quanbfl",
+      "unicode": "e867",
+      "unicode_decimal": 59495
+    },
+    {
+      "icon_id": "30921504",
+      "name": "shouye2",
+      "font_class": "shouye2",
+      "unicode": "e868",
+      "unicode_decimal": 59496
+    },
+    {
+      "icon_id": "30921505",
+      "name": "shangq",
+      "font_class": "shangq",
+      "unicode": "e869",
+      "unicode_decimal": 59497
+    },
+    {
+      "icon_id": "30921506",
+      "name": "shangq2",
+      "font_class": "shangq2",
+      "unicode": "e86a",
+      "unicode_decimal": 59498
+    },
+    {
+      "icon_id": "30921507",
+      "name": "wode",
+      "font_class": "wode",
+      "unicode": "e86b",
+      "unicode_decimal": 59499
+    },
+    {
+      "icon_id": "30921508",
+      "name": "wode2",
+      "font_class": "wode2",
+      "unicode": "e86c",
+      "unicode_decimal": 59500
+    },
+    {
+      "icon_id": "30921254",
+      "name": "wulxx",
+      "font_class": "wulxx",
+      "unicode": "e859",
+      "unicode_decimal": 59481
+    },
+    {
+      "icon_id": "30921255",
+      "name": "weixzye",
+      "font_class": "weixzye",
+      "unicode": "e85a",
+      "unicode_decimal": 59482
+    },
+    {
+      "icon_id": "30921256",
+      "name": "yelxkf",
+      "font_class": "yelxkf",
+      "unicode": "e85b",
+      "unicode_decimal": 59483
+    },
+    {
+      "icon_id": "30921257",
+      "name": "xianxcz",
+      "font_class": "xianxcz",
+      "unicode": "e85c",
+      "unicode_decimal": 59484
+    },
+    {
+      "icon_id": "30921258",
+      "name": "xuanzye",
+      "font_class": "xuanzye",
+      "unicode": "e85d",
+      "unicode_decimal": 59485
+    },
+    {
+      "icon_id": "30921259",
+      "name": "xianscz",
+      "font_class": "xianscz",
+      "unicode": "e85e",
+      "unicode_decimal": 59486
+    },
+    {
+      "icon_id": "30921260",
+      "name": "xxfkpzjt",
+      "font_class": "xxfkpzjt",
+      "unicode": "e85f",
+      "unicode_decimal": 59487
+    },
+    {
+      "icon_id": "30921261",
+      "name": "lxptsh",
+      "font_class": "lxptsh",
+      "unicode": "e860",
+      "unicode_decimal": 59488
+    },
+    {
+      "icon_id": "30921262",
+      "name": "zhifbzf",
+      "font_class": "zhifbzf",
+      "unicode": "e861",
+      "unicode_decimal": 59489
+    },
+    {
+      "icon_id": "30921263",
+      "name": "yuehz",
+      "font_class": "yuehz",
+      "unicode": "e862",
+      "unicode_decimal": 59490
+    },
+    {
+      "icon_id": "30919909",
+      "name": "daifk",
+      "font_class": "daifk",
+      "unicode": "e84f",
+      "unicode_decimal": 59471
+    },
+    {
+      "icon_id": "30919910",
+      "name": "daifh",
+      "font_class": "daifh",
+      "unicode": "e850",
+      "unicode_decimal": 59472
+    },
+    {
+      "icon_id": "30919911",
+      "name": "shouhdz",
+      "font_class": "shouhdz",
+      "unicode": "e851",
+      "unicode_decimal": 59473
+    },
+    {
+      "icon_id": "30919912",
+      "name": "dianpdh",
+      "font_class": "dianpdh",
+      "unicode": "e852",
+      "unicode_decimal": 59474
+    },
+    {
+      "icon_id": "30919913",
+      "name": "dangqwz",
+      "font_class": "dangqwz",
+      "unicode": "e853",
+      "unicode_decimal": 59475
+    },
+    {
+      "icon_id": "30919914",
+      "name": "daishouh",
+      "font_class": "daishouh",
+      "unicode": "e854",
+      "unicode_decimal": 59476
+    },
+    {
+      "icon_id": "30919915",
+      "name": "yishouh",
+      "font_class": "yishouh",
+      "unicode": "e855",
+      "unicode_decimal": 59477
+    },
+    {
+      "icon_id": "30919916",
+      "name": "guanywm",
+      "font_class": "guanywm",
+      "unicode": "e856",
+      "unicode_decimal": 59478
+    },
+    {
+      "icon_id": "30919917",
+      "name": "yuexq",
+      "font_class": "yuexq",
+      "unicode": "e857",
+      "unicode_decimal": 59479
+    },
+    {
+      "icon_id": "30919918",
+      "name": "tuijghy",
+      "font_class": "tuijghy",
+      "unicode": "e858",
+      "unicode_decimal": 59480
+    },
+    {
+      "icon_id": "30919393",
+      "name": "bfhdq",
+      "font_class": "bfhdq",
+      "unicode": "e845",
+      "unicode_decimal": 59461
+    },
+    {
+      "icon_id": "30919394",
+      "name": "fenx",
+      "font_class": "fenx",
+      "unicode": "e846",
+      "unicode_decimal": 59462
+    },
+    {
+      "icon_id": "30919395",
+      "name": "guanbi",
+      "font_class": "guanbi",
+      "unicode": "e847",
+      "unicode_decimal": 59463
+    },
+    {
+      "icon_id": "30919396",
+      "name": "gwuc",
+      "font_class": "gwuc",
+      "unicode": "e848",
+      "unicode_decimal": 59464
+    },
+    {
+      "icon_id": "30919397",
+      "name": "huajfk",
+      "font_class": "huajfk",
+      "unicode": "e849",
+      "unicode_decimal": 59465
+    },
+    {
+      "icon_id": "30919398",
+      "name": "youjt",
+      "font_class": "youjt",
+      "unicode": "e84a",
+      "unicode_decimal": 59466
+    },
+    {
+      "icon_id": "30919399",
+      "name": "shouy",
+      "font_class": "shouy",
+      "unicode": "e84b",
+      "unicode_decimal": 59467
+    },
+    {
+      "icon_id": "30919400",
+      "name": "wxzhif",
+      "font_class": "wxzhif",
+      "unicode": "e84c",
+      "unicode_decimal": 59468
+    },
+    {
+      "icon_id": "30919401",
+      "name": "kefu",
+      "font_class": "kefu",
+      "unicode": "e84d",
+      "unicode_decimal": 59469
+    },
+    {
+      "icon_id": "30919402",
+      "name": "weixz",
+      "font_class": "weixz",
+      "unicode": "e84e",
+      "unicode_decimal": 59470
+    },
+    {
+      "icon_id": "30918989",
+      "name": "gouwc",
+      "font_class": "gouwc",
+      "unicode": "e83b",
+      "unicode_decimal": 59451
+    },
+    {
+      "icon_id": "30918990",
+      "name": "mima",
+      "font_class": "mima",
+      "unicode": "e83c",
+      "unicode_decimal": 59452
+    },
+    {
+      "icon_id": "30918991",
+      "name": "mimaks",
+      "font_class": "mimaks",
+      "unicode": "e83d",
+      "unicode_decimal": 59453
+    },
+    {
+      "icon_id": "30918992",
+      "name": "mimbks",
+      "font_class": "mimbks",
+      "unicode": "e83e",
+      "unicode_decimal": 59454
+    },
+    {
+      "icon_id": "30918993",
+      "name": "Vector",
+      "font_class": "Vector",
+      "unicode": "e83f",
+      "unicode_decimal": 59455
+    },
+    {
+      "icon_id": "30918994",
+      "name": "shoujh",
+      "font_class": "shoujh",
+      "unicode": "e840",
+      "unicode_decimal": 59456
+    },
+    {
+      "icon_id": "30918995",
+      "name": "sous1",
+      "font_class": "sous1",
+      "unicode": "e841",
+      "unicode_decimal": 59457
+    },
+    {
+      "icon_id": "30918996",
+      "name": "weisy",
+      "font_class": "weisy",
+      "unicode": "e842",
+      "unicode_decimal": 59458
+    },
+    {
+      "icon_id": "30918997",
+      "name": "yanzm",
+      "font_class": "yanzm",
+      "unicode": "e843",
+      "unicode_decimal": 59459
+    },
+    {
+      "icon_id": "30918998",
+      "name": "shanlsjl",
+      "font_class": "shanlsjl",
+      "unicode": "e844",
+      "unicode_decimal": 59460
+    }
+  ]
+}

BIN
src/components/IconText/iconfont.ttf


BIN
src/components/IconText/iconfont.woff


BIN
src/components/IconText/iconfont.woff2


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

@@ -0,0 +1,184 @@
+<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" @load="hideLoading" />
+				<text class="close-icon" @click="deletePic">&#xe6e8;</text>
+			</view>
+		</view>
+		<view class="wrapper-box">
+			<view class="add" :style="{ width: width + 'vw', height: height + 'vw' }" @click="addImg"
+				v-if="!pic">
+				<!-- <text class="default-icon" :style="{ color: addColor }">&#xe71b;</text> -->
+				<IconText :code="`\ue85f`" :color="addColor" size="20"></IconText>
+				<text>{{tip}}</text>
+			</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: ''
+		})
+		img ? : string;
+		@Prop({
+			default: 26
+		})
+		width ? : number;
+		@Prop({
+			default: 26
+		})
+		height ? : number;
+		@Prop({
+			default: '#9c3d92'
+		})
+		addColor ? : string;
+		@Prop({
+			default: false
+		})
+		disabled ? : boolean;
+		@Prop({
+			default: ''
+		})
+		tip ? : string;
+		pic: string = '';
+		@Emit('update')
+		changeImg(): string {
+			return this.pic;
+		}
+		@Emit('cancelUpdate')
+		cancelUpdate(): any {}
+		@Watch('img', {
+			deep: true,
+			immediate: true,
+		})
+		imgChange(val: any) {
+			if (val) {
+				this.pic = val;
+			}
+		}
+		addImg(e: any): void {
+			console.log(12311323)
+			// 选择图库图片
+			const that = this;
+			uni.chooseImage({
+				count: 1,
+				success(res) {
+					const tempFilePaths: any = res.tempFilePaths;
+					uni.showLoading({
+						title: '上传中...'
+					});
+					that.$http
+						.upPic({
+							filePath: tempFilePaths[0]
+						})
+						.then((res: any) => {
+							uni.hideLoading();
+							that.pic = res;
+							that.changeImg();
+						})
+						.catch((err: any) => {
+							uni.hideLoading();
+							console.log(err);
+						});
+				},
+				fail: (err: any) => {
+					console.log(err, 123);
+					this.cancelUpdate();
+				}
+			});
+		}
+		deletePic(): void {
+			// console.log(3333, index);
+			if (this.disabled) return;
+			this.pic = '';
+			this.changeImg();
+		}
+		preview(): void {
+			uni.previewImage({
+				current: this.pic, // 当前显示图片的http链接
+				urls: [this.pic] // 需要预览的图片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(16);
+				height: vw(16);
+				right: vw(-6);
+				top: vw(-6);
+				@include icon(16, #333);
+			}
+		}
+
+		.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);
+			}
+			
+			text{
+				@include word-vw(10, #BFBFBF);
+				margin-top: vw(3);
+			}
+		}
+	}
+</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),
+					kid: res.kid,
+				});
+			});
+			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].kid;
+				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: #E33C64;
+						/* background-color: $bk-color; */
+						/* border: vw(1) solid $main-color; */
+					}
+
+					&.no {
+						color: $gray9;
+						background: #EFEFEF;
+					}
+				}
+
+				.spec-value:last-child {
+					margin-right: 0;
+				}
+			}
+		}
+	}
+</style>

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

@@ -0,0 +1,201 @@
+<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)">&#xe6e8;</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="`\ue85f`" :color="addColor" size="20"></IconText>
+				<text>{{tip}}</text>
+			</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;
+		@Prop({
+			default: ''
+		})
+		tip ? : string;
+		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;
+			margin-right: vw(12);
+
+			.image {
+				width: 100%;
+				height: 100%;
+				border-radius: 3px;
+			}
+
+			.close-icon {
+				position: absolute;
+				width: vw(20);
+				height: vw(20);
+				right: vw(-8);
+				top: vw(-8);
+				@include icon(20, #333);
+			}
+		}
+
+		.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);
+			}
+			
+			text{
+				@include word-vw(10, #BFBFBF);
+				margin-top: vw(3);
+			}
+		}
+	}
+</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>

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

@@ -0,0 +1,195 @@
+<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="custom-nav">
+				<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="`\ue84b`" 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="handleSearch">
+					<IconText class="icon" size="16" color="#fff" :code="`\ue841`"></IconText>
+					搜索
+				</view>
+			</view>
+			<view class="front-seatch-title">绿价比商城</view>
+		</uni-nav-bar>
+		<uni-nav-bar v-else-if="navType === 'customLeft'" :title="title" :status-bar="true" :shadow="false"
+			:border="false" :fixed="true" :color="color" :background-color="backgroundColor" :leftWidth="leftWidth"
+			:rightWidth="rightWidth">
+			<view slot="left" style="display: flex;">
+				<IconText v-if="showBack" style="padding: 8px;" @click.native="handle_click_back" :color="color"
+					:code="`\ue87a`" size="16" />
+				<slot></slot>
+			</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">
+				<view class="code-btn-box" @click="handleCode">
+					<IconText class="icon" size="16" color="#333" :code="`\ue628`"></IconText>
+					二维码
+				</view>
+			</view> -->
+			<view slot="left" class="code-box"></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="`\ue87a`" 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',
+			})
+		}
+		
+		handleSearch(){
+			this.$Router.push({
+				path: '/packages/goods/search',
+			})
+		}
+	}
+</script>
+
+<style lang="scss">
+	.custom-nav {
+		width: 100%;
+		@include flex-x(flex-start);
+	}
+	
+	.code-btn-box{
+		height: vw(30);
+		box-sizing: border-box;
+		border: vw(1) solid #333;
+		border-radius: vw(15);
+		@include flex-x(center);
+		margin-left: vw(8);
+		width: vw(90);
+		@include word-vw(14, #333);
+		.icon{
+			margin-right: vw(3);
+		}
+	}
+	.front-search-box{
+		height: vw(32);
+		width: vw(100);
+		box-sizing: border-box;
+		border: vw(1) solid #fff;
+		border-radius: vw(16);
+		@include flex-x(center);
+		background: rgba(255, 255, 255, 0.5);
+		.icon{
+			margin-right: vw(12);
+		}
+	}
+	.front-seatch-title{
+		width: 100%;
+		@include flex-x(center);
+		@include word-vw(18, #fff);
+		font-weight: 700;
+	}
+	
+	.code-box{
+		background: linear-gradient(90deg, #FF9633 0%, #FF5733 100%);
+		width: 100%;
+		position: absolute;
+		height: 100%;
+		left: 0;
+		top: 0;
+		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: "search-empty.svg"
+		}) 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>

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

@@ -0,0 +1,129 @@
+<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 class="price-wrap" v-if="sku.goldAmount > 0">
+						<text>绿通:{{ sku.goldAmount | moneyFormat }}</text><text>现金:{{ (sku.price - sku.goldAmount) | moneyFormat }}</text>
+					</view>
+					<view class="price-wrap" v-else>
+						<text>¥{{ sku.price | moneyFormat }}</text>
+					</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; //显示合计
+		@Watch('sku', {
+			deep: true
+		})
+		skuChange(val: any) {
+			console.log(55555, val)
+		}
+	}
+</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: vw(8) vw(15);
+			box-sizing: border-box;
+
+			.image {
+				width: vw(64);
+				height: vw(64);
+			}
+
+			.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, #999);
+					@include flex-x();
+				}
+			}
+
+			.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>

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

@@ -0,0 +1,229 @@
+<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">{{name}}</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
+		@Prop({
+			default: "金额"
+		})
+		name ? : 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/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>

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

@@ -0,0 +1,156 @@
+<template>
+	<view class='search-content'>
+		<!-- 首页搜索 -->
+		<view class="search-box" v-if="typeFlag == 'base'" @click="toPage">
+			<view class="search-left">
+				<text class="icon">&#xe710;</text>
+				<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">
+				<text class="icon1">&#xe710;</text>
+				<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>
+			</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 = '';
+			this.$Router.back(1);
+		}
+		@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>

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

@@ -0,0 +1,139 @@
+<template>
+	<uni-popup ref="popup" type="center">
+		<view class="show-modal">
+			<IconText class="close" @click.native="close" :code="`\ue847`" color="#999" size="10"></IconText>
+			<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);
+		}
+
+		.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;
+			@include word-vw(14, #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.kid------>', detail)
+			this.goodsPopup.skuList.some((item: any) => {
+				if (item.kid === 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.kid) {
+				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: #F6F6F6;
+
+			.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(300);
+					height: vw(50);
+					border-radius: vw(10);
+					@include flex-x(center);
+					background: $bk-color;
+
+					&.disable {
+						background: #ccc;
+						color: #fff;
+					}
+				}
+
+				.buy-btn {
+					font-size: vw(14);
+					padding: vw(8) vw(32) vw(8) vw(28);
+					background-color: $bk-color;
+					color: #ffffff;
+					border-top-right-radius: vw(22);
+					border-bottom-right-radius: vw(22);
+				}
+
+				.buy-btn1 {
+					width: vw(300);
+					height: vw(50);
+					border-radius: vw(10);
+					@include flex-x(center);
+					background: $bk-color;
+				}
+			}
+		}
+	}
+</style>

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

@@ -0,0 +1,165 @@
+<template>
+	<view class="numControl">
+		<view class="symbol" @click="decrease">
+			<text class="icon" :style="{ color: colorLeft }">{{ iconLeft }}</text>
+		</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>
+		</view>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Emit,
+		Watch
+	} from 'vue-property-decorator';
+	@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: '\ue72c'
+		})
+		iconLeft ? : string; // 减号图标
+		@Prop({
+			default: '\ue72b'
+		})
+		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;
+		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();
+		border: vw(1) solid #F2F2F2;
+		border-radius: vw(3);
+		height: vw(24);
+		box-sizing: border-box;
+
+		.symbol {
+			width: vw(24);
+			background: #F2F2F2;
+			// height: vw(40);
+			@include flex-y(center, center);
+
+			.icon {
+				@include icon(24);
+			}
+		}
+
+		.plus {
+			width: vw(24);
+			background: #F2F2F2;
+			// height: vw(40);
+			@include flex-y(center, center);
+
+			.icon {
+				@include icon(24);
+			}
+		}
+
+		.count {
+			width: vw(32);
+			text-align: center;
+			height: vw(24);
+			line-height: vw(24);
+			outline: none;
+			@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时使用)|
+
+
+

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

@@ -0,0 +1,256 @@
+<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', width: imgWidth ? imgWidth/3.75+'vw' : '100%'}"
+						: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 // // 图片的字段
+		
+		@Prop({
+			default: null
+		}) private imgWidth!: number|null // // 图片的字段
+
+		// 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('changeIndex')
+		changeIndex(val: any) {
+			return val
+		}
+
+		@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: rgba(0, 0, 0, 0.5);
+			color: #fff;
+			height: vw(20);
+			line-height: vw(20);
+			padding: vw(1) vw(12);
+			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>

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

@@ -0,0 +1,96 @@
+<template>
+	<view class="tab-bar">
+		<view v-for="(item, index) in list" :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,
+		Prop,
+		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 = '#6ABCE6';
+		color: string = '#999';
+		list: object[] = [{
+				pagePath: 'pages/front/front',
+				iconPath: '\ue868',
+				selectedIconPath: '\ue865',
+				text: '首页'
+			},
+			{
+				pagePath: 'pages/category/category',
+				iconPath: '\ue866',
+				selectedIconPath: '\ue867',
+				text: '全部分类'
+			},
+			{
+				pagePath: 'pages/business/business',
+				iconPath: '\ue86a',
+				selectedIconPath: '\ue869',
+				text: '商圈'
+			},
+			{
+				pagePath: 'pages/cart/cart',
+				iconPath: '\ue864',
+				selectedIconPath: '\ue863',
+				text: '购物车'
+			},
+			{
+				pagePath: 'pages/user/user',
+				iconPath: '\ue86c',
+				selectedIconPath: '\ue86b',
+				text: '我的'
+			}
+		];
+		switchTab(item: any, index: number): 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);
+		// border-top-left-radius: vw(12);
+		// border-top-right-radius: vw(12);
+
+		.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>

+ 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

+ 154 - 0
src/manifest.json

@@ -0,0 +1,154 @@
+{
+    "name" : "悦贝链商家",
+    "appid" : "__UNI__6E440EA",
+    "description" : "",
+    "versionName" : "1.0.18",
+    "versionCode" : 118,
+    "transformPx" : false,
+    "app-plus" : {
+        /* 5+App特有相关 */
+        "modules" : {
+            "Maps" : {},
+            "VideoPlayer" : {},
+            "Payment" : {},
+            "Barcode" : {},
+            "Camera" : {}
+        },
+        "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.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_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ],
+                "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ]
+            },
+            "ios" : {
+                "dSYMs" : false
+            },
+            /* ios打包配置 */
+            "sdkConfigs" : {
+                "ad" : {},
+                "share" : {
+                    "weixin" : {
+                        "appid" : "wx122c612dc259a63d",
+                        "UniversalLinks" : ""
+                    }
+                },
+                "oauth" : {
+                    "weixin" : {
+                        "appid" : "wx122c612dc259a63d",
+                        "UniversalLinks" : ""
+                    }
+                },
+                "maps" : {
+                    "amap" : {
+                        "appkey_ios" : "da0a715d6f8c98e46ff083fb99612ffc",
+                        "appkey_android" : "da0a715d6f8c98e46ff083fb99612ffc"
+                    }
+                },
+                "payment" : {
+                    "weixin" : {
+                        "__platform__" : [ "android" ],
+                        "appid" : "wxa28fd03148658365",
+                        "UniversalLinks" : ""
+                    },
+                    "alipay" : {
+                        "__platform__" : [ "android" ]
+                    }
+                }
+            },
+            "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"
+                    }
+                }
+            },
+            "splashscreen" : {
+                "useOriginalMsgbox" : true,
+                "androidStyle" : "common"
+            }
+        },
+        /* SDK配置 */
+        "usingComponents" : true
+    },
+    "quickapp" : {},
+    /* 快应用特有相关 */
+    "mp-weixin" : {
+        /* 小程序特有相关 */
+        "usingComponents" : true,
+        "appid" : "wxd4b5f29280beb019",
+        "setting" : {
+            "urlCheck" : true,
+            "minified" : true
+        }
+    },
+    "h5" : {
+        "router" : {
+            "base" : "./",
+            "mode" : "hash"
+        },
+        "title" : "绿价比"
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "mp-qq" : {
+        "usingComponents" : true
+    }
+}

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

@@ -0,0 +1,63 @@
+export default {
+	title: '伊兰迪用户协议',
+	content: `
+		<p  style="text-indent: 2em;">敬重的用户,欢迎您注册成为绿价比用户。在注册前请您认真阅读如下服务条款:本服务协议双方为绿价比与绿价比用户,本服务协议具有合同效力。您确认本服务协议后,本服务协议即在您和绿价比之间产生法律效力。请您务必在注册之前仔细阅读全部服务协议内容,如有任何疑问,可向绿价比客服询问。无论您事实上是否在注册之前仔细阅读了本服务协议,只要您点击协议正本下方的"注册"按钮并根据本网站注册程序胜利注册为用户,您的行为仍旧表示您同意并签署了本服务协议。</p>
+		<p  style="text-indent: 2em;">一、绿价比服务条款的确认和接纳本网站各项服务的全部权和运作权归本网站拥有。</p>
+		<p  style="text-indent: 2em;">二、用户必需</p>
+		<p  style="text-indent: 2em;">(一)自行配备上网的所需设备,包括个人电脑、调制解调器或其他必备上网装置;</p>
+		<p  style="text-indent: 2em;">(二)自行负担个人上网所支付的与此服务有关的电话费用、网络费用。</p>
+		<p  style="text-indent: 2em;">三、用户在本网站交易平台上不得发布下列违法信息</p>
+		<p  style="text-indent: 2em;">(一)对宪法所确定的基本原则的危害国家平安,泄露国家隐秘,颠覆国家政权,破坏国家统一的;</p>
+		<p  style="text-indent: 2em;">(二)损害国家荣誉和利益的:煽动民族仇恨、民族卑视,破坏民族团结的;</p>
+		<p  style="text-indent: 2em;">(三)破坏国家宗教政策,宣扬邪教和封建迷信的:</p>
+		<p  style="text-indent: 2em;">(四)散布谣言,扰乱社会秩序,破坏社会稳定的;</p>
+		<p  style="text-indent: 2em;">(五)散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的</p>
+		<p  style="text-indent: 2em;">(六)污辱或者诽谤他人,侵害他人合法权益的;</p>
+		<p  style="text-indent: 2em;">(七)含有法律、行政法规禁止的其他内容的。</p>
+		<p  style="text-indent: 2em;">四、有关个人资料用户同意</p>
+		<p  style="text-indent: 2em;">(一)供应准时、详尽及精确 的个人资料,例如:手机号、身份证号、图片视频文件; </p>
+		<p  style="text-indent: 2em;">(二)同意接收来自本网站的信息:</p>
+		<p  style="text-indent: 2em;">(三)不断更新注册资料,符合准时、详尽精确的要求。 全部原始键入的资料将引用为注册资料;</p>
+		<p  style="text-indent: 2em;">(四)本网站不公开用户的姓名、地址、电子邮箱和笔名,以下状况除外:</p>
+		<p  style="text-indent: 2em;">1、用户授权本网站透露这些信息:</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;">(一)用户在注册时应当选择常用的手机号码,且同意接受并阅读本网站发往用户的各类短信。如用户未准时从自己的手机接受短信或因用户手机或用户短信接收及阅读程序本身的问题使短信无法正常接收或阅读的,只要本网站胜利发送了手机短信,应当视为用户已经接收到相关的短信;</p>
+		<p  style="text-indent: 2em;">(二)用户在注册时应当填写正确、有效的手机号码,此手机号码用以找回密码。如因用户未填写正确、有效的手机号码而导致密码无法找回,无法正确登陆本网站造成用户本人损失的,本网站不担当相关责任。</p>
+		<p  style="text-indent: 2em;">(三)用户在本网站恶意刷单消费造成用户资金损失,由用户个人承担,本网站不担当相关责任。</p>
+		<p  style="text-indent: 2em;">七、服务条款的修改</p>
+		<p  style="text-indent: 2em;">本网站有权在必要时修改服务条款,本网站服务条款一旦发生变动,将会在重要页面上提示修改内容。假如不同意所改动的内容,用户可以主动取消获得的本网站信息服务。假如用户连续享用本网站信息服务,则视为接受服务条款的变动。本网站保留随时修改或中断服务而</p>
+		<p  style="text-indent: 2em;">不需通知用户的权利。本网站行使修改或中断服务的权利,不需对用户或第三方负责。</p>
+		<p  style="text-indent: 2em;">八、用户隐私制度</p>
+		<p  style="text-indent: 2em;">尊重用户个人隐私是本网站的一项基本政策。所以,本网站一定不会在未经合法用户授权时公开、编辑或透露其注册资料及保存在本网站中的非公开内容,除非有法律许可要求或本网站在诚信的基础上认为透露这些信息在以下四种情况是必要的:</p>
+		<p  style="text-indent: 2em;">(一)遵守有关法律规定,遵从本网站合法服务程序:</p>
+		<p  style="text-indent: 2em;">(二)保持维护本网站的商标所有权;</p>
+		<p  style="text-indent: 2em;">(三)在紧急情况下竭力维护用户个人和社会人众的隐私安全</p>
+		<p  style="text-indent: 2em;">(四)协议其他相关的要求;</p>
+		<p  style="text-indent: 2em;">(五)本网站保留发布会员人口分析资询的权利。</p>
+		<p  style="text-indent: 2em;">九、法律适用与管辖</p>
+		<p  style="text-indent: 2em;">法律活用:本协议的订立,执行,解释及争议的解决均适用中华人民共和国法律(不包括香港特别行政区,澳门特别行政区和台湾地区的法律)。</p>
+		<p  style="text-indent: 2em;">管辖:您与永盛因本协议而产生的任何纠纷,双方应本着友好的态度协商解决,协商无果的情况下,任何一方有权将争议提交至永盛所在地有管辖权的人民法院诉讼解决。</p>
+		<p  style="text-indent: 2em;">争议相对方:在此,您理解并同意,您使用第三方服务产生的纠纷,您与第三方之间的红纷均非基于本协议发生的红纷,您承诺不将永盛作为该等组纷的争议相对人,否则永盛有权直接提出主体不合格抗辩,您对出抗辩不持导议。</p>
+		<p  style="text-indent: 2em;">十、协议的终止</p>
+		<p  style="text-indent: 2em;">1、用户发起的终止:您有权通过以下任一方式终止本协议:</p>
+		<p  style="text-indent: 2em;">(1)本协议条款及/或相关协议变更生效前,你信止使用并/或明示不愿接受变更内容的:</p>
+		<p  style="text-indent: 2em;">(2)您明示不愿继续使用绿价比商城服务的。</p>
+		<p  style="text-indent: 2em;">2、绿价比发起的终止:出现以下情况时,绿价比可通过您提供的联系方式通知终止本协议:</p>
+		<p  style="text-indent: 2em;">(1)您违反本协议约定,绿价比依据违约条款终止本协议的;</p>
+		<p  style="text-indent: 2em;">(2)您盗用他人账户,发布违禁信息,骗取他人财物,扰乱交易秩序,采取不正当手段谋利等行为,绿价比有权对您的账户予以查封;</p>
+		<p  style="text-indent: 2em;">(3)除上述情形外,因您多次违反绿价比商城协议规定自情节严車,绿价比有权对您的账户予以查封</p>
+		<p  style="text-indent: 2em;">(4)您在绿价比商城相关平台有欺诈,侵犯他人合法权益或其他严重违法违约行为的;</p>
+		<p  style="text-indent: 2em;">(5)其他应当终止服务的情况。</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)交易处理:本协议终止后,对于您在本协议存续期间内产生的交易订单,绿价比有权决定是否关闭该等交易订单;如绿价比要求继续履行的,您应当就该交易订单继续履行本协议及交易订单的约定,并承担因此产生的任何损失或增加的任何费用。</p>
+		<p  style="text-indent: 2em;">十一、协议分割性</p>
+		<p  style="text-indent: 2em;">1.《帐号使用协议》,隐私政策(具体名称以绿价比商城公布为准)及其他与绿价比商城服务相关的协议,规范、规则、公告声明为本协议不可分割的一部分。</p>
+		<p  style="text-indent: 2em;">2、如果本协议中有任何条款被认为无效、无约束力、无法执行被认定为无效,则其它条款将继续保持完全的效力</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.png';
+		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>

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

@@ -0,0 +1,111 @@
+<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);
+					margin-bottom: vw(16);
+				}
+			}
+		}
+
+		.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>

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

@@ -0,0 +1,586 @@
+<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 item2">
+				<view class="label">运费模板:</view>
+				<!-- <uni-data-picker :localdata="freightList" placeholder="点击选择" popup-title="请选择运费模板" v-model="freight"
+					class="area-picker" @change="bindPickerChange2">
+					<view class="category-show">
+						<text class="word13" v-if="!freight">点击选择</text>
+						<text class="word13"
+							v-else>{{freight ? freight.name : ''}}</text>
+						<IconText class="icon" :code="`\ue84a`" size="12" color="#BDBBBB"></IconText>
+					</view>
+				</uni-data-picker> -->
+				<view style="flex: 1;">
+					<uni-data-select :clear="false" v-model="freight" :localdata="freightList" placeholder="点击选择"></uni-data-select>
+				</view>
+			</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 = [];
+		freight: any = null;
+		freightList: any = [];
+		isFirst: any = true;
+		isSave: any = false;
+		gid: any = null;
+		id: any = null;
+		detail: any = {};
+		freightIndex: any = null;
+
+		onLoad() {
+			this.getCategoryList();
+			this.getFreightList();
+			if (this.$Route.query.gid) {
+				this.gid = +this.$Route.query.gid;
+				this.getDetail();
+			};
+			this.checkPrivacySetting();
+			// uni.setStorageSync('goodData', this.data);
+		}
+
+		onShow() {
+			if (!this.isSave) return;
+			console.log(12223123)
+			let data = uni.getStorageSync('goodData');
+			data && (this.data = data);
+		}
+
+		checkPrivacySetting() {
+			// @ts-ignore
+			wx.getPrivacySetting({
+				success: (res: any) => {
+					// this.privacyContractName = res.privacyContractName;
+					console.log(
+							res
+							) // 返回结果为: res = { needAuthorization: true/false, privacyContractName: '《xxx隐私保护指引》' }
+					if (res.needAuthorization) {
+						// 需要弹出隐私协议
+						// (this.$refs.PrivacyPop as any).open()
+						this.handleAgreePrivacyAuthorization();
+					}
+				},
+				fail: () => {},
+				complete: () => {}
+			})
+		}
+
+		// 同意隐私协议
+		handleAgreePrivacyAuthorization() {
+			// @ts-ignore
+			wx.requirePrivacyAuthorize({
+				success: () => {
+					// (this.$refs.StationInfoPopup as any).open(oid)
+					// 用户同意授权
+					// 继续小程序逻辑
+					// this.showPrivacy = false
+				},
+				fail: () => {}, // 用户拒绝授权
+				complete: () => {}
+			})
+		}
+
+		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;
+					this.freight = res.freight;
+				}, (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();
+				});
+		}
+
+		getFreightList() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.get({
+					url: this.$api.getFreightList,
+					data: {}
+				})
+				.then((res: any) => {
+					this.freightList = res.list.map((item: any) => {
+						return {
+							text: item.name,
+							value: item.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;
+		}
+
+		bindPickerChange2(val: any) {
+			console.log(2222, val.detail);
+			this.freight = 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.freight = this.freight;
+			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,
+									rewardAmount: +item.rewardAmount || 0,
+									goldAmount: +item.goldAmount || 0
+								}
+							}
+						})
+					}
+				})
+				.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>

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

@@ -0,0 +1,627 @@
+<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" @input="inputEvent($event, index)" 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>绿通支付<br/>金额/元:</view>
+						<view class="right">
+							<input type="digit" class="input" v-model.number="item.goldAmount" 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 class="row stock">
+						打赏金额:
+						<view class="right">
+							<input type="digit" class="input" v-model.number="item.rewardAmount" 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">绿通支付<br/>金额/元:</view>
+					<input type="digit" class="input" v-model.number="goldAmount" 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: '',
+			rewardAmount: null,
+			goldAmount: null,
+			attribute: {}
+		}
+		tableData: any = [];
+		stock: any = null;
+		price: any = null;
+		data: any = {};
+		goldAmount: any = null;
+
+
+		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,
+					rewardAmount: item.rewardAmount,
+					goldAmount: item.goldAmount,
+					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;
+		}
+		
+		inputEvent(e: any, index: any){
+			// return 222
+			// this.skuList[index].name = 111;
+		}
+
+		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,
+					goldAmount: this.goldAmount ? this.goldAmount : item.goldAmount,
+				}
+			});
+			(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,
+					rewardAmount: item.rewardAmount,
+					goldAmount: item.goldAmount
+				}
+			});
+			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(220);
+						@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);
+			}
+			.label{
+				// white-space: nowrap;
+				width: vw(68);
+			}
+
+			.batch-item {
+				padding: 0 vw(20);
+				margin: vw(10) 0;
+				@include word-vw(15, #333);
+				@include flex-x();
+
+				.input {
+					width: vw(190);
+					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>

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

@@ -0,0 +1,1020 @@
+<template>
+	<view class="content-styl">
+		<Navbar title="商品详情" color="#333" :showBack="!isShare" :showHome="isShare"></Navbar>
+		<!-- banner图 -->
+		<view class="banner-styl">
+			<SwiperBanner :bannerDetail="goodsInfo.slideshow || []" bannerH="375" dotsType="digit"
+				@changeIndex="changeIndex"></SwiperBanner>
+			<!-- <view class="price-box">
+				<view class="left">
+					<view class="price"><text>¥</text>{{goodsInfo.minPrice | moneyFormat}}</view>
+					<view class="pre-price">¥{{goodsInfo.linePrice | moneyFormat}}</view>
+				</view>
+				<view class="right">
+					<view class="member">{{swiperIndex}} / {{goodsInfo.slideshow ? goodsInfo.slideshow.length : 0}}
+					</view>
+				</view>
+			</view> -->
+		</view>
+		<view class="goods-module">
+			<view class="price-box">
+				<view class="left">
+					<view class="price"><text>¥</text>{{goodsInfo.minPrice | moneyFormat}}</view>
+					<view class="pre-price">¥{{goodsInfo.linePrice | moneyFormat}}</view>
+				</view>
+				<!-- <view class="right">
+					<view class="member">{{roleMap[userInfo.role]}}</view>
+				</view> -->
+			</view>
+			<view class="goods-detail">
+				<view class="goods-name">
+					<view class="type">
+						<!-- 商城自营 -->
+						{{goodsInfo.genre === 1 ? '商城自营' : ''}}
+						{{goodsInfo.genre === 2 ? '供应链' : ''}}
+					</view>
+					{{ goodsInfo.name }}
+				</view>
+				<view class="goods-title">{{ goodsInfo.tagline }}</view>
+				<!-- <view class="goods-info">
+					<view class="goods-price">
+						<view class="true-price">¥{{ goodsInfo.min_price }}</view>
+						<view class="false-price">{{ imgInfo.line_price }}</view>
+					</view>
+					<view class="stock-num">库存{{ goodsInfo.total_stock }}件</view>
+				</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 class="share-btn" @click="toShare">
+					<IconText :code="`\ue846`" size="12" color="#fff" style="margin-right: 5px;"></IconText>
+					立即分享
+				</view> -->
+			<!-- </view> -->
+			<view class="sale-info">
+				<view class="sale-num">月销量 {{ goodsInfo.monthlySales }}</view>
+				<view class="stock">当前库存:{{goodsInfo.stock}}</view>
+				<view class="freight" v-if="goodsInfo.genre === 1">
+					快递费:包邮
+				</view>
+			</view>
+			<view class="no-deliver">
+				<text>不发货地区:</text>
+				<view class="area" @click="toArea(goodsInfo.notDeliveryAreas)">
+					<!-- <IconText :code="`\ue845`" size="14" color='#E33C64' style="margin-right: 5px;"></IconText> -->
+					<text>{{goodsInfo.notDeliveryAreas || '无'}}</text>
+				</view>
+				<IconText :code="`\ue84a`" size="12" color='#D4D4D4'></IconText>
+			</view>
+			<view class="reward" v-if="token">
+				<view class="reward-item">
+					<view class="title">购买赠送</view><text>{{goodsInfo.buyAward}} 积分</text>
+				</view>
+				<!-- <view class="reward-item">
+					<view class="title">分享奖励</view>
+					<text>{{goodsInfo.shareAward}} 积分</text>
+				</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-sale">
+				<view class="sale-num">月销售&nbsp;{{ goodsInfo.monthlySales }}</view>
+				<view class="sale-people">
+					<view class="sale-left">
+						<image v-for="(item, index) in goodsInfo.buyers" v-if="index < 5" :key="index"
+							class="people-img" :src="item" :style="{ zIndex: 10 - index }"></image>
+					</view>
+					<view class="invite-people" @click="toShare">
+						<IconText :code="`\ue6ff`" class="icon" color="#333" size="14"></IconText>
+						<text class="btn-title">邀请好友一起抢</text>
+					</view>
+				</view>
+			</view> -->
+			<!-- <view class="spec-module" @click="chooseSpec('all')">
+				<view class="spec-left">
+					<view class="spec-title">规格</view>
+					<view class="spec-choose">请选择</view>
+				</view>
+				<text class="icon1">&#xe70d;</text>
+			</view> -->
+		</view>
+		<view class="goods-desc">
+			<view class="desc-title">商品详情</view>
+			<view class="desc-content" v-html="goodsInfo.detailDes"></view>
+			<view class="desc-img" v-html="goodsInfo.detailContent"></view>
+			<view class="desc-img">
+				<image class="image-styl" :src="item" mode="widthFix" v-for="(item, index) in goodsInfo.detailPic"
+					:key="index"></image>
+			</view>
+		</view>
+		<!-- 底部栏 -->
+		<view class="bottom-bar">
+			<view class="bottom-left">
+				<view class="call-customer btn1" @click="toIndex">
+					<IconText :code="`\ue84b`" class="icon" color="#333"></IconText>
+					<view class="title-styl">首页</view>
+				</view>
+				<button class="call-customer btn1" hover-class="none" @click="toTell">
+					<IconText :code="`\ue84d`" class="icon" color="#333"></IconText>
+					<view class="title-styl">客服</view>
+				</button>
+				<view class="cart-styl btn1" @click="toCart">
+					<IconText :code="`\ue848`" class="icon" color="#333"></IconText>
+					<view class="title-styl">购物车</view>
+					<!-- <view class="quan-styl">{{cartNum}}</view> -->
+				</view>
+			</view>
+			<view class="bottom-right">
+				<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>
+		<!-- <ShowModal ref="confirmOrder" title="提示" :content="'邮箱:' + email" btnText="确认" /> -->
+		<ShowModal ref="confirmOrder" title="是否拨打客服电话?" :content="phone" btnText="拨打" @submit="handleTell"
+			leftBtnText="取消" />
+	</view>
+</template>
+<script lang="ts">
+	import {
+		Component,
+		Prop,
+		Vue,
+		Mixins
+	} from 'vue-property-decorator';
+	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';
+	import {
+		OSS_STATIC,
+		PHONENNUMBER,
+		EMAIL
+	} from '@/common/constants';
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class GoodDetail extends Mixins(canvasMixin, loginMixin) {
+		// @Getter('token') token;
+		@baseModule.Mutation(types.SET_GOODS) setGoods: any;
+		@canvasModule.Mutation(types.SET_CANVASDATA) setCanvasData: any;
+		@baseModule.Getter('_userInfo') userInfo: any;
+		goodsInfo: any = {}; //商品信息
+		fatherInfo: any = {}; //父组件数据
+		cartNum: number = 0; //购物车中件数
+		imgInfo: any = {
+			slideshow: []
+		}; // 轮播图和详情图app中不显示,定义新变量减少层级后显示
+		goodsPopup: any = {
+			skuList: [],
+			spuInfo: {},
+		} //规格弹窗专用
+		// dengdengUrl: string = this.$oss_url + 'dengdeng.png';
+		btnShow: string = ''; //规格组件按钮展示
+		typeName: string = ''; //规格组件按钮展示
+		isFirst: boolean = false;
+		isShare: boolean = false;
+		email: any = EMAIL;
+		phone: any = PHONENNUMBER;
+		swiperIndex: any = 1;
+		// @Getter userInfo;
+		// @Getter imgCanvas;
+		// @Getter('cartGoods') cartGoods: any;
+		// @Mutation(types.SET_IMGCANVAS) setCanvasImg;
+		// @Action(types.ADD_CARTGOODS) addCartGoods: any;
+
+
+		onShow() {
+			// this.getCartNum(); //获取购物车数量
+			this.token && this.getUserInfo();
+			// if (this.isFirst) {
+			// 	if (this.token) {
+			// 		// #ifdef MP-WEIXIN
+			// 		this.getShareInfo();
+			// 		// #endif
+			// 	}
+			// } else {
+			// 	this.isFirst = true
+			// }
+			if (this.$Route.query.scene) {
+				let sceneArr = decodeURIComponent(this.$Route.query.scene).split('&');
+				let scene: any = {};
+				sceneArr.forEach((item: any) => {
+					let arr = item.split('=');
+					if (arr[0]) scene[arr[0]] = arr[1];
+				})
+				if (scene.s === '1') {
+					this.fatherInfo = scene;
+					this.isShare = true;
+				} else {
+					this.fatherInfo = this.$Route.query;
+				}
+			} else {
+				this.fatherInfo = this.$Route.query;
+				if (this.$Route.query.s === '1') this.isShare = true;
+			}
+			// this.getCartNum();
+			this.getGoodsInfo(); //获取商品信息
+		}
+		async onLoad(opt: any) {
+			// @ts-ignore
+			// this.$Router.forceGuardEach();
+			// if (this.token) {
+			// 	// #ifdef MP-WEIXIN
+			// 	this.getShareInfo();
+			// 	// #endif
+			// }
+			// this.chooseSpec('add');
+			this.getSuperior(opt);
+		}
+		onShareAppMessage() {
+			return {
+				title: this.goodsInfo.name,
+				path: '/packages/goods/good-detail?s=1&uid=' + this.userInfo.uid + '&id=' + this.goodsInfo
+					.id + '&gid=' + this.goodsInfo.gid,
+				imageUrl: this.goodsInfo.masterPic
+			};
+		}
+		//methods---------------
+		getSuperior(opt: any) {
+			if (opt.scene) {
+				let sceneArr = decodeURIComponent(opt.scene).split('&');
+				let scene: any = {};
+				sceneArr.forEach((item: any) => {
+					let arr = item.split('=');
+					if (arr[0]) scene[arr[0]] = arr[1];
+				})
+				if (scene.s === '1' && scene.uid) {
+					// console.log(scene);
+					uni.setStorageSync('referrerId', scene.uid);
+				}
+			}
+		}
+		changeIndex(cur: any) {
+			this.swiperIndex = cur;
+		}
+		toArea(area: any) {
+			this.$Router.push({
+				path: '/packages/goods/area',
+				query: {
+					area
+				}
+			})
+		}
+
+		toTell() {
+			(this.$refs.confirmOrder as any).open();
+		}
+
+		handleTell() {
+			uni.makePhoneCall({
+				phoneNumber: PHONENNUMBER //仅为示例
+			});
+		}
+
+		getShareInfo() {
+			// const that = this;
+			// // 转引号临时文件
+			// this.loadFile(`${OSS_STATIC}symbol.png`, url => {
+			// 	let newImgCanvas = this.imgCanvas;
+			// 	newImgCanvas.quota = url;
+			// 	this.setCanvasImg(newImgCanvas);
+			// });
+			// // 转logo临时文件
+			// this.loadFile(`${OSS_STATIC}logo.png`, url => {
+			// 	let newImgCanvas = this.imgCanvas;
+			// 	newImgCanvas.logo = url;
+			// 	this.setCanvasImg(newImgCanvas);
+			// });
+			// // 获取小程序码
+			// let scene = {
+			// 	source: 1,
+			// 	type: 0,
+			// 	// uid: +this.userInfo.uid,
+			// 	sid: +this.goodsInfo.spu.id, //商品id
+			// 	share: +this.goodsInfo.spu.steady_id, //商品steady_id
+			// 	page: 'pages/front/front'
+			// };
+			// this.getQr(scene, (url) => {
+			// 	let newImgCanvas = {
+			// 		...this.imgCanvas
+			// 	};
+			// 	newImgCanvas.goodsQr = url;
+			// 	this.setCanvasImg(newImgCanvas);
+			// 	console.log(22222, this.imgCanvas)
+			// })
+		}
+		toShare() {
+			if (this.isAuthorization()) return;
+			let data = {
+				page: 'packages/goods/good-detail',
+				scene: {
+					uid: this.userInfo.uid,
+					// id: this.goodsInfo.id,
+					gid: this.goodsInfo.gid,
+					s: 1
+				}
+			};
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.getQr(data, (url: any) => {
+				this.setCanvasData({
+					type: 'goodQr',
+					data: url
+				});
+				(this.$refs.share as any).openPop();
+				return;
+				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) => {
+					res.stock = res.skuList.reduce((pre: any, cur: any) => {
+						return pre + cur.stock;
+					}, 0);
+					res.detailContent = (res.detailContent + '').replace(/<img/gi, '<img style="width: 100%;"');
+					res.detailContent = (res.detailContent + '').replace(/src="\/\//gi, 'src="https://');
+					this.goodsInfo = res;
+					this.goodsPopup = res;
+					let info = {
+						...res
+					};
+					// this.getGoodsShare();
+					// uni.downloadFile({
+					// 	url: res.masterPic,
+					// 	complete: (result: any) => {
+					// 		uni.hideLoading();
+					// 		if (result.statusCode === 200) {
+					// 			info.goodImg = result.tempFilePath
+					// 			this.setGoods(info);
+					// 		}
+					// 	}
+					// });
+					// uni.getImageInfo({
+					// 	src: res.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.carGoodsList
+				})
+				.then((res: any) => {
+					this.cartNum = res.reduce((pre: any, cur: any) => {
+						if (cur.invalid) {
+							return pre + 0;
+						} else {
+							return pre + cur.num;
+						}
+					}, 0)
+					// uni.hideLoading();
+				})
+				.catch((err: any) => {
+					// uni.hideLoading();
+					console.log(err);
+				});
+		}
+		//子->父 加购物车
+		addCart(e: any): void {
+			//验证是否登录
+			if (this.isAuthorization()) return;
+			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 {
+			//验证是否登录
+			if (this.isAuthorization()) return;
+			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
+				}
+			})
+		}
+		//打开规格选择窗口
+		chooseSpec(val ? : string): void {
+			// 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);
+		background: #F6F6F6;
+
+		.banner-styl {
+			position: relative;
+
+			.price-box {
+				height: vw(42);
+				width: vw(355);
+				@include flex-x();
+				background: #F2F9FF;
+				position: absolute;
+				// top: vw(-40);
+				bottom: 0;
+				left: 50%;
+				transform: translateX(-50%);
+				border-top-left-radius: vw(5);
+				border-top-right-radius: vw(5);
+
+				.left {
+					@include flex-x();
+					padding-left: vw(10);
+
+					.price {
+						@include word-vw(20, #E33C64);
+						font-weight: 600;
+
+						text {
+							font-size: vw(20);
+						}
+					}
+
+					.pre-price {
+						@include word-vw(12, #999);
+						margin-left: vw(6);
+						text-decoration: line-through;
+					}
+				}
+
+				.right {
+					height: vw(0);
+					background: transparent;
+					width: vw(75);
+					@include word-vw(16, #fff);
+					font-weight: 600;
+					@include flex-x(center);
+					position: absolute;
+					top: vw(-4);
+					right: 0;
+					border-top-right-radius: vw(5);
+					border-width: 0 0 vw(46) vw(46);
+					border-style: none solid solid;
+					border-color: transparent blue #333 transparent;
+
+					.member {
+						height: vw(44);
+						@include word-vw(12, #fff);
+						font-weight: normal;
+						// padding: 0 vw(5);
+						@include flex-x(center);
+						position: absolute;
+						top: 0;
+					}
+				}
+			}
+		}
+
+		.goods-module {
+			// padding-top: vw(12);
+			// margin-top: vw(-16);
+			// background-color: #ffffff;
+			// border-radius: vw(16);
+			position: relative;
+			// overflow: hidden;
+
+			.price-box {
+				.left {
+					.price {
+						color: #E33C64 !important;
+					}
+				}
+			}
+
+			// 	height: vw(42);
+			// 	width: vw(355);
+			// 	@include flex-x();
+			// 	background: $bk-color;
+			// 	position: absolute;
+			// 	top: vw(-40);
+			// 	left: 50%;
+			// 	transform: translateX(-50%);
+			// 	border-top-left-radius: vw(5);
+			// 	border-top-right-radius: vw(5);
+
+			// 	.left {
+			// 		@include flex-x();
+			// 		padding-left: vw(10);
+
+			// 		.price {
+			// 			@include word-vw(20, #333);
+			// 			font-weight: 600;
+
+			// 			text {
+			// 				font-size: vw(12);
+			// 			}
+			// 		}
+
+			.pre-price {
+				@include word-vw(12, #999);
+				margin-left: vw(8);
+				text-decoration: line-through;
+			}
+
+			// 	}
+
+			// 	.right {
+			// 		height: vw(0);
+			// 		background: transparent;
+			// 		width: vw(75);
+			// 		@include word-vw(16, #fff);
+			// 		font-weight: 600;
+			// 		@include flex-x(center);
+			// 		position: absolute;
+			// 		top: vw(-4);
+			// 		right: 0;
+			// 		border-top-right-radius: vw(5);
+			// 		border-width: 0 0 vw(46) vw(46);
+			// 		border-style: none solid solid;
+			// 		border-color: transparent blue #333 transparent;
+
+			// 		.member {
+			// 			height: vw(44);
+			// 			// padding: 0 vw(5);
+			// 			@include flex-x(center);
+			// 			position: absolute;
+			// 			top: 0;
+			// 		}
+			// 	}
+			// }
+			.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, $btn-color);
+						font-weight: 600;
+					}
+
+					.line-price {
+						@include word-vw(14, #999);
+						margin-left: vw(15);
+						text-decoration: line-through;
+					}
+				}
+
+				.share-btn {
+					width: vw(96);
+					height: vw(30);
+					background: $btn-color;
+					@include word-vw(12, #fff);
+					@include flex-x(center);
+					border-radius: vw(15);
+				}
+			}
+
+			.sale-info {
+				height: vw(50);
+				@include flex-x(space-between);
+				padding-left: vw(12);
+				padding-right: vw(18);
+				background: #fff;
+
+				.sale-num {
+					// padding: 0 vw(12);
+					// background: #ECECEC;
+					border-radius: vw(4);
+					white-space: nowrap;
+					line-height: vw(22);
+					@include word-vw(12, #333);
+				}
+
+				.stock {
+					@include word-vw(12, #333);
+					// margin-left: vw(15);
+				}
+
+				.freight {
+					@include word-vw(12, #999);
+				}
+			}
+
+			.no-deliver {
+				height: vw(55);
+				@include flex-x();
+				padding-left: vw(15);
+				padding-right: vw(10);
+				border-top: vw(1) solid #F6F6F6;
+				background: #fff;
+
+				text {
+					@include word-vw(14, #999);
+				}
+
+				.area {
+					flex: 1;
+					text-overflow: ellipsis;
+					overflow: hidden;
+					white-space: nowrap;
+					@include flex-x(flex-start);
+
+					text {
+						flex: 1;
+						display: block;
+						@include word-vw(14, #333);
+						margin-right: 6px;
+						text-overflow: ellipsis;
+						overflow: hidden;
+						white-space: nowrap;
+					}
+				}
+			}
+
+			.reward {
+				padding: 0 vw(12);
+				border-top: vw(1) solid #F6F6F6;
+				background: #fff;
+				@include flex-x(flex-start);
+				height: vw(54);
+
+				&.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, #F75E24);
+					// margin-right: vw(24);
+					font-weight: 600;
+				}
+			}
+
+			.spec-box {
+				height: vw(50);
+				margin: vw(10) 0;
+				background: #fff;
+				@include flex-x();
+				padding: 0 vw(12);
+
+				.left {
+					@include word-vw(14, #999);
+
+					text {
+						@include word-vw(14, #333);
+						margin-left: vw(20);
+					}
+				}
+			}
+
+			.goods-detail {
+				padding: vw(12) vw(12) 0;
+				border-bottom: 1px solid #fff;
+				position: relative;
+				background: #fff;
+				// border-radius: vw(16);
+
+				.goods-name {
+					@include word-vw(16, $gray3);
+					font-weight: bold;
+					// @include flex-x(flex-start);
+
+					.type {
+						padding: 0 vw(8);
+						line-height: vw(18);
+						background: #333;
+						@include word-vw(10, #fff);
+						border-radius: vw(3);
+						margin-right: vw(5);
+						flex-shrink: 0;
+						display: inline-block;
+					}
+				}
+
+				.goods-title {
+					@include word-vw(12, $gray9);
+					margin-top: vw(6);
+				}
+
+				.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(20) vw(10) vw(32);
+
+				.sale-num {
+					@include word-vw(12, $gray9);
+					margin: vw(10) 0 vw(6) vw(-8);
+				}
+
+				.sale-people {
+					@include flex-x();
+
+					.sale-left {
+						.people-img {
+							@include wh(34, 34);
+							border-radius: $all-radius;
+							position: relative;
+							margin: vw(2) 0 0 vw(-12);
+						}
+
+						.people-img1 {
+							@include wh(34, 34);
+							border-radius: $all-radius;
+							position: relative;
+							margin-left: -14px;
+							z-index: 0;
+						}
+					}
+
+					.invite-people {
+						@include flex-x(center);
+						@include solid-btn(122, 30, #ffffff, 15);
+						background-color: $bk-color;
+
+						.btn-title {
+							@include word-vw(12, #333);
+							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);
+				}
+			}
+		}
+
+		.goods-desc {
+			// margin-top: vw(-16);
+			background-color: #fff;
+			overflow: hidden;
+
+			.desc-title {
+				padding: 0 vw(20);
+				margin-top: vw(16);
+				@include word-vw(16, #333);
+			}
+
+			.desc-content {
+				padding: vw(12) vw(20);
+				@include word-vw(14, #666);
+				white-space: pre-wrap;
+			}
+
+			.desc-img {
+				font-size: 0;
+
+				.image-styl {
+					width: 100%;
+				}
+			}
+		}
+
+		.bottom-bar {
+			@include fixed-bottom(50);
+			@include flex-x();
+			box-sizing: border-box;
+			padding-left: vw(16);
+			background: #fff;
+
+			.bottom-left {
+				@include flex-x();
+				flex: 1;
+				padding-right: vw(20);
+
+				.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: #CF174E;
+						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();
+				padding-right: vw(10);
+
+				.cart-add {
+					@include wh(110, 40);
+					background-color: #fff;
+					@include word-vw(16, #333);
+					text-align: center;
+					line-height: vw(40);
+					border-top-left-radius: vw(20);
+					border-bottom-left-radius: vw(20);
+					border: vw(1) solid #999;
+					box-sizing: border-box;
+					border-right: none;
+				}
+
+				.buy-now {
+					@include wh(110, 40);
+					background-color: #F75E24;
+					@include word-vw(16, #fff);
+					text-align: center;
+					line-height: vw(40);
+					border-top-right-radius: vw(20);
+					border-bottom-right-radius: vw(20);
+				}
+			}
+		}
+	}
+</style>

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

@@ -0,0 +1,258 @@
+<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 - item.minGoldAmount) | moneyFormat}}</text></view>
+							<view>库存:<text>{{item.totalStock}}</text></view>
+						</view>
+						<view class="price-box" v-if="item.minGoldAmount > 0">
+							<view>
+								绿通:
+								<text>{{item.minGoldAmount | moneyFormat}}</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>

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

@@ -0,0 +1,505 @@
+<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 v-if="good.minGoldAmount <= 0">¥:<text>{{good.minPrice | moneyFormat}}</text></view>
+											<view v-else>
+												¥:<text style="margin-right: 10px;">{{(good.minPrice - good.minGoldAmount) | moneyFormat}}</text>
+												绿通:<text>{{good.minGoldAmount | 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>

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

@@ -0,0 +1,466 @@
+<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">&#xe841;</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">&#xe872;</text>
+				</view>
+				<view class="search-btn" @click="clickCancel" v-if="showHistory">取消</view>
+				<view v-else class="search-btn">
+					<IconText :code="`\ue870`" v-if="!sortType || sortType === 1" @click.native="changeType(2)">
+					</IconText>
+					<IconText :code="`\ue874`" 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="`\ue844`" size="12" 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="`\ue872`" 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="search-empty.svg"></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 = '商品搜索';
+		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;
+				this.categoryId = +query.id;
+				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,
+				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: $btn-color;
+					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%;
+				height: 100%;
+				padding-top: 20%;
+				@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>

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

@@ -0,0 +1,362 @@
+<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">
+					<text class="word13" v-if="!area.length">点击选择</text>
+					<text class="word13" v-else>{{ area[0] }},{{ area[1] }},{{ area[2] }}</text>
+					<text class="icon">&#xe84a;</text>
+				</uni-data-picker>
+				<!-- <picker class="input" @change="bindPickerChange" mode="region" :value="area">
+					<text class="word13" v-if="!area.length">点击选择</text>
+					<text class="word13" v-else>{{ area[0] }},{{ area[1] }},{{ area[2] }}</text>
+					<text class="icon">&#xe70d;</text>
+				</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">
+							<radio color="#FA402B" class="checkbox" value="1" :checked="address.gender == 1" />
+							先生
+						</label>
+						<label class="radio">
+							<radio color="#FA402B" class="checkbox" value="2" :checked="address.gender == 2" />
+							女士
+						</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();
+		}
+
+		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.info;
+					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 || '';
+			// this.area = val.detail.value;
+			// this.address.province = val.detail.code[0];
+			// this.address.city = val.detail.code[1];
+			// this.address.county = val.detail.code[2];
+		}
+	}
+</script>
+<style lang="scss">
+	.checkbox .wx-radio-input {
+		&::before {
+			color: #fff !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{
+			flex: 1;
+			text-align: right;
+			text{
+				text-align: left;
+			}
+		}
+
+		.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 {
+			margin-right: vw(30);
+			text-align: left;
+
+			radio {
+				transform: scale(0.6);
+			}
+		}
+	}
+
+	.phone {
+		@include bk-block;
+		@include flex-x();
+
+		.input {
+			width: vw(250);
+			text-align: left;
+		}
+	}
+
+	.fixed-bottom {
+		height: vw(56);
+		width: 100%;
+		background: #fff;
+		@include flex-x(center);
+
+		.solid-btn {
+			background: $bk-color;
+			@include solid-btn(230, 44, #333);
+			border-radius: vw(22);
+			@include word-vw(14, #fff);
+			font-weight: 450;
+		}
+	}
+</style>

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

@@ -0,0 +1,288 @@
+<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 ? '#FA402B' : '#D4D4D4'"
+								:code="`\ue879`" size="16"></IconText>
+						</view>
+						<text class="word12">默认地址</text>
+					</view>
+					<view class="edit-wrap">
+						<view @click.stop="editAddress(item.id)">
+							<IconText :code="`\ue877`" size="12" color="#666"></IconText>
+							<text class="word12">编辑</text>
+						</view>
+						<view @click.stop="delAddress(item.id)">
+							<IconText :code="`\ue844`" 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 {
+				width: vw(14);
+				height: vw(14);
+				border-radius: vw(7);
+				// background: $bk-color;
+				@include flex-x(center);
+
+				.default-icon {
+					@include flex-x(center);
+					transform: scale(0.7);
+				}
+			}
+		}
+
+		.edit-wrap {
+			@include flex-x(flex-end);
+			// white-space: nowrap;
+			// width: vw(145);
+			>view{
+				@include flex-x(center);
+			}
+
+			.icon {
+				@include icon(14, #8a8a8a);
+				margin-left: 10px;
+			}
+		}
+	}
+
+	.fixed-bottom {
+		height: vw(56);
+		width: 100%;
+		background: #fff;
+		@include flex-x(center);
+
+		.solid-btn {
+			background: $bk-color;
+			@include solid-btn(230, 44, #fff);
+			border-radius: vw(22);
+			@include word-vw(14, #fff);
+			font-weight: 450;
+		}
+	}
+</style>

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

@@ -0,0 +1,970 @@
+<template>
+	<view class="content">
+		<Navbar title="提交订单"></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>填写您的收货地址</view>
+			<text class="address-right">&#xe84a;</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">
+						X{{ item.num }}
+						<view class="goods-price">¥{{ item.price }}</view>
+					</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 !== '0'">{{freight | moneyFormat}}</text>
+				<text v-else>包邮</text>
+			</view>
+			<view class="total">
+				合计 ¥<text>{{sumPrice | moneyFormat}}</text>
+			</view>
+		</view>
+		<view class="desc-styl" v-show="!isPay">
+			<textarea placeholder-style="color:#999" class="remark" v-model="remark" placeholder="在这里填写您的备注" />
+		</view>
+		<view class="bottom-btn">
+			<view class="btn-left">
+				<!-- <view class="price-num">{{ totalPrice }}</view> -->
+				<view class="goods-sum">
+					<view class="total">合计:<text>¥{{sumPrice | moneyFormat}}</text></view>
+					<view class="" style="margin-left: 3px;">共{{ sumCount }}件</view>
+				</view>
+			</view>
+			<view class="btn-right" @click="confirmPay">提交订单</view>
+		</view>
+
+
+
+		<uni-popup ref="popup" :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="`\ue84c`" color="#40BA49" class="icon" size="16"></IconText>
+							微信支付
+						</view>
+						<view class="item-right">
+							<IconText :code="`\ue842`" :color="payType === 'wxPayMini' ? '#FA402B' : '#DEDEDE'"
+								class="icon" size="16">
+							</IconText>
+						</view>
+					</view>
+					<!-- <view class="pay-item" @click="selectPayType('aliPayApp')">
+						<view class="item-left">
+							<IconText :code="`\ue634`" color="#06B4FD" class="icon" size="16"></IconText>
+							支付宝支付
+						</view>
+						<view class="item-right">
+							<IconText :code="`\ue842`" :color="payType === 'aliPayApp' ? '#FA402B' : '#DEDEDE'"
+								class="icon" size="16">
+							</IconText>
+						</view>
+					</view> -->
+					<view class="pay-item" @click="selectPayType('balance')">
+						<view class="item-left">
+							<IconText :code="`\ue875`" color="#FA402B" class="icon" size="16"></IconText>
+							余额支付(余额:{{balanceInfo.balance | moneyFormat}})
+						</view>
+						<view class="item-right">
+							<IconText :code="`\ue842`" :color="payType === 'balance' ? '#FA402B' : '#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>
+		<ShowModal ref="confirm" title="提示" @submit="toPwd" leftBtnText="取消" content="您未设置支付密码,请先设置" btnText="设置" />
+		<!-- 选地址组件 -->
+		<AddressPopup ref="addressElem" :chooseId="defaultAddress.id || 0" :addressList="addressList"
+			@clickAddress="getAddressInfo"></AddressPopup>
+	</view>
+</template>
+<script lang="ts">
+	import {
+		Component,
+		Mixins
+	} from 'vue-property-decorator';
+	// @ts-ignore
+	import loginMixin from '@/common/mixins/loginMixin.ts';
+	import {
+		APPID
+	} from '@/common/constants';
+	import {
+		types
+	} from '@/common/store';
+	// interface PayInfo {
+	// 	amount: 0;
+	// 	oid: 0;
+	// 	unique: 0;
+	// };
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class CreateOrder extends Mixins(loginMixin) {
+		@baseModule.Getter('_address') _address: any;
+		@baseModule.Mutation(types.SET_ADDRESS) setAddress: any
+		titleContent: string = ''; //备注信息展示
+		payBillId: any = ''; // 支付票据
+		remark: string = ''; //备注信息
+		goodsList: Array < any > = [{}]; //商品数据
+		sumPrice: number = 0; // 应付金额
+		sumCount: number = 0;
+		addressList: Array < any > = []; //地址列表
+		defaultAddress: any = {}; //默认地址列表
+		canSubmit: boolean = true; //支付锁
+		isFirst: boolean = true; //第一次进入
+		payType: string = 'wxPayMini';
+		balanceInfo: any = {};
+		payTypeMap: any = {
+			wxPayMini: '微信支付',
+			balance: '余额支付'
+		}
+		payInfo: any = {};
+		isToApp: boolean = false;
+		providerMap: any = {
+			wxPayMini: 'wxpay',
+			aliPayApp: 'alipay'
+		};
+		isPay: boolean = false;
+		freight: any = 0;
+
+		onShow() {
+			if (!this.isToApp) return;
+			this.isToApp = false;
+			if (this.payInfo && this.payInfo.oid) {
+				this.getDetail(this.payInfo.oid);
+			}
+		}
+
+		async onLoad() {
+			this.goodsList = this.$Route.query.data;
+			this.sumCount = this.$Route.query.sumCount;
+			this.setAddress(null);
+			this.getUserInfo();
+			await this.getAddressList();
+			this.addressList.find((val: any) => {
+				if (val.isDefault == 1) {
+					this.defaultAddress = val;
+					return true;
+				}
+			});
+			this.searchPrice(); //查询总价
+			this.isFirst = false;
+		}
+
+		onUnload() {
+			this.isPay = false;
+			if (!this.payBillId) return;
+			this.closePay();
+		}
+
+		//获取地址列表
+		getAddressList() {
+			return this.$http
+				.get({
+					url: this.$api.addressList,
+					data: {}
+				})
+				.then((res: any) => {
+					this.addressList = res.list;
+				})
+				.catch((err: any) => {
+					console.log(err);
+				});
+		}
+		//查询商品价格
+		searchPrice() {
+			if (!this.canSubmit) return;
+			let data: any = {
+				delivery: 1,
+				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;
+				})
+				.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);
+				});
+		}
+
+		getDetail(oid: any): void {
+			// 获取订单详情
+			this.$http
+				.get({
+					url: this.$api.orderDetail,
+					data: {
+						oid: oid
+					}
+				})
+				.then((res: any) => {
+					if (res.main.status === 8) {
+						this.payBillId = null;
+						this.$Router.replace({
+							path: '/packages/order/pay-success',
+							query: {
+								oid: oid,
+								payment: res.main.payment
+							}
+						});
+					}
+				})
+				.catch((err: any) => {
+					console.log(err);
+				});
+		}
+
+		selectType() {
+			if (this.payType === 'wxPayMini' || this.payType === 'aliPayApp') {
+				this.getParmas(this.payInfo)
+				return;
+				// // #ifdef APP-PLUS
+				// (this.$refs.popup as any).close();
+				// this.moneyPayApp(this.payInfo);
+				// // #endif
+				// // #ifndef APP-PLUS
+				// this.getParmas(this.payInfo)
+				// // #endif
+			};
+			if (this.payType === 'balance')(this.$refs.password as any).open();
+		}
+		selectPayType(type: any) {
+			if (!this.canSubmit) return;
+			this.payType = type;
+		}
+		confirmPay() {
+			// 提交订单信息(二期,微信支付)
+			let that: any = this;
+			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,
+				delivery: 1,
+				skuList: {},
+				genre: 1
+			};
+			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;
+					// this.getParmas(res);
+					uni.hideLoading();
+					await this.getBalance();
+					this.isPay = true;
+					(this.$refs.popup 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 that: any = this;
+			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
+			that.$http
+				.post({
+					url: that.$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') {
+						that.moneyPay(res, info.payBillId, info);
+					} else {
+						that.canSubmit = true;
+						that.payBillId = null;
+						uni.showToast({
+							title: '支付成功!',
+							icon: 'none',
+							duration: 2000
+						});
+						that.$Router.replace({
+							path: '/packages/order/pay-success',
+							query: {
+								oid: info.oid,
+								payment: info.payment
+							}
+						});
+					}
+					uni.hideLoading();
+				})
+				.catch((err: any) => {
+					console.log(err);
+					that.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, payBillId: number, 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.closePay(payBillId);
+					that.canSubmit = true;
+				}
+			});
+		}
+		moneyPayApp(info: any) {
+			this.isToApp = true;
+			plus.share.getServices(function(res) {
+				var sweixin = null;
+				for (var i = 0; i < res.length; i++) {
+					var t = res[i];
+					if (t.id == 'weixin') {
+						sweixin = t;
+					}
+				}
+				if (sweixin) {
+					sweixin.launchMiniProgram({
+						id: APPID, //这里写你的小程序原始id(以gh开头)
+						type: 0, //这里是不同的环境(默认0)
+						path: `/pages/front/pay?oid=${info.oid}&amount=${info.payment}&payType=2` //这里是指定页的路径,如需传参直接字符串拼接(首页可以省略)
+						// path: '/pages/front/front' //这里是指定页的路径,如需传参直接字符串拼接(首页可以省略)
+					});
+				}
+			}, function(res) {
+				console.log(JSON.stringify(res));
+			});
+		}
+		closePay() {
+			(this.$refs.popup 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() {
+			// this.$Router.push({
+			// 	path: '/packages/order/address-manage',
+			// 	query: {
+			// 		from: 'order'
+			// 	}
+			// });
+			await this.getAddressList();
+			(this.$refs.addressElem as any).open();
+		}
+		//手动选择地址
+		getAddressInfo(val: any) {
+			this.defaultAddress = val;
+			this.searchPrice(); //查询总价
+		}
+	}
+</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 0 vw(100);
+		box-sizing: border-box;
+
+		.address-styl {
+			@include flex-x();
+			padding: vw(10);
+			background-color: #ffffff;
+			width: 100%;
+			box-sizing: border-box;
+			min-height: vw(94);
+			border-radius: vw(5);
+			margin-top: vw(1);
+
+			.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(16, #333333);
+				margin: vw(10) 0;
+				font-weight: 600;
+			}
+
+			.address-right {
+				@include icon(12, $btn-color);
+			}
+		}
+
+		.pay-type {
+			height: vw(70);
+			background: #fff;
+			@include flex-x();
+			margin-top: vw(10);
+			padding: 0 vw(20);
+			@include word-vw(14, #333);
+
+			.type {
+				@include flex-x();
+				font-weight: 600;
+
+				.icon {
+					margin-left: vw(5);
+				}
+			}
+		}
+
+		.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, flex-end);
+				font-size: vw(14);
+				margin-bottom: vw(12);
+				position: relative;
+
+				.image-styl {
+					@include wh(64, 64);
+					background: #f5f5f5;
+					flex-shrink: 0;
+					border-radius: $main-radius;
+				}
+
+				.goods-info {
+					margin-left: vw(10);
+					flex: 1;
+					overflow: hidden;
+
+					.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(12, #666);
+						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(14, #333);
+					font-weight: normal;
+					// 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(5);
+
+			.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);
+				}
+			}
+		}
+
+		.desc-styl {
+			.remark {
+				background: #fff;
+				width: 100%;
+				height: vw(80);
+				border-radius: vw(5);
+				margin-top: vw(10);
+				padding: vw(10);
+				font-size: vw(14);
+				box-sizing: border-box;
+			}
+		}
+
+		.bottom-btn {
+			width: 100%;
+			height: vw(50);
+			@include flex-x();
+			position: fixed;
+			left: 0;
+			bottom: 0;
+			background: #fff;
+			padding-left: vw(12);
+			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, #E33C64);
+						font-weight: 550;
+					}
+				}
+			}
+
+			.btn-right {
+				width: vw(136);
+				height: vw(50);
+				// border-radius: vw(22);
+				background: $bk-color;
+				@include flex-x(center);
+				@include word-vw(14, #fff);
+			}
+		}
+
+		.pay-type-pop {
+			background: #fff;
+			padding: vw(35) vw(20) vw(30);
+			border-top-left-radius: vw(34);
+			border-top-right-radius: vw(34);
+			@include flex-y();
+			position: relative;
+
+			.close {
+				position: absolute;
+				right: vw(20);
+				top: vw(20);
+			}
+
+			.title {
+				@include word-vw(12, #666);
+				margin-bottom: vw(18);
+			}
+
+			.type-item {
+				height: vw(50);
+				border-bottom: vw(1) solid #F5F5F5;
+				width: 100%;
+				@include flex-x();
+				@include word-vw(14, #333);
+
+				view {
+					@include flex-x();
+
+					.icon {
+						margin-right: vw(10);
+					}
+				}
+
+				&:nth-last-of-type(1) {
+					border-width: 0;
+				}
+
+				.icon {
+					@include icon(15, #DEDEDE);
+				}
+
+				.icon1 {
+					@include icon(15, $btn-color);
+				}
+			}
+		}
+
+		.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(14, #333);
+				font-weight: bold;
+			}
+
+			.time-tip {
+				@include word-vw(10, #999);
+				margin-top: vw(3);
+			}
+
+			.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;
+
+				.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>

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

@@ -0,0 +1,226 @@
+<template>
+	<view class="container">
+		<Navbar title="我的订单" background-color="#fff" color="#333"></Navbar>
+		<view class="content">
+			<!-- <view class="row" @click="selectNameModal"> -->
+			<view  class="row">
+				<view class="label">物流公司</view>
+				<!-- <view class="right">
+					{{name || '请选择'}}
+					<IconText size="12" :code="`\ue764`" color="#999"></IconText>
+				</view> -->
+				<view class="right">
+					<input class="input" type="text" placeholder="请填写物流公司" v-model="name">
+				</view>
+			</view>
+			<view class="row">
+				<view class="label">物流单号</view>
+				<view class="right">
+					<input class="input" type="text" placeholder="请填写物流单号" v-model="code">
+				</view>
+			</view>
+			<view class="bottom-btn">
+				<view class="solid-btn" v-if="id" @click="handleConfirm2">提交</view>
+				<view class="solid-btn" v-else @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 = '';
+		id: any = null;
+
+		onShow() {
+			this.id = +this.$Route.query.id || null;
+			if(this.id) {
+				this.name = this.$Route.query.company;
+				this.code = this.$Route.query.code;
+			}
+			// 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
+				.post({
+					url: this.$api.deliveryOrder,
+					data: {
+						oid: +this.$Route.query.oid,
+						company: this.name,
+						code: this.code
+					}
+				})
+				.then((res : any) => {
+					uni.hideLoading();
+					this.$Router.back(1);
+				}, (err : any) => {
+					uni.hideLoading();
+					console.log(err);
+				});
+		}
+		handleConfirm2(){
+			this.$http
+				.put({
+					url: this.$api.updateOrderLogistic,
+					data: {
+						id: +this.$Route.query.id,
+						company: this.name,
+						code: this.code
+					}
+				})
+				.then((res : any) => {
+					uni.hideLoading();
+					this.$Router.back(1);
+				}, (err : any) => {
+					uni.hideLoading();
+					console.log(err);
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content{
+		padding-top: vw(1);
+	}
+	.row {
+		height: vw(66);
+		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;
+		}
+		
+		.input{
+			@include wh(250, 50);
+			border-radius: vw(5);
+			background: rgb(239, 239, 239);
+			padding: 0 vw(18);
+			text-align: left;
+			box-sizing: border-box;
+		}
+	}
+
+	.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 = null; // 订单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>

+ 928 - 0
src/packages/order/order-detail.vue

@@ -0,0 +1,928 @@
+<template>
+	<view class="container">
+		<!-- <Navbar title="订单详情" navType="home" background-color="#ffffff" color="#333333" v-if="from == 'pay-success'">
+		</Navbar>
+		<Navbar title="订单详情" background-color="#ffffff" color="#333333" v-else></Navbar> -->
+		<Navbar title="订单详情" background-color="#ffffff" color="#333333"></Navbar>
+		<view class="head" :style="{backgroundImage: static ? `url(${static + bgMap[infoStatus]})` : '#FA402B'}">
+			<text class="status">{{ infoStatus | filterStatus }}</text>
+			<text v-if="infoStatus === 2">
+				剩{{ minite }}分钟{{ second }}秒后自动关闭
+			</text>
+		</view>
+		<view class="logistics" @click="tologistics(item.id)" v-for="item in logList" :key="item.id"
+			v-if="logisticsObj[item.id]">
+			<text class="icon">&#xe6f3;</text>
+			<view class="logistics-detail">
+				<text class="word12 title">{{ logisticsObj[item.id][0].context }}</text>
+				<text class="word12-gray9 time">{{ logisticsObj[item.id][0].time }}</text>
+			</view>
+			<text class="right">&#xe70d;</text>
+		</view>
+		<view class="address">
+			<text class="icon">&#xe701;</text>
+			<view class="address-detail">
+				<text class="word12 name">{{ detail.address.name }}</text>
+				<text class="word12">{{ detail.address.phone }}</text>
+				<text class="word12-gray9 area">
+					{{
+						detail.address.provinceStr +
+							detail.address.cityStr +
+							detail.address.countyStr +
+							detail.address.address
+					}}
+				</text>
+			</view>
+			<view class="copy-box" @click="handleCopy">
+				<IconText :code="`\ue892`" size="20" color="#F75E24"></IconText>
+			</view>
+		</view>
+		<view class="remark">
+			<text class="word14">备注:{{ detail.address.remark || '无' }}</text>
+		</view>
+		<view class="order-wrap">
+			<!-- <text class="oid">订单号:{{ oid }}</text>
+			<text class="word12-gray9 time">{{ info.created }}</text> -->
+			<OrderItem :sku="skuList" :total="payment"></OrderItem>
+			<view class="total-detail">
+				<view class="top">
+					商品合计
+					<!-- <text>¥{{(payment - info.freight) | moneyFormat}}</text> -->
+					<text v-if="info.goldAmount > 0">{{info.goldAmount | moneyFormat}}绿通&nbsp;&nbsp;&nbsp;¥{{(payment - info.freight - info.goldAmount) | moneyFormat}}</text>
+					<text v-else>¥{{(payment - info.freight) | moneyFormat}}</text>
+				</view>
+				<view class="bottom">
+					邮费
+					<text v-if="info.freight && info.freight !== '0'">{{info.freight | moneyFormat}}</text>
+					<text v-else>包邮</text>
+				</view>
+			</view>
+			<view class="total">合计:
+				<!-- <text>¥{{ payment | moneyFormat }}</text> -->
+				<text v-if="info.goldAmount > 0">{{info.goldAmount | moneyFormat}}绿通&nbsp;&nbsp;&nbsp;¥{{ (payment - info.goldAmount) | moneyFormat }}</text>
+				<text v-else>¥{{ payment | moneyFormat }}</text>
+			</view>
+		</view>
+		<!-- <view class="oid">
+			订单编号
+			<text>{{oid}}</text>
+		</view> -->
+		<view class="detail">
+			<text class="word12-gray9">订单编号:</text>
+			<text class="word12-gray9 half">{{ oid }}</text>
+			<text class="word12-gray9" v-if="infoStatus != 2">付款时间</text>
+			<text class="word12-gray9 half" v-if="infoStatus != 2">{{ info.payTime }}</text>
+			<text class="word12-gray9" v-if="infoStatus === 18">收货时间</text>
+			<text class="word12-gray9 half" v-if="infoStatus === 18">{{ info.deliverTime }}</text>
+		</view>
+		<!-- <view class="btn-box" v-if="infoStatus === 2">
+			<view class="btn2 btn" @click.stop="cancelOrderModal">取消订单</view>
+			<view class="btn" @click.stop="payPop">付款</view>
+		</view> -->
+		<view class="btn-box" v-if="infoStatus === 8">
+			<!-- <view class="btn2 btn" @click.stop="toTellModal">申请售后</view> -->
+			<view class="btn" @click.stop="handleRemind">发货</view>
+		</view>
+		<view class="btn-box" v-if="infoStatus === 16 || infoStatus === 18">
+			<!-- <view class="btn btn2" @click.stop="toTellModal()">申请售后</view>
+			<view class="btn" @click.stop="confirmOrderModal">确认收货</view> -->
+			<view class="btn" @click.stop="handleRemind('update')">修改物流</view>
+		</view>
+		<uni-popup ref="payPopup" type="bottom" :safe-area="false">
+			<view class="pay-type-pop">
+				<view class="close" @click="closePop">
+					<IconText :code="`\ue847`" size="16" color="#999"></IconText>
+				</view>
+				<text class="title">选择支付方式</text>
+				<view class="type-item" @click="payType = 'wxPayMini'">
+					<view>
+						<IconText class="icon" :code="`\ue84c`" size="18" color="#09BB07"></IconText>微信支付
+					</view>
+					<text class="icon1" v-if="payType === 'wxPayMini'">
+						&#xe842;
+					</text>
+					<text class="icon" v-else>
+						&#xe842;
+					</text>
+				</view>
+				<!-- <view class="type-item" @click="payType = 'aliPayApp'">
+					<view>
+						<IconText class="icon" :code="`\ue634`" size="18" color="#06B4FD"></IconText>支付宝支付
+					</view>
+					<text class="icon1" v-if="payType === 'aliPayApp'">
+						&#xe842;
+					</text>
+					<text class="icon" v-else>
+						&#xe842;
+					</text>
+				</view> -->
+				<view class="type-item" @click="payType = 'balance'">
+					<view>
+						<IconText class="icon" :code="`\ue875`" size="20" color="#FA402B"></IconText>
+						余额支付(余额: {{balanceInfo.balance}})
+					</view>
+					<text class="icon1" v-if="payType === 'balance'">
+						&#xe842;
+					</text>
+					<text class="icon" v-else>
+						&#xe842;
+					</text>
+				</view>
+				<view class="btn" @click="handlePay">
+					确定
+				</view>
+			</view>
+		</uni-popup>
+		<Password ref="password" @finish="passwordFinish"></Password>
+		<ShowModal ref="cancelOrder" title="提示" @submit="cancelOrder" leftBtnText="取消" content="确定要取消该订单吗"
+			btnText="确认" />
+		<ShowModal ref="confirmOrder" title="提示" @submit="confirmOrder" leftBtnText="取消" content="是否确定收货"
+			btnText="确认" />
+		<ShowModal ref="tell" title="请联系平台客服进行售后" :content="phone" btnText="拨打" @submit="toTell" leftBtnText="取消" />
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		// Prop,
+		Vue,
+		// Emit
+	} from 'vue-property-decorator';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	import {
+		APPID
+	} from '@/common/constants';
+	import {
+		PHONENNUMBER
+	} from '@/common/constants';
+	@Component({
+		filters: {
+			filterStatus(val : number) {
+				let objMap : any = {
+					2: '待付款',
+					8: '待发货',
+					10: '已备货',
+					16: '待收货',
+					18: '已收货'
+				}
+				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);
+			}
+		}
+	})
+	export default class OrderDetail extends Vue {
+		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;
+		payType : string = 'wxPayMini';
+		balanceInfo : any = {};
+		logisticsObj : any = {};
+		providerMap : any = {
+			wxPayMini: 'wxpay',
+			aliPayApp: 'alipay'
+		};
+		bgMap : any = {
+			2: 'order-01.svg',
+			8: 'order-02.svg',
+			16: 'order-03.svg',
+			18: 'order-04.svg'
+		};
+		static : string = OSS_STATIC;
+		phone : any = PHONENNUMBER;
+		onLoad() {
+			this.from = this.$Route.query.from;
+			// this.getDetail();
+		}
+		onShow() {
+			if (this.$Route.query.id) {
+				this.getDetail();
+			}
+		}
+		destroyed() {
+			clearInterval(this.timer);
+		}
+		updateData() {
+			this.getDetail();
+		}
+		countDown() : void {
+			// 计算应付款时间距离现在的时间差(30分钟)
+			const current : number = new Date().getTime();
+			const created : number = new Date(this.info.created.replace(/-/g, '/')).getTime();
+			const differ : number = 30 * 60 * 1000 - (current - created);
+			this.minite = Math.floor(differ / 1000 / 60) > 0 ? Math.floor(differ / 1000 / 60) : 0;
+			this.second = Math.floor((differ / 1000) % 60) > 0 ? Math.floor((differ / 1000) % 60) : 0;
+			// 添加一个定时器倒计时,秒针达到0时,分钟减1
+			this.timer = setInterval(() => {
+				this.second--;
+				// console.log('countdown', this.minite + '分' + this.second + '秒');
+				if (this.second == -1) {
+					this.minite--;
+					this.second = 59;
+				}
+				// 离开页面或者分钟为0时关闭定时器
+				if (this.minite <= 0) {
+					this.minite = 0;
+					this.second = 0;
+					clearInterval(this.timer);
+					// 重新更新页面
+					// this.getDetail();
+					// this.$Router.back(1);
+				}
+			}, 1000);
+		}
+		tologistics(id : any) : void {
+			this.$Router.push({
+				path: '/packages/order/logistics',
+				query: {
+					oid: this.oid,
+					id: id
+				}
+			});
+		}
+		getLogistics() : void {
+			this.$http
+				.get({
+					url: this.$api.logistics,
+					data: {
+						oid: this.oid
+					}
+				})
+				.then((res : any) => {
+					this.logList = res.data;
+				})
+				.catch((err : any) => {
+					console.log(err);
+				});
+		}
+		getLogisticsInfo(id : any) : void {
+			this.$http
+				.get({
+					url: this.$api.getLogisticsInfo,
+					data: {
+						oid: this.oid,
+						id: +id
+					}
+				})
+				.then((res : any) => {
+					this.logisticsObj[id] = res.data;
+					this.logisticsObj = { ...this.logisticsObj };
+				})
+				.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) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+		getDetail() : void {
+			let id = this.$Route.query.id;
+			if (!id) return;
+			// 获取订单详情
+			this.$http
+				.get({
+					url: this.$api.orderDetail,
+					data: {
+						oid: id
+					}
+				})
+				.then((res : any) => {
+					this.detail = res;
+					// 以下变量均为app层级太深无法渲染创建
+					this.info = res.main;
+					this.payment = +res.main.payment;
+					this.skuList = res.skuList;
+					this.oid = res.main.oid;
+					this.infoStatus = res.main.status;
+					this.logList = res.logisticList || [];
+					if (this.infoStatus == 2) {
+						this.countDown();
+					}
+					if (res.logisticList.length) {
+						// this.getLogistics();
+						res.logisticList.forEach((item : any) => {
+							this.getLogisticsInfo(item.id);
+						})
+					}
+				})
+				.catch((err : any) => {
+					console.log(err);
+				});
+		}
+		async payPop() {
+			await this.getBalance();
+			(this.$refs.payPopup as any).open();
+		}
+		handlePay() {
+			if (this.payType === 'wxPayMini' || this.payType === 'aliPayApp') {
+				this.getParmas();
+				return;
+				// // #ifdef APP-PLUS
+				// (this.$refs.payPopup as any).close();
+				// this.moneyPayApp(this.info);
+				// // #endif
+				// // #ifndef APP-PLUS
+				// this.getParmas();
+				// // #endif
+			};
+			if (this.payType === 'balance') {
+				(this.$refs.payPopup as any).close();
+				(this.$refs.password as any).open();
+			};
+		}
+
+		closePop() {
+			(this.$refs.payPopup as any).close();
+		}
+
+		async getParmas(safe : any = {}) {
+			// 拉取支付参数
+			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: {
+							oid: this.info.oid, //支付票据ID
+							amount: this.info.payment, //支付金额
+							payType: 2, //支付类型:2,订单支付;
+							mode: mode
+						},
+						third: {
+							code: eve.code,
+						},
+						safe: safe
+					}
+				})
+				.then((res : any) => {
+					// this.moneyPay(res, this.info.payBillId, this.info);
+					if (this.payType === 'wxPayMini' || this.payType === 'aliPayApp') {
+						this.moneyPay(res, this.info.payBillId, this.info);
+					} else {
+						uni.showToast({
+							title: '支付成功!',
+							icon: 'none',
+							duration: 2000
+						});
+						this.$Router.replace({
+							path: '/packages/order/pay-success',
+							query: {
+								oid: this.info.oid,
+								payment: this.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, payBillId : number, 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);
+			uni.requestPayment({
+				"provider": this.providerMap[this.payType],
+				...option,
+				"orderInfo": orderInfo,
+				success: function (result) {
+					console.log('微信回调', result);
+					if (result.errMsg == 'requestPayment:ok') {
+						// 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
+							}
+						});
+					}
+				},
+				fail: function (err : any) {
+					console.log('微信支付失败', err);
+					// 在此调用支付关闭的接口
+					// that.closePay(info.oid);
+					// that.canSubmit = true;
+				}
+			});
+		}
+		moneyPayApp(info : any) {
+			plus.share.getServices(function (res) {
+				var sweixin = null;
+				for (var i = 0; i < res.length; i++) {
+					var t = res[i];
+					if (t.id == 'weixin') {
+						sweixin = t;
+					}
+				}
+				if (sweixin) {
+					sweixin.launchMiniProgram({
+						id: APPID, //这里写你的小程序原始id(以gh开头)
+						type: 0, //这里是不同的环境(默认0)
+						path: `/pages/front/pay?oid=${info.oid}&amount=${info.payment}&payType=2` //这里是指定页的路径,如需传参直接字符串拼接(首页可以省略)
+					});
+				}
+			}, function (res) {
+				console.log(JSON.stringify(res));
+			});
+		}
+		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);
+				}
+			}
+		}
+		passwordFinish(val : any) {
+			// uni.showLoading({
+			// 	title: '加载中'
+			// });
+			// uni.hideLoading();
+			this.getParmas(val);
+		}
+		cancelOrderModal() {
+			(this.$refs.cancelOrder as any).open();
+		}
+		closePay(payBillId : any) {
+			this.$http
+				.post({
+					url: this.$api.closePay,
+					data: {
+						id: payBillId //支付票据ID
+					}
+				})
+				.then((res : any) => {
+					uni.showToast({
+						title: '支付失败!',
+						icon: 'none',
+						duration: 2000
+					});
+				})
+				.catch((err : any) => { });
+		}
+		cancelOrder() {
+			this.$http
+				.put({
+					url: this.$api.cancelOrder,
+					data: {
+						oid: this.oid
+					}
+				})
+				.then((res : any) => {
+					uni.showToast({
+						title: '取消成功',
+						icon: 'none'
+					});
+					this.$Router.back(1);
+				})
+		}
+		toTellModal() {
+			(this.$refs.tell as any).open();
+		}
+
+		toTell() {
+			uni.makePhoneCall({
+				phoneNumber: PHONENNUMBER //仅为示例
+			});
+		}
+		confirmOrderModal() {
+			(this.$refs.confirmOrder as any).open();
+		}
+		confirmOrder() {
+			this.$http
+				.post({
+					url: this.$api.confirmOrder,
+					data: {
+						oid: this.oid
+					}
+				})
+				.then((res : any) => {
+					uni.showToast({
+						title: '已确认收货',
+						icon: 'none'
+					});
+				})
+		}
+		handleRemind(type: any = '') {
+			let query: any = {
+				oid: this.info.oid
+			};
+			if(type === 'update'){
+				query.id = this.logList[0].id;
+				query.company = this.logList[0].company;
+				query.code = this.logList[0].code;
+			};
+			this.$Router.push({
+				path: '/packages/order/deliver-goods',
+				query: query
+			});
+		}
+
+		handleCopy() {
+			uni.setClipboardData({
+				data: `${this.detail.address.name},${this.detail.address.phone},${this.detail.address.provinceStr +
+					this.detail.address.cityStr +
+					this.detail.address.countyStr +
+					this.detail.address.address}`, // data的值为你要复制的内容
+				success: () => {
+					uni.showToast({
+						title: "复制成功",
+						icon: "none"
+					})
+				},
+				fail: (err : any) => {
+					console.log(err);
+				}
+			});
+		}
+	}
+</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);
+	}
+
+	.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);
+		}
+
+		.copy-box {
+			width: vw(36);
+			height: vw(36);
+			@include flex-x(center);
+			border-radius: vw(18);
+		}
+
+		.address-detail {
+			flex: 1;
+			display: flex;
+			flex-wrap: wrap;
+			align-content: space-between;
+			margin-left: 10px;
+
+			.area {
+				width: 100%;
+				margin-top: vw(8);
+			}
+
+			.name {
+				width: vw(180);
+			}
+		}
+	}
+
+	.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: $bk-color;
+		padding: $cell-padding;
+		box-sizing: border-box;
+		color: #fff;
+		font-size: vw(12);
+		background-size: cover;
+		background-repeat: no-repeat;
+		background-position: right center;
+
+		.status {
+			font-size: vw(18);
+			margin-bottom: vw(5);
+			font-weight: 600;
+		}
+	}
+
+	.order-wrap {
+		width: 100vw;
+		display: flex;
+		margin-top: vw(10);
+		flex-wrap: wrap;
+		align-content: space-between;
+		background: white;
+		// padding-top: vw(5);
+
+		.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);
+			}
+		}
+	}
+
+	.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;
+		}
+	}
+
+	.btn-box {
+		height: vw(56);
+		@include flex-x(center);
+		width: 100%;
+		padding: 0 vw(15);
+		box-sizing: border-box;
+		background: #fff;
+		position: fixed;
+		bottom: 0;
+
+		.btn {
+			height: vw(44);
+			width: vw(148);
+			line-height: vw(44);
+			@include word-vw(12, #fff);
+			background: $btn-color;
+			border-radius: vw(10);
+			margin-left: vw(10);
+			text-align: center;
+			box-sizing: border-box;
+		}
+
+		.btn2 {
+			background: #fff;
+			color: $btn-color;
+			border: vw(1) solid $btn-color;
+		}
+	}
+
+	.pay-type-pop {
+		background: #fff;
+		padding: vw(35) vw(20) vw(30);
+		border-top-left-radius: vw(10);
+		border-top-right-radius: vw(10);
+		@include flex-y();
+		position: relative;
+
+		.close {
+			position: absolute;
+			right: vw(20);
+			top: vw(20);
+		}
+
+		.title {
+			@include word-vw(12, #666);
+			margin-bottom: vw(18);
+		}
+
+		.type-item {
+			height: vw(50);
+			border-bottom: vw(1) solid #F5F5F5;
+			width: 100%;
+			@include flex-x();
+			@include word-vw(14, #333);
+
+			view {
+				@include flex-x();
+
+				.icon {
+					margin-right: vw(10);
+				}
+			}
+
+			&:nth-last-of-type(2) {
+				border-width: 0;
+			}
+
+			.icon {
+				@include icon(15, #DEDEDE);
+			}
+
+			.icon1 {
+				@include icon(15, $btn-color);
+			}
+		}
+
+		.btn {
+			@include solid-btn(280, 40, #ffffff, 25);
+			font-size: vw(12);
+			margin-top: vw(8);
+		}
+	}
+</style>

+ 836 - 0
src/packages/order/order-list.vue

@@ -0,0 +1,836 @@
+<template>
+	<view class="container">
+		<Navbar title="订单" background-color="#ffffff" color="#333333"></Navbar>
+		<view class="tabs">
+			<view class="tab" :class="{active: item.value === active}" v-for="item in tabList"
+				@click="changeTab(item.value)" :key="item.value">
+				{{item.name}}
+				<view class="bar"></view>
+			</view>
+		</view>
+		<NoData v-if="!isLoading && !currentList.length" :show="!isLoading && !currentList.length" topNum="10"></NoData>
+		<view class="order-list">
+			<view v-for="(item, i) in currentList" :key="i" class="order-item" @click="toDetail('normal', item.oid)">
+				<view class="order-wrap">
+					<view class="order-between">
+						<text class="oid">订单号:{{ item.oid }}</text>
+						<text class="status">{{ statusMap[item.status]}}</text>
+					</view>
+					<OrderItem :sku="item.skuList" :total="item.payment"></OrderItem>
+					<!-- <view class="total">共{{item.skuList | numFormat}}件 合计:<text>¥{{ item.payment | moneyFormat }}</text> -->
+					<view class="total" v-if="item.goldAmount > 0">共{{item.skuList | numFormat}}件 合计:<text style="margin-right: 3px;">绿通{{ item.goldAmount | moneyFormat }}</text><text>¥{{ (item.payment - item.goldAmount) | moneyFormat }}</text></view>
+					<view class="total" v-else>共{{item.skuList | numFormat}}件 合计:<text>¥{{ item.payment | moneyFormat }}</text>
+					</view>
+					<view class="btn-box" v-if="item.status === 8">
+						<view class="btn" @click.stop="handleRemind(item.oid)">发货</view>
+					</view>
+				</view>
+			</view>
+			<view class="tips" v-if="currentList.length">
+				<text v-if="finish[active]">没有更多了</text>
+				<text v-else>加载更多</text>
+			</view>
+		</view>
+		<uni-popup ref="payPopup" type="bottom" :safe-area="false">
+			<view class="pay-type-pop">
+				<view class="close" @click="closePop">
+					<IconText :code="`\ue847`" size="16" color="#999"></IconText>
+				</view>
+				<text class="title">选择支付方式</text>
+				<view class="type-item" @click="payType = 'wxPayMini'">
+					<view>
+						<IconText class="icon" :code="`\ue84c`" size="18" color="#09BB07"></IconText>微信支付
+					</view>
+					<text class="icon1" v-if="payType === 'wxPayMini'">
+						&#xe842;
+					</text>
+					<text class="icon" v-else>
+						&#xe842;
+					</text>
+				</view>
+				<!-- <view class="type-item" @click="payType = 'aliPayApp'">
+					<view>
+						<IconText class="icon" :code="`\ue634`" size="18" color="#06B4FD"></IconText>支付宝支付
+					</view>
+					<text class="icon1" v-if="payType === 'aliPayApp'">
+						&#xe842;
+					</text>
+					<text class="icon" v-else>
+						&#xe842;
+					</text>
+				</view> -->
+				<view class="type-item" @click="payType = 'balance'">
+					<view>
+						<IconText class="icon" :code="`\ue875`" size="20" color="#FA402B"></IconText>
+						余额支付(余额: {{balanceInfo.balance}})
+					</view>
+					<text class="icon1" v-if="payType === 'balance'">
+						&#xe842;
+					</text>
+					<text class="icon" v-else>
+						&#xe842;
+					</text>
+				</view>
+				<view class="btn" @click="handlePay">
+					确定
+				</view>
+			</view>
+		</uni-popup>
+		<Password ref="password" @finish="passwordFinish"></Password>
+		<ShowModal ref="cancelOrder" title="提示" @submit="cancelOrder" leftBtnText="取消" content="确定要取消该订单吗"
+			btnText="确认" />
+		<ShowModal ref="confirmOrder" title="提示" @submit="confirmOrder" leftBtnText="取消" content="是否确定收货"
+			btnText="确认" />
+		<ShowModal ref="tell" title="请联系平台客服进行售后" :content="phone" btnText="拨打" @submit="toTell"
+			leftBtnText="取消" />
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Vue,
+	} from 'vue-property-decorator';
+	import {
+		APPID
+	} from '@/common/constants';
+	import {
+		PHONENNUMBER
+	} from '@/common/constants';
+	let that;
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			},
+			numFormat(list: any) {
+				return list.reduce((pre: any, cur: any) => {
+					return pre + cur.num
+				}, 0);
+			}
+		}
+	})
+	export default class OrderList extends Vue {
+		tabList: any = [{
+				name: '全部',
+				value: 0
+			},
+			{
+				name: '待付款',
+				value: 2
+			},
+			{
+				name: '待发货',
+				value: 8
+			},
+			{
+				name: '待收货',
+				value: 16
+			},
+			{
+				name: '已收货',
+				value: 18
+			}
+		];
+		statusMap: any = {
+			2: '待付款',
+			8: '待发货',
+			16: '待收货',
+			18: '已收货'
+		};
+		active: number = 0; // tab栏选中index
+		size: number = 20;
+		currentList: any[] = [];
+		orderList: any = {
+			0: [],
+			2: [],
+			8: [],
+			16: [],
+			18: []
+		};
+		page: any = {
+			0: 1,
+			2: 1,
+			8: 1,
+			16: 1,
+			18: 1
+		};
+		isfirst: boolean = false;
+		isLoading: boolean = false;
+		finish: any = {
+			0: false,
+			2: false,
+			8: false,
+			16: false,
+			18: false
+		}; // 数据到底
+		isGet: boolean = true; // 是否可以拉去数据
+		oid: any = null;
+		payType: string = 'wxPayMini';
+		payInfo: any = {};
+		balanceInfo: any = {};
+		providerMap: any = {
+			wxPayMini: 'wxpay',
+			aliPayApp: 'alipay'
+		};
+		phone: any = PHONENNUMBER;
+
+		onLoad() {
+			// let query = this.$Route.query;
+			// this.active = +query.status || 0;
+			// this.pullList();
+		}
+		onShow() {
+			// if (this.isfirst) {
+			// 	this.updateData()
+			// } else {
+			// 	this.isfirst = true
+			// }
+			let query = this.$Route.query;
+			this.active = +query.status || 0;
+			this.resetData();
+		}
+
+		resetData() {
+			console.log('reset');
+			this.page = {
+				0: 1,
+				2: 1,
+				8: 1,
+				16: 1,
+				18: 1
+			};
+			this.finish = {
+				0: false,
+				2: false,
+				8: false,
+				16: false,
+				18: false
+			};
+			this.isGet = true;
+			this.orderList = {
+				0: [],
+				2: [],
+				8: [],
+				16: [],
+				18: []
+			};
+			this.currentList = []
+			this.getList();
+		};
+		pullList() {
+			this.getList();
+		}
+		
+		toTellModal(){
+			(this.$refs.tell as any).open();
+		}
+		
+		toTell() {
+			uni.makePhoneCall({
+				phoneNumber: PHONENNUMBER //仅为示例
+			});
+		}
+		
+		changeTab(index: number) {
+			// 如果请求未结束,禁止切换
+			if (!this.isGet) {
+				return false;
+			}
+			this.active = index;
+			this.currentList = this.orderList[this.active]
+			// 如果切换时未获取过数据,获取一次
+			if (this.page[this.active] == 1) {
+				this.pullList();
+			}
+		}
+		onReachBottom() {
+			this.getList();
+		}
+		updateData() {
+			console.log('更新');
+			this.page[this.active] = 1;
+			this.finish[this.active] = false;
+			this.isGet = true;
+			this.orderList[this.active] = [];
+			this.currentList = this.orderList[this.active]
+			this.getList();
+		}
+		getList(): void | boolean {
+			console.log('已更新数据');
+			if (this.finish[this.active] || !this.isGet) {
+				// 已经没有更多了或者上次请求未结束
+				return false;
+			}
+			this.isGet = false;
+			let data = {
+				page: this.page[this.active],
+				size: this.size,
+				status: this.active,
+			};
+			// if (this.active == 0) {
+			// 	delete data.status;
+			// }
+			uni.showLoading({
+				title: '加载中'
+			});
+			this.isLoading = true;
+			this.$http
+				.get({
+					url: this.$api.orderList,
+					data: data
+				})
+				.then((res: any) => {
+					res.list = res.list || [];
+					uni.hideLoading();
+					this.isLoading = false;
+					if (this.page[this.active] == 1) {
+						this.orderList[this.active] = [];
+						this.currentList = this.orderList[this.active]
+					}
+					this.orderList[this.active].push(...res.list);
+					this.currentList = this.orderList[this.active]
+					console.log('真正拉数据', this.currentList)
+					this.page[this.active]++;
+					this.isGet = true;
+					// 没有更多了
+					if (res.list.length < this.size) {
+						this.finish[this.active] = true;
+					}
+				})
+				.catch((err: any) => {
+					uni.hideLoading();
+					this.isLoading = false;
+					console.log(err);
+				});
+		}
+		toDetail(type: string, id: number): void {
+			this.$Router.push({
+				path: '/packages/order/order-detail',
+				query: {
+					id: id
+				}
+			});
+		}
+		async payPop(info: any) {
+			this.payInfo = info;
+			await this.getBalance();
+			(this.$refs.payPopup as any).open();
+		}
+		
+		getBalance() {
+			uni.showLoading({
+				title: '加载中'
+			});
+			return this.$http
+				.get({
+					url: this.$api.getBalance
+				})
+				.then((res: any) => {
+					this.balanceInfo = res;
+					uni.hideLoading();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+		
+		closePop(){
+			(this.$refs.payPopup as any).close();
+		}
+		
+		handlePay() {
+			if (this.payType === 'wxPayMini' || this.payType === 'aliPayApp') {
+				this.getParmas();
+				return;
+				// // #ifdef APP-PLUS
+				// (this.$refs.payPopup as any).close();
+				// this.moneyPayApp(this.payInfo);
+				// // #endif
+				// // #ifndef APP-PLUS
+				// this.getParmas();
+				// // #endif
+			};
+			if (this.payType === 'balance'){
+				(this.$refs.payPopup as any).close();
+				(this.$refs.password as any).open();
+			};
+		}
+		async getParmas(safe: any = {}) {
+			let info = this.payInfo;
+			// 拉取支付参数
+			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: {
+							oid: info.oid, //支付票据ID
+							amount: info.payment, //支付金额
+							payType: 2, //支付类型:2,订单支付;
+							mode: mode
+						},
+						third: {
+							code: eve.code,
+						},
+						safe: safe
+					}
+				})
+				.then((res: any) => {
+					// this.moneyPay(res, info.payBillId, info);
+					if (this.payType === 'wxPayMini' || this.payType === 'aliPayApp') {
+						this.moneyPay(res, info.payBillId, info);
+					} else {
+						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, payBillId: number, 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);
+			uni.requestPayment({
+				"provider": this.providerMap[this.payType],
+				...option,
+				"orderInfo": orderInfo,
+				success: function(result) {
+					console.log('微信回调', result);
+					if (result.errMsg == 'requestPayment:ok') {
+						// 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
+							}
+						});
+					}
+				},
+				fail: function(err: any) {
+					console.log('微信支付失败', err);
+					// 在此调用支付关闭的接口
+					// that.closePay(info.oid);
+					// that.canSubmit = true;
+				}
+			});
+		}
+		moneyPayApp(info: any) {
+			plus.share.getServices(function(res) {
+				var sweixin = null;
+				for (var i = 0; i < res.length; i++) {
+					var t = res[i];
+					if (t.id == 'weixin') {
+						sweixin = t;
+					}
+				}
+				if (sweixin) {
+					sweixin.launchMiniProgram({
+						id: APPID, //这里写你的小程序原始id(以gh开头)
+						type: 0, //这里是不同的环境(默认0)
+						path: `/pages/front/pay?oid=${info.oid}&amount=${info.payment}&payType=2` //这里是指定页的路径,如需传参直接字符串拼接(首页可以省略)
+					});
+				}
+			}, function(res) {
+				console.log(JSON.stringify(res));
+			});
+		}
+		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);
+				}
+			}
+		}
+		passwordFinish(val: any) {
+			// uni.showLoading({
+			// 	title: '加载中'
+			// });
+			// uni.hideLoading();
+			this.getParmas(val);
+			
+		}
+		cancelOrderModal(oid: any) {
+			this.oid = oid;
+			(this.$refs.cancelOrder as any).open();
+		}
+		cancelOrder() {
+			this.$http
+				.put({
+					url: this.$api.cancelOrder,
+					data: {
+						oid: this.oid
+					}
+				})
+				.then((res: any) => {
+					uni.showToast({
+						title: '取消成功',
+						icon: 'none'
+					});
+					this.resetData();
+				})
+		}
+		tologistics(oid: any) {
+			this.$Router.push({
+				path: '/packages/order/logistics',
+				query: {
+					oid
+				}
+			});
+		}
+		confirmOrderModal(oid: any) {
+			this.oid = oid;
+			(this.$refs.confirmOrder as any).open();
+		}
+		confirmOrder() {
+			this.$http
+				.post({
+					url: this.$api.confirmOrder,
+					data: {
+						oid: this.oid
+					}
+				})
+				.then((res: any) => {
+					uni.showToast({
+						title: '已确认收货',
+						icon: 'none'
+					});
+					this.resetData();
+				})
+		}
+		handleRemind(oid: any) {
+			this.$Router.push({
+				path: '/packages/order/deliver-goods',
+				query: {
+					oid
+				}
+			});
+		}
+		toPay() {
+			// uni.login({
+			// 	success: res => {
+			// 		if (res.code) {
+			// 			this.beforeWX(res.code);
+			// 		} else {
+			// 			uni.showToast({
+			// 				icon: 'none',
+			// 				title: 'code 获取失败:' + res.errMsg
+			// 			});
+			// 		}
+			// 	}
+			// });
+		}
+		closePay() {
+			this.$http
+				.post({
+					url: this.$api.closePay,
+					data: {
+						// id: this.payBillId //支付票据ID
+					}
+				})
+				.then((res: any) => {
+					// this.canSubmit = true;
+					uni.showToast({
+						title: '支付失败!',
+						icon: 'none',
+						duration: 2000
+					});
+				})
+				.catch((err: any) => {
+					// this.canSubmit = true;
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.word16 {
+		@include word-vw(16, $gray9);
+	}
+
+	.word18 {
+		@include word-vw(18, $gray3);
+		font-weight: bold;
+	}
+
+	.word12 {
+		@include word-vw(12, $gray9);
+	}
+
+	.noData {
+		width: 100vw;
+		margin-top: vw(90);
+		@include flex-y(center, center);
+
+		.image {
+			width: vw(150);
+		}
+
+		.word16 {
+			margin-left: vw(20);
+		}
+	}
+
+	.tabs {
+		background: #fff;
+		@include flex-x();
+		height: vw(40);
+		width: 100%;
+		margin-top: vw(1);
+
+		.tab {
+			flex: 1;
+			text-align: center;
+			@include word-vw(12, #999);
+			height: vw(40);
+			@include flex-y(center, center);
+
+			&.active {
+				@include word-vw(12, #333);
+				font-weight: 450;
+				position: relative;
+
+				.bar {
+					width: vw(25);
+					height: vw(3);
+					border-radius: vw(3);
+					background: $btn-color;
+					position: absolute;
+					bottom: vw(3);
+				}
+			}
+		}
+	}
+
+	.tips {
+		width: 100vw;
+		text-align: center;
+		@include word-vw(12, $gray9);
+		margin-top: 10px;
+	}
+
+	.order-list {
+		width: 100%;
+		@include flex-y();
+		margin-bottom: vw(10);
+
+		.order-item {
+			margin-top: vw(10);
+		}
+
+		.order-wrap {
+			width: 100%;
+
+			.order-between {
+				@include flex-x();
+				padding: 0 vw(15);
+				box-sizing: border-box;
+				height: vw(40);
+				background: #fff;
+				border-bottom: vw(1) solid #F1EDED;
+			}
+
+			.oid {
+				flex: 4;
+				box-sizing: border-box;
+				@include word-vw(12);
+			}
+
+			.status {
+				box-sizing: border-box;
+				@include word-vw(14, #333);
+				padding: 0 vw(3);
+				height: vw(18);
+				line-height: vw(20);
+				border-bottom: 2px solid $btn-color;
+				font-weight: bold;
+			}
+
+			.oid-refund {
+				flex: 3;
+				padding: vw(15);
+				box-sizing: border-box;
+				text-align: right;
+				@include word-vw(12, $gray9);
+			}
+
+			.status-red {
+				flex: 2;
+				text-align: left;
+				padding: vw(15);
+				box-sizing: border-box;
+				@include word-vw(14, $main-color);
+			}
+
+			.total {
+				width: 100%;
+				height: vw(40);
+				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);
+				}
+			}
+
+			.btn-box {
+				height: vw(50);
+				@include flex-x(flex-end);
+				width: 100%;
+				padding: 0 vw(15);
+				box-sizing: border-box;
+				background: #fff;
+				border-top: vw(1) solid #F1EDED;
+
+				.btn {
+					height: vw(35);
+					width: vw(90);
+					line-height: vw(35);
+					@include word-vw(12, #fff);
+					background: $btn-color;
+					border-radius: vw(10);
+					margin-left: vw(10);
+					text-align: center;
+					box-sizing: border-box;
+				}
+
+				.btn2 {
+					background: #fff;
+					color: #333;
+					border: vw(1) solid #333;
+				}
+			}
+		}
+	}
+
+	.pay-type-pop {
+		background: #fff;
+		padding: vw(35) vw(20) vw(30);
+		border-top-left-radius: vw(10);
+		border-top-right-radius: vw(10);
+		@include flex-y();
+		position: relative;
+
+		.close {
+			position: absolute;
+			right: vw(20);
+			top: vw(20);
+		}
+
+		.title {
+			@include word-vw(12, #666);
+			margin-bottom: vw(18);
+		}
+
+		.type-item {
+			height: vw(50);
+			border-bottom: vw(1) solid #F5F5F5;
+			width: 100%;
+			@include flex-x();
+			@include word-vw(14, #333);
+
+			view {
+				@include flex-x();
+
+				.icon {
+					margin-right: vw(10);
+				}
+			}
+
+			&:nth-last-of-type(2) {
+				border-width: 0;
+			}
+
+			.icon {
+				@include icon(15, #DEDEDE);
+			}
+
+			.icon1 {
+				@include icon(15, $btn-color);
+			}
+		}
+
+		.btn {
+			@include solid-btn(280, 40, #ffffff, 25);
+			font-size: vw(12);
+			margin-top: vw(8);
+		}
+	}
+</style>

+ 122 - 0
src/packages/order/pay-success.vue

@@ -0,0 +1,122 @@
+<template>
+	<view class="success-box">
+		<Navbar title="支付成功"></NavBar>
+		<view class="content">
+			<view class="top">
+				<IconText :code="`\ue64d`" size="48" color="#fff"></IconText>
+				<view class="money"><text>¥</text>{{money | moneyFormat}}</view>
+				<view class="tip"><text>支付成功</text></view>
+			</view>
+			<view class="btn" @click="toIndex">返回首页</view>
+			<view class="btn2" @click="toIndex">继续逛逛</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 PaySuccess extends Vue {
+		money: any = null;
+		oid: any = null;
+		pic: string = '';
+		onShow() {
+			this.money = +this.$Route.query.payment || 0;
+			this.oid = +this.$Route.query.oid || null;
+		}
+		handleConfirm() {
+			this.$Router.replace({
+				path: '/packages/order/order-list'
+			})
+		}
+		
+		toDetail(): void {
+			this.$Router.push({
+				path: '/packages/order/order-detail',
+				query: {
+					id: this.oid
+				}
+			});
+		}
+		toIndex(): void {
+			this.$Router.pushTab({
+				path: '/pages/front/front',
+			});
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.success-box {
+		background: #fff;
+		height: 100vh;
+		box-sizing: border-box;
+		@include flex-y();
+
+		.content {
+			flex: 1;
+			overflow-y: auto;
+			/* padding: 0 vw(20); */
+			box-sizing: border-box;
+			width: 100%;
+			@include flex-y(flex-start, center);
+
+			.top {
+				width: 100%;
+				height: vw(200);
+				@include flex-y(center, center);
+			}
+
+			.money {
+				@include word-vw(36, #333);
+				font-weight: bold;
+				margin-top: vw(8);
+
+				text {
+					font-size: vw(16);
+					font-weight: normal;
+				}
+			}
+
+			.tip {
+				@include word-vw(16, #333);
+				margin-top: vw(8);
+				text-align: center;
+			}
+
+			.btn {
+				width: vw(335);
+				height: vw(50);
+				border-radius: vw(10);
+				@include flex-x(center);
+				background: $btn-color;
+				@include word-vw(16, #fff);
+				font-weight: 450;
+				margin-top: vw(48);
+			}
+
+			.btn2 {
+				width: vw(335);
+				height: vw(50);
+				border-radius: vw(10);
+				@include flex-x(center);
+				background: #FFF7F7;
+				border: vw(1) solid $btn-color;
+				box-sizing: border-box;
+				@include word-vw(16, #333);
+				font-weight: 450;
+				margin-top: vw(16);
+			}
+		}
+	}
+</style>

+ 600 - 0
src/packages/user/business/add-business.vue

@@ -0,0 +1,600 @@
+<template>
+	<view class="add-business-box">
+		<Navbar :title="_userInfo.balance === 1 ? '加入我们' : '商家入驻'" color="#333"></Navbar>
+		<view class="content">
+			<view class="item">
+				<view class="label">店铺名称</view>
+				<input type="text" class="input" v-model="data.shopName" placeholder="点击输入店铺名称">
+			</view>
+			<view class="item">
+				<view class="label">主营项目<text>(选填)</text></view>
+				<input type="text" class="input" v-model="data.manageContent" placeholder="点击输入主营项目">
+			</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>
+			</view>
+			<view class="item item3">
+				<view class="label">联系方式</text></view>
+				<input type="text" class="input" v-model="data.shopPhone" placeholder="输入联系电话">
+			</view>
+			<view class="item">
+				<view class="label">引荐人</view>
+				<input type="text" class="input" :disabled="true" :value="_userInfo.superior" placeholder="输入引荐人联系电话">
+			</view>
+			<view class="item item2 item3">
+				<view class="label">地址信息</view>
+				<view class="position" @click="getLocation">{{data.shopAddress || '点击定位地址'}}
+					<IconText :code="`\ue853`" size="12" class="icon" color="#FA402B"></IconText>
+				</view>
+			</view>
+			<view class="item mph">
+				<view class="label">门牌号</view>
+				<textarea class="input" v-model="data.house" placeholder-class="placeholder"
+					placeholder="详细地址,例:8号楼1单元5层501室" cols="30" rows="10"></textarea>
+			</view>
+			<view class="item item3 des">
+				<view class="label">商家描述<text>(选填)</text></view>
+				<textarea class="input" v-model="data.describe" placeholder="点击输入商家文字描述" cols="30" rows="10"></textarea>
+			</view>
+			<view class="item item3 pics">
+				<view class="label">商家营业执照</view>
+				<view class="upload-box">
+					<MulImgUpload @update="getImgs2" :imgs="data.license" :max="10" :width="66 / 3.75"
+						:height="66 / 3.75" addColor="#FA402B">
+					</MulImgUpload>
+				</view>
+			</view>
+			<view class="item item2 item3">
+				<view class="label">商家门头照</view>
+				<view class="master-img" @click="handleMasterImg">
+					<image :src="data.shopIcon" class="img" mode=""></image>
+					<IconText :code="`\ue84a`" size="12" color="#BDBBBB"></IconText>
+				</view>
+			</view>
+			<view class="item item3 pics">
+				<view class="label">商家图片</view>
+				<view class="upload-box">
+					<MulImgUpload @update="getImgs" :imgs="data.shopPics" :max="5" :width="66 / 3.75"
+						:height="66 / 3.75" addColor="#FA402B">
+					</MulImgUpload>
+				</view>
+			</view>
+			<view class="item item3 pics">
+				<view class="label">商家视频<br><text>仅可上传一个视频</text></view>
+				<view class="upload-box">
+					<view v-if="!data.shopVideo" class="empty" @click="handleMasterVideo">
+						<IconText :code="`\ue85f`" color="#FA402B" size="20"></IconText>
+					</view>
+					<view v-else class="img-box">
+						<!-- #ifdef MP-WEIXIN -->
+						<video :src="data.shopVideo" class="video"></video>
+						<!-- #endif -->
+						<!-- #ifndef MP-WEIXIN -->
+						<image :src="static ? static + 'video-default.png' : ''" class="video-img" mode=""
+							@click="handlePlay"></image>
+						<video :src="data.shopVideo" class="video" id="video" v-show="false"
+							@fullscreenchange="fullscreenchange"></video>
+						<!-- #endif -->
+						<IconText class="delete-icon" @click.native.stop="deleteVideo" :code="`\ue6e8`" color="#333"
+							size="16"></IconText>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="bottom">
+			<view class="agree-btn-box">
+				<IconText class="icon" size="14" v-if="isAgree" :code="`\ue879`" color="#6ABCE6" @click.native="isAgree = false">
+				</IconText>
+				<IconText class="icon" size="14" v-else :code="`\ue84e`" color="#999" @click.native="isAgree = true"></IconText>
+				请仔细阅读<text class="agree-btn" @click="handleAgree">《绿价比商城商户入驻须知》</text>
+			</view>
+			<view class="btn-box">
+				<view class="btn" v-if="info.status === 1">审核中...</view>
+				<view class="btn" @click="handleUpdate" v-else-if="info.status === 3">重新提交申请</view>
+				<view class="btn" @click="handleUpdate" v-else-if="info.status === 2" style="background: #00BA66;">
+					更新店铺信息(已入驻)</view>
+				<!-- <view class="btn" @click="handleConfirm" v-else>提交申请</view> -->
+				<view class="btn" @click="handleConfirm" v-else-if="info.status === 0">提交申请</view>
+				<view class="btn btn2" @click="toOnlineSale">申请开通线上售货</view>
+			</view>
+		</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
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	import agreement from './agreement';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	@Component({})
+
+	export default class AddBusiness extends Vue {
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		typeList: any = [];
+		shopType: any = {};
+		addressInfo: any = {};
+		videoImg: string = "";
+		info: any = {};
+		data: any = {
+			shopName: '',
+			shopPhone: '',
+			manageContent: '',
+			bindingUid: null,
+			shopType: null,
+			shopAddress: '',
+			house: '',
+			describe: '',
+			shopIcon: '',
+			shopPics: [],
+			lng: null,
+			lat: null,
+			shopVideo: '',
+			license: []
+		};
+		static: string = OSS_STATIC;
+		videoContext: any = null;
+		id: any = null;
+		agreement: {
+			title: string;content: string
+		} = agreement;
+		isAgree: any = false;
+		handleAgree() {
+			(this.$refs.agreement as any).open('bottom');
+		}
+
+		async onLoad() {
+			// this.id = this.$Route.query.id;
+			// this.id && await this.getInfo();
+			// this.getTypeList();
+			await this.getInfo();
+			this.getTypeList();
+		}
+
+		getInfo() {
+			return this.$http
+				.get({
+					url: this.$api.getBusinessInfo,
+					data: {
+						// id: this.id
+					}
+				})
+				.then((res: any) => {
+					this.info = res;
+					let data = {
+						...this.data
+					};
+					for (let key in this.data) {
+						data[key] = res[key];
+					}
+					this.data = data;
+					this.data.bindingUid = this._userInfo.superior;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+
+		getTypeList() {
+			this.$http
+				.get({
+					url: this.$api.getBusinessTypeList,
+				})
+				.then((res: any) => {
+					this.typeList = res.list;
+					this.shopType = res.list.find((item: any) => {
+						return item.id === this.data.shopType;
+					}) || {};
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+
+		deleteVideo() {
+			this.videoImg = '';
+			this.data.shopVideo = "";
+		}
+
+		handlePlay() {
+			this.videoContext = uni.createVideoContext('video');
+			this.videoContext.requestFullScreen();
+		}
+
+		fullscreenchange(e: any) {
+			e.detail.fullScreen && this.videoContext.pause();
+		}
+
+		changeType(val: any) {
+			let value = +val.detail.value;
+			this.shopType = this.typeList[value];
+			this.data.shopType = this.shopType.id;
+		}
+
+		getLocation() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			uni.getLocation({
+				type: 'wgs84',
+				success: (res: any) => {
+					// console.log(res, '经纬度')
+					uni.hideLoading();
+					if (res.errMsg == 'getLocation:ok') {
+						uni.chooseLocation({
+							// 传入你要去的纬度
+							latitude: this.data.lat || res.latitude,
+							// 传入你要去的经度
+							longitude: this.data.lng || res.longitude,
+							// 传入你要去的地址信息 不填则为空
+							// 缩放大小
+							success: (info: any) => {
+								this.data = {
+									...this.data,
+									lat: info.latitude,
+									lng: info.longitude,
+									shopAddress: info.address
+								};
+								console.log(this.data)
+							}
+						});
+					}
+				},
+				fail: () => {
+					uni.hideLoading();
+				}
+			});
+		}
+		handleMasterImg() {
+			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;
+							uni.hideLoading();
+						})
+						.catch((err: any) => {
+							uni.hideLoading();
+							console.log(err);
+						});
+				}
+			});
+		}
+
+		handleMasterVideo() {
+			uni.chooseVideo({
+				sourceType: ['camera', 'album'],
+				success: (res: any) => {
+					console.log(res, 213)
+					const tempFilePaths: any = res.tempFilePath;
+					this.videoImg = res.thumbTempFilePath;
+					let resSize = res.size;
+					if (resSize > 52428800) {
+						uni.showToast({
+							title: "上传视频大小不能超过50MB",
+							icon: 'none'
+						});
+						return;
+					}
+					uni.showLoading({
+						title: '上传中...'
+					});
+					this.$http
+						.upPic({
+							filePath: tempFilePaths
+						})
+						.then((res: any) => {
+							this.data.shopVideo = res;
+							uni.hideLoading();
+						})
+						.catch((err: any) => {
+							uni.hideLoading();
+							console.log(err);
+						});
+				}
+			});
+		}
+		getImgs(pics: any) {
+			this.data.shopPics = pics;
+		}
+
+		getImgs2(pics: any) {
+			this.data.license = pics;
+		}
+		handleConfirm() {
+			// console.log(this.data)
+			if (!this.isAgree) {
+				uni.showToast({
+					title: "请同意入驻须知",
+					icon: 'none'
+				})
+				return;
+			}
+			uni.showLoading({
+				title: '加载中...'
+			});
+			this.$http
+				.post({
+					url: this.$api.addBusiness,
+					data: this.data
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '店铺入驻申请审核中,请稍后...',
+						icon: 'none'
+					});
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+		handleUpdate() {
+			if (!this.isAgree) {
+				uni.showToast({
+					title: "请同意入驻须知",
+					icon: 'none'
+				})
+				return;
+			}
+			console.log(this.data)
+			uni.showLoading({
+				title: '加载中...'
+			});
+			this.$http
+				.put({
+					url: this.$api.updateBusinessInfo,
+					data: {
+						id: this.info.id,
+						...this.data
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '店铺入驻申请审核中,请稍后...',
+						icon: 'none'
+					});
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+		toOnlineSale(){
+			this.$Router.push({
+				path: '/packages/user/business/add-online-sale'
+			})
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.add-business-box {
+		.content {
+			padding-bottom: vw(100);
+
+			.item {
+				height: vw(66);
+				background: #fff;
+				margin-top: vw(1);
+				@include flex-x();
+				padding: 0 vw(15);
+
+				.label {
+					@include word-vw(14, #333);
+
+					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);
+			}
+
+			.item3 {
+				margin-top: vw(10);
+			}
+
+			.mph,
+			.des,
+			.pics {
+				height: auto;
+				padding: vw(15) vw(12);
+
+				.label {
+					align-self: flex-start;
+					padding-top: vw(3);
+
+					text {
+						font-size: vw(10);
+					}
+				}
+			}
+
+			.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(90);
+			background: #fff;
+			@include flex-y(center);
+			z-index: 99;
+
+			.btn {
+				@include flex-x(center);
+				@include solid-btn(170, 50, #fff, 25);
+				@include word-vw(14, #fff);
+			}
+			
+			.btn2{
+				background: #FF8D1A;
+			}
+
+			.agree-btn-box {
+				padding: 0 0 vw(8);
+				@include word-vw(12, #999);
+				@include flex-x(center);
+
+				.icon {
+					margin-right: vw(3);
+				}
+
+				.agree-btn {
+					color: $btn-color;
+				}
+			}
+			.btn-box{
+				width: 100%;
+				padding: 0 vw(10);
+				box-sizing: border-box;
+				@include flex-x();
+			}
+		}
+
+		//用户协议
+		.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>

+ 538 - 0
src/packages/user/business/add-online-sale.vue

@@ -0,0 +1,538 @@
+<template>
+	<view class="add-business-box">
+		<Navbar title="申请线上售货" color="#333"></Navbar>
+		<view class="content">
+			<view class="item">
+				<view class="label label1">主体类型</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>
+			</view>
+			
+			<view class="item item3">
+				<view class="label label1" style="font-weight: bold;">经营者/法人身份证信息(必填项):</view>
+			</view>
+			<view class="card-box">
+				<view class="card">
+					<view class="left" @click="selectPic(1)">
+						<image class="pic" :src="pic1" mode="aspectFit" v-if="pic1"></image>
+						<image class="pic" :src="static ? static + 'card-01.png' : ''" mode="aspectFit" v-else></image>
+						点击采集身份证国徽面
+					</view>
+					<view class="right" @click="selectPic(2)">
+						<image class="pic" :src="pic2" mode="aspectFit" v-if="pic2"></image>
+						<image class="pic" :src="static ? static + 'card-02.png' : ''" mode="aspectFit" v-else></image>
+						点击采集身份证头像面
+					</view>
+				</view>
+			</view>
+			<view class="item">
+				<view class="label">个人信息确认</view>
+			</view>
+			<view class="item">
+				<view class="label">姓名:</view>
+				<input type="text" class="input" v-model="data.shopName" placeholder="点击输入姓名">
+			</view>
+			<view class="item">
+				<view class="label">身份证号:</view>
+				<input type="text" class="input" v-model="data.shopName" placeholder="点击输入身份证号">
+			</view>
+			
+			
+			<view class="tip-item">
+				<view>商户收款信息(必填项):</view>
+				<text>注:你属于个体工商户,请输入个人银行卡信息</text>
+			</view>
+			
+			<view class="item">
+				<view class="label">收款账户名:</text></view>
+				<input type="text" class="input" v-model="data.shopPhone" placeholder="输入收款账户名">
+			</view>
+			<view class="item">
+				<view class="label">收款银行卡号:</view>
+				<input type="text" class="input" v-model="data.shopPhone" placeholder="输入收款银行卡号">
+			</view>
+			<view class="item">
+				<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>
+			</view>
+			
+			<view class="item item3">
+				<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>
+			</view>
+			<view class="item">
+				<view class="label">结算费率:</view>
+				<view class="input2">
+					5%
+				</view>
+			</view>
+			<view class="item item3 item4">
+				<view class="label3">驳回理由</view>
+				<view class="input3">
+					文字描文字描述文字描述文字描述文字描述文字描述文字描述文字描述述
+				</view>
+			</view>
+		</view>
+		<view class="bottom">
+			<view class="agree-btn-box">
+				<IconText class="icon" size="14" v-if="isAgree" :code="`\ue879`" color="#6ABCE6" @click.native="isAgree = false">
+				</IconText>
+				<IconText class="icon" size="14" v-else :code="`\ue84e`" color="#999" @click.native="isAgree = true"></IconText>
+				我已阅读并同意<text class="agree-btn" @click="handleAgree">《第三方协议》</text>
+			</view>
+			<view class="btn-box">
+				<view class="btn" @click="handleConfirm">稍后再认证</view>
+				<view class="btn btn2" @click="handleConfirm">保存并提交</view>
+			</view>
+		</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,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	import agreement from './agreement';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	@Component({})
+
+	export default class AddBusiness extends Vue {
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		info: any = {};
+		data: any = {
+			
+		};
+		static: string = OSS_STATIC;
+		id: any = null;
+		agreement: {
+			title: string;content: string
+		} = agreement;
+		isAgree: any = false;
+		pic1: any = '';
+		pic2: any = '';
+		
+		handleAgree() {
+			(this.$refs.agreement as any).open('bottom');
+		}
+
+		async onLoad() {
+			await this.getInfo();
+		}
+
+		getInfo() {
+			return this.$http
+				.get({
+					url: this.$api.getBusinessInfo,
+					data: {
+						// id: this.id
+					}
+				})
+				.then((res: any) => {
+					this.info = res;
+					let data = {
+						...this.data
+					};
+					for (let key in this.data) {
+						data[key] = res[key];
+					}
+					this.data = data;
+					this.data.bindingUid = this._userInfo.superior;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+		
+		selectPic(type : any) {
+			console.log(type)
+			uni.chooseMedia({
+				count: 1,
+				mediaType: ['image'],
+				sourceType: ['album', 'camera'],
+				camera: 'back',
+				success: (res: any) => {
+					console.log(res)
+					uni.showLoading({
+						title: '上传中...'
+					});
+					this.$http
+						.upPic({
+							filePath: res.tempFiles[0].tempFilePath
+						})
+						.then((res2 : any) => {
+							uni.hideLoading();
+							console.log(res2);
+							if (type === 1) {
+								this.pic1 = res2
+							};
+							if (type === 2) {
+								this.pic2 = res2
+							};
+						});
+				}
+			})
+		}
+		
+		handleConfirm() {
+			// console.log(this.data)
+			if (!this.isAgree) {
+				uni.showToast({
+					title: "请同意入驻须知",
+					icon: 'none'
+				})
+				return;
+			}
+			uni.showLoading({
+				title: '加载中...'
+			});
+			this.$http
+				.post({
+					url: this.$api.addBusiness,
+					data: this.data
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '店铺入驻申请审核中,请稍后...',
+						icon: 'none'
+					});
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+		handleUpdate() {
+			if (!this.isAgree) {
+				uni.showToast({
+					title: "请同意入驻须知",
+					icon: 'none'
+				})
+				return;
+			}
+			console.log(this.data)
+			uni.showLoading({
+				title: '加载中...'
+			});
+			this.$http
+				.put({
+					url: this.$api.updateBusinessInfo,
+					data: {
+						id: this.info.id,
+						...this.data
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '店铺入驻申请审核中,请稍后...',
+						icon: 'none'
+					});
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.add-business-box {
+		.content {
+			padding-bottom: vw(150);
+
+			.item {
+				height: vw(66);
+				background: #fff;
+				margin-top: vw(1);
+				@include flex-x();
+				padding: 0 vw(15);
+
+				.label {
+					@include word-vw(14, #999);
+
+					text {
+						@include word-vw(14, #999);
+					}
+				}
+				
+				.label1{
+					@include word-vw(14, #333);
+				}
+				
+				.label3{
+					@include word-vw(14, #333);
+					align-self: flex-start;
+				}
+
+				.input {
+					width: vw(200);
+					height: vw(50);
+					background: #F6F6F6;
+					border-radius: vw(5);
+					padding: 0 vw(16);
+					font-size: vw(14);
+					box-sizing: border-box;
+				}
+				
+				.input2{
+					width: vw(200);
+					text-align: center;
+				}
+				
+				.input3{
+					width: vw(200);
+					@include word-vw(14, #999);
+				}
+
+				.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);
+			}
+
+			.item3 {
+				margin-top: vw(10);
+			}
+			
+			.item4{
+				height: auto;
+				padding: vw(10) vw(15);
+			}
+			
+			.tip-item{
+				height: vw(80);
+				@include flex-y(center, flex-start);
+				background: #fff;
+				margin-top: vw(10);
+				padding: 0 vw(15);
+				view{
+					@include word-vw(16, #333);
+					font-weight: bold;
+				}
+				text{
+					@include word-vw(12, #FF4F50);
+					margin-top: vw(6);
+				}
+			}
+			
+			.card-box {
+				width: 100%;
+				// padding: 0 vw(30);
+				box-sizing: border-box;
+			
+				.title {
+					text-align: center;
+					@include word-vw(15, #333);
+					margin-top: vw(20);
+				}
+			
+				.card {
+					@include flex-x();
+					width: 100%;
+					margin-top: vw(20);
+					margin-bottom: vw(24);
+			
+					.pic {
+						width: vw(136);
+						height: vw(92);
+						margin-bottom: vw(16);
+					}
+			
+					.right,
+					.left {
+						@include flex-y();
+						flex: 1;
+						@include word-vw(12, #333);
+					}
+				}
+			}
+
+			.mph,
+			.des,
+			.pics {
+				height: auto;
+				padding: vw(15) vw(12);
+
+				.label {
+					align-self: flex-start;
+					padding-top: vw(3);
+
+					text {
+						font-size: vw(10);
+					}
+				}
+			}
+
+			.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(90);
+			background: #fff;
+			@include flex-y(center);
+			z-index: 99;
+
+			.btn {
+				@include flex-x(center);
+				@include solid-btn(170, 50, #fff, 25);
+				@include word-vw(14, #333);
+				background: #F6F6F6;
+			}
+			
+			.btn2{
+				background: #FF8D1A;
+				@include word-vw(14, #fff);
+			}
+
+			.agree-btn-box {
+				padding: 0 0 vw(8);
+				@include word-vw(12, #999);
+				@include flex-x(center);
+
+				.icon {
+					margin-right: vw(3);
+				}
+
+				.agree-btn {
+					color: $btn-color;
+				}
+			}
+			.btn-box{
+				width: 100%;
+				padding: 0 vw(10);
+				box-sizing: border-box;
+				@include flex-x();
+			}
+		}
+
+		//用户协议
+		.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>

+ 39 - 0
src/packages/user/business/agreement.ts

@@ -0,0 +1,39 @@
+export default {
+	title: '绿价比商城商户入驻须知',
+	content: `
+		<p style="text-indent: 2em">绿价比商城属于山东悦贝链科技发展有限公司,以下简称平台。商户在签订本须知时应向平台提供营业执照、法定代表人份证复印件、开户银行许可证等主体资格证明文件,以及关于商品/服务来源的合法证明、商品品质的合法有效合格证明文件(根据产品类别不同提供相应的不同证明文件,如生产许可证、授权经销证明、商标使用许可、食品流通许可、产品质量检验合格证明或质量检测报告、商标注册证等证明文件),涉及进口商品的,还需要提交进口报关单、检验检疫证明,供应链协议等其他协议。</p>
+		<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">②、商品或服务与宣传必须相符; </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">3、发货方式、标识、售后</p>
+		<p style="text-indent: 2em">经双方协商后一致同意,由商户自行发货。商户交付货物必须保持全新状态,包装应当清洁完好,并能达到防压坏、防尘、防潮、防震的基本要求,适于储存、运输、销售和开封等后续用途,不得有任何包装损坏、潮湿、变色等问题,内包装与货物出厂状态一致,还应符合订单规定的其他特殊包装要求(如有)。</p>
+		<p style="text-indent: 2em">货品、吊牌及商品外包装上,不能有任何之前在其他商场或任何渠道销售的标志、价格。如商户未核对商品之前的价格标签作处理或出现价格标签重叠、错粘及其他足以影响平台商业信誉的任何标志及瑕疵,导致消费者对售卖的商品存在任何负面性认识,造成平台声誉受损或其他损害的,商户应当为平台及时消除影响并承担由此损失相对应的金额赔偿责任。如因此造成平台对第三人承担任何法律责任,平台有权向商户进行责任追偿。因本平台打赏、积分返还在商品成交后随机生成,并且积分、打赏不可逆。所以无法和其他电商平台一样承诺七天无理由退货。商家不可以此为理由欺诈消费者,出现商品问题主动和消费者积极协商解决。不能给平台带来负面影响。</p>
+		<p style="text-indent: 2em">商户应按快递、物流行业,对快递包装物料的标准,对需要发货的商品,进行必要的保护性包装后,再行货物发出。</p>
+		<p style="text-indent: 2em">二、结算方式:</p>
+		<p style="text-indent: 2em">1、下单后消费者将相应货款汇入商户指定账户,商户需在48小时内将货物发出。</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">三、商户权利和义务</p>
+		<p style="text-indent: 2em">1、商户应对其发布商品的真实性、准确性、合法性负责,不得侵害第三方的合法权利。</p>
+		<p style="text-indent: 2em">2、商户保证具有签订和履行本协议的资格和能力,具备在平台经营主体资格,在交易过程中遵守诚实信用的原则。此外,商户还应向平台提供合法有效证明文件,证明其在平台上提供的服务属合法经营。</p>
+		<p style="text-indent: 2em">3、商户保证所展示的商品信息真实合法,商品质量符合国家及行业标准,无国家标准、行业标准的,须符合地方标准、经备案的企业标准;保证在平台销售的全部商品来源合法,已通过或取得所销售商品(含所有配件)需要的各项审批或许可,对其所销售商品享有合法的所有权,且商品销售和交付不侵犯任何第三方的知识产权及其他权利;商户应对其提供的商品的质量负完全责任,保证其出售的商品具备其应当具备的使用性能,不存在危及第三人人身或财产安全的因素;商户保证不销售水货、假冒伪劣产品、旧货、翻新产品、三无产品及其他有问题的商品;由于商品质量问题造成人身损害或财产损失的,商户应承担由此造成的一切后果,如造成平台损失的,商户应承担赔偿责任;属于预付款的,还包括平台主张返还预付款之日起的同期银行贷款利息损失。</p>
+		<p style="text-indent: 2em">4、商户保证接受并遵守平台的各项管理规则,若违反则接受平台的处罚措施。商户应随时关注平台的公示内容,同意平台一经公示的各规则的变更等事项即视为完成书面通知。如有异议,商户应书面告知平台,并暂停使用平台资源和服务,否则视为商户完全接受平台规则的变更,并认可该变更为本协议的组成部分。</p>
+		<p style="text-indent: 2em">5、商户保证维护平台的良好声誉和企业形象,不得做出任何有损于平台“品牌形象”和声誉的言论及行动,如平台发现商户有故意诋毁或损害平台声誉的言论或行为的,平台有权立即终止本协议,并追究商户法律责任。</p>
+		<p style="text-indent: 2em">6、未经平台事先书面授权,商户不得以任何目的、任何形式使用平台的商标、标志及企业字号,否则,商户承担由此产生的全部法律责任。</p>
+		<p style="text-indent: 2em">7、商户不得擅自终止本协议或将本协议项下权利义务转让给任何第三方,否则平台有权解除本须知。</p>
+		<p style="text-indent: 2em">8、商户不得以任何手段利用平台规则漏洞或系统漏洞,通过虚假交易套取平台中的积分、红包或补贴等,平台有权向公安部门报案以进一步追究商家刑事责任。</p>
+		<p style="text-indent: 2em">四、违约责任</p>
+		<p style="text-indent: 2em">1、商户之代理人、受任人、受雇人、股权所有人之一切行为均代表该方,其违反协议之行为视为商户之行为,商户应对此承担连带法律责任。 </p>
+		<p style="text-indent: 2em">2、因发生以上条款约定行为致商户被平台处罚或双方终止合作,商户仍需继续执行售后服务并对已售出商品承担一切责任。</p>
+		<p style="text-indent: 2em">3、商户因违反本须知约定的,需向平台支付的违约金、赔偿金及其它所有费用,应在该违约事件发生之日起 5 日内将全部款项支付至平台,否则,平台有权在保证金或结算款项中直接扣除。</p>
+		<p style="text-indent: 2em">五、适用法律、争议解决</p>
+		<p style="text-indent: 2em">本协议适用中华人民共和国法律。双方在签署、履行本协议过程中发生争议的,可协商解决。如协商解决不成,双方同意向平台住所地人民法院提起诉讼。</p>
+	`
+}

+ 145 - 0
src/packages/user/business/area-business.vue

@@ -0,0 +1,145 @@
+<template>
+	<view class="my-business-box">
+		<Navbar :title="_userInfo.balance === 1 ? '区域顾客' : '区域商家'" color="#333"></Navbar>
+		<view class="content">
+			<view class="item" v-for="item in list" :key="item.id">
+				<image :src="item.shopIcon" mode="aspectFill"></image>
+				<view class="info">
+					<view class="name">{{item.shopName}}</view>
+					<view class="status" :class="{status2:  item.status === 3}">{{statusMap[item.status]}}</view>
+					<view class="phone">商家手机号:{{item.shopPhone}}</view>
+				</view>
+				<view class="btn" @click="toDetail(item.id)">
+					详情
+					<IconText :code="`\ue84a`" size="10" color="#fff"></IconText>
+				</view>
+			</view>
+			<view class="no-data" v-if="!list.length">
+				<NoData :show="!list.length" topNum="10" title="暂无商家!"></NoData>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	@Component({})
+
+	export default class MyBusiness extends Vue {
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		list: any = [];
+		current: number = 0;
+		size: number = 20;
+		finish: boolean = false;
+		loading: boolean = false;
+		statusMap: any = {
+			1: '待审核',
+			2: '审核通过',
+			3: '审核未通过'
+		}
+
+		onShow() {
+			this.list = [];
+			this.getBusinessList();
+		}
+
+		onReachBottom() {
+			if (this.finish || this.loading) return;
+			this.current++;
+			this.getBusinessList();
+		}
+
+		getBusinessList() {
+			this.$http
+				.get({
+					url: this.$api.areaBusiness,
+					data: {
+						page: this.current,
+						size: this.size
+					}
+				})
+				.then((res: any) => {
+					this.list = [...this.list, ...res.list];
+					if (res.list.length < this.size) this.finish = true;
+					this.loading = false;
+				}, (err: any) => {
+					console.log(err);
+					this.loading = false;
+				});
+		}
+
+		toDetail(id: any) {
+			this.$Router.push({
+				path: '/packages/user/business/business-detail',
+				query: {
+					id
+				}
+			})
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.my-business-box {
+		.content {
+			.item {
+				height: vw(88);
+				background: #fff;
+				margin-top: vw(10);
+				@include flex-x();
+				padding: 0 vw(15);
+
+				image {
+					width: vw(64);
+					height: vw(64);
+					border-radius: vw(5);
+				}
+
+				.info {
+					flex: 1;
+					height: vw(64);
+					@include flex-y(space-between, flex-start);
+					margin-right: vw(18);
+					margin-left: vw(10);
+
+					.name {
+						@include word-vw(18, #333);
+					}
+
+					.status {
+						padding: 0 vw(8);
+						height: vw(16);
+						background: #EDEDED;
+						border-radius: vw(8);
+						@include word-vw(10, #333);
+					}
+
+					.status2 {
+						background: #FFE6E6;
+					}
+
+					.phone {
+						@include word-vw(13, #333);
+					}
+				}
+
+				.btn {
+					width: vw(56);
+					height: vw(24);
+					border-radius: vw(12);
+					background: $btn-color;
+					@include flex-x(center);
+					@include word-vw(14, #fff);
+				}
+			}
+		}
+	}
+</style>

+ 131 - 0
src/packages/user/business/business-detail.vue

@@ -0,0 +1,131 @@
+<template>
+	<view class="business-detail-box">
+		<Navbar title="店铺详情" color="#333"></Navbar>
+		<view class="content">
+			<SwiperBanner :bannerDetail="info.shopPics" bannerH="375" dotsType="digit"></SwiperBanner>
+			<view class="info">
+				<view class="name">
+					{{info.shopName}}
+				</view>
+				<view class="juli">
+					距您:{{info.distance | juliFormat}}
+				</view>
+				<view class="address">
+					<IconText :code="`\ue853`" class="icon" color="#ccc" size="10"></IconText>
+					{{info.shopAddress}}
+				</view>
+				<view class="phone">
+					<IconText :code="`\ue852`" class="icon" color="#ccc" size="10"></IconText>
+					{{info.shopPhone}}
+				</view>
+			</view>
+		</view>
+	</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'
+				};
+			}
+		}
+	})
+
+	export default class BusinessDetail extends Vue {
+		info: any = {};
+		lat: any = null;
+		lng: any = null;
+		id: any = null;
+
+		onLoad() {
+			let query = this.$Route.query;
+			this.id = query.id || null;
+			this.getLocation();
+		}
+
+		getLocation() {
+			uni.showLoading({
+				title: '正在获取当前位置,请稍后',
+			});
+			uni.getLocation({
+				type: 'wgs84',
+				success: (res: any) => {
+					uni.hideLoading();
+					console.log(res, '经纬度')
+					this.lat = res.latitude;
+					this.lng = res.longitude;
+					this.getInfo();
+				},
+				fail: () => {
+					uni.hideLoading();
+				}
+			});
+		}
+
+		getInfo() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http
+				.get({
+					url: this.$api.getBusinessDetail,
+					data: {
+						lat: this.lat,
+						lng: this.lng,
+						id: this.id
+					}
+				})
+				.then((res: any) => {
+					this.info = res;
+					uni.hideLoading();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.business-detail-box {
+		.content {
+			.info {
+				padding: vw(24);
+				background: #fff;
+
+				.name {
+					@include word-vw(20, #000);
+					font-weight: bold;
+					line-height: vw(32);
+				}
+
+				.juli {
+					@include word-vw(14, #ccc);
+					margin-bottom: vw(12);
+					margin-top: vw(6);
+				}
+
+				.address,
+				.phone {
+					@include flex-x(flex-start);
+					@include word-vw(14, #333);
+					line-height: vw(28);
+					.icon{
+						margin-right: vw(8);
+					}
+				}
+			}
+		}
+	}
+</style>

+ 164 - 0
src/packages/user/business/examine-list.vue

@@ -0,0 +1,164 @@
+<template>
+	<view class="examine-list-box">
+		<Navbar title="我的商家" color="#333"></Navbar>
+		<view class="content">
+			<view class="item" v-for="item in list" :key="item.id">
+				<image :src="item.shopIcon" mode="aspectFill"></image>
+				<view class="info">
+					<view class="name">{{item.shopName}}</view>
+					<view class="phone">商家手机号:{{item.shopPhone}}</view>
+					<view class="date">申请时间:{{item.created}}</view>
+				</view>
+				<view class="btn" @click="toDetail(item.id)">
+					详情
+					<IconText :code="`\ue84a`" size="10" color="#fff"></IconText>
+				</view>
+			</view>
+			<view class="bottom">
+				<view class="btn" @click="handleConfirm">入驻商家</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		// Prop,
+		Vue
+	} from 'vue-property-decorator';
+	@Component({})
+
+	export default class MyBusiness extends Vue {
+		list: any = [];
+		current: number = 0;
+		size: number = 20;
+		finish: boolean = false;
+		loading: boolean = false;
+		statusMap: any = {
+			2: '审核通过',
+			3: '审核未通过'
+		}
+
+		onShow() {
+			this.list = [];
+			this.getBusinessList();
+		}
+
+		onReachBottom() {
+			if (this.finish || this.loading) return;
+			this.current++;
+			this.getBusinessList();
+		}
+
+		getBusinessList() {
+			this.$http
+				.get({
+					url: this.$api.getExamineList,
+					data: {
+						page: this.current,
+						size: this.size
+					}
+				})
+				.then((res: any) => {
+					this.list = [...this.list, ...res.list];
+					if (res.list.length < this.size) this.finish = true;
+					this.loading = false;
+				}, (err: any) => {
+					console.log(err);
+					this.loading = false;
+				});
+		}
+
+		toDetail(id: any) {
+			this.$Router.push({
+				path: '/packages/user/business/add-business',
+				query: {
+					id
+				}
+			})
+		}
+
+		handleConfirm() {
+			this.$Router.push({
+				path: '/packages/user/business/add-business',
+			})
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.examine-list-box {
+		.content {
+			padding-bottom: vw(100);
+			.item {
+				height: vw(88);
+				background: #fff;
+				margin-top: vw(10);
+				@include flex-x();
+				padding: 0 vw(15);
+
+				image {
+					width: vw(64);
+					height: vw(64);
+					border-radius: vw(5);
+				}
+
+				.info {
+					flex: 1;
+					height: vw(64);
+					@include flex-y(space-between, flex-start);
+					margin-right: vw(18);
+					margin-left: vw(10);
+
+					.name {
+						@include word-vw(18, #333);
+					}
+
+					.status {
+						padding: 0 vw(8);
+						height: vw(16);
+						background: #EDEDED;
+						border-radius: vw(8);
+						@include word-vw(10, #333);
+					}
+
+					.status2 {
+						background: #FFE6E6;
+					}
+
+					.phone {
+						@include word-vw(13, #333);
+					}
+
+					.date {
+						@include word-vw(12, #999);
+					}
+				}
+
+				.btn {
+					width: vw(56);
+					height: vw(24);
+					border-radius: vw(12);
+					background: $btn-color;
+					@include flex-x(center);
+					@include word-vw(14, #fff);
+				}
+			}
+
+			.bottom {
+				width: 100%;
+				position: fixed;
+				bottom: 0;
+				height: vw(70);
+				background: #fff;
+				@include flex-x(center);
+
+				.btn {
+					@include flex-x(center);
+					@include solid-btn(335, 50, #fff, 25);
+				}
+			}
+		}
+	}
+</style>

+ 415 - 0
src/packages/user/business/examine.vue

@@ -0,0 +1,415 @@
+<template>
+	<view class="add-business-box">
+		<Navbar :title="_userInfo.balance === 1 ? '顾客审核' : '顾客审核'" color="#333"></Navbar>
+		<view class="content">
+			<view class="item">
+				<view class="label">店铺名称</view>
+				{{info.shopName}}
+			</view>
+			<view class="item">
+				<view class="label">主营项目</view>
+				{{info.manageContent}}
+			</view>
+			<view class="item">
+				<view class="label">商家类型</view>
+				{{info.typeName}}
+			</view>
+			<view class="item">
+				<view class="label">联系方式</text></view>
+				{{info.shopPhone}}
+			</view>
+			<view class="item">
+				<view class="label">引荐人</view>
+				{{info.bindingUid}}
+			</view>
+			<view class="item item2">
+				<view class="label">地址信息</view>
+				{{info.shopAddress}}
+			</view>
+			<view class="item item2">
+				<view class="label">商家描述</view>
+				{{info.describe}}
+			</view>
+			<view class="item item2 master-img-box">
+				<view class="label">商家主图</view>
+				<view class="master-img">
+					<image :src="info.shopIcon" class="img" mode=""></image>
+					<!-- <IconText :code="`\ue84a`" size="12" color="#BDBBBB"></IconText> -->
+				</view>
+			</view>
+			<view class="item item2">
+				<view class="label">商家图片</view>
+				<view class="upload-box">
+					<view class="pic-box" v-for="item in info.shopPics" :key="item">
+						<image :src="item" class="pic" mode="aspectFill" @click="preview(item)"></image>
+					</view>
+				</view>
+			</view>
+			<view class="item item2">
+				<view class="label">商家视频</view>
+				<view class="upload-box">
+					<view class="pic-box">
+						<video v-if="info.shopVideo" :src="info.shopVideo" class="pic"></video>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="bottom">
+			<div class="btn btn2" @click="examineRefuse">
+				拒绝
+			</div>
+			<div class="btn" @click="examinePass">
+				审核通过
+			</div>
+		</view>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	@Component({})
+
+	export default class AddBusiness extends Vue {
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		typeList: any = [];
+		shopType: any = {};
+		addressInfo: any = {};
+		info: any = {};
+		data: any = {
+			shopName: '',
+			shopPhone: '',
+			manageContent: '',
+			bindingUid: null,
+			shopType: null,
+			shopAddress: '',
+			house: '',
+			describe: '',
+			shopIcon: '',
+			shopPics: [],
+			lng: null,
+			lat: null
+		};
+
+		onLoad() {
+			let query = this.$Route.query;
+			if (query.id) this.getInfo();
+			// this.getTypeList();
+		}
+		
+		preview(url: string): void {
+			uni.previewImage({
+				current: url, // 当前显示图片的http链接
+				urls: [url] // 需要预览的图片http链接列表
+			});
+		}
+
+		getInfo() {
+			this.$http
+				.get({
+					url: this.$api.examineInfo,
+					data: {
+						id: this.$Route.query.id
+					}
+				})
+				.then((res: any) => {
+					this.info = res;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+
+		getTypeList() {
+			this.$http
+				.get({
+					url: this.$api.getBusinessTypeList,
+				})
+				.then((res: any) => {
+					this.typeList = res.list;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+
+		changeType(val: any) {
+			let value = +val.detail.value;
+			this.shopType = this.typeList[value];
+			this.data.shopType = this.shopType.id;
+		}
+
+		getLocation() {
+			uni.getLocation({
+				type: 'wgs84',
+				success: (res: any) => {
+					// console.log(res, '经纬度')
+					if (res.errMsg == 'getLocation:ok') {
+						uni.chooseLocation({
+							// 传入你要去的纬度
+							latitude: this.data.lat || res.latitude,
+							// 传入你要去的经度
+							longitude: this.data.lng || res.longitude,
+							// 传入你要去的地址信息 不填则为空
+							// 缩放大小
+							success: (info: any) => {
+								this.data = {
+									...this.data,
+									lat: info.latitude,
+									lng: info.longitude,
+									shopAddress: info.address
+								};
+								console.log(this.data)
+							}
+						});
+					}
+				}
+			});
+		}
+		handleMasterImg() {
+			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;
+							uni.hideLoading();
+						})
+						.catch((err: any) => {
+							uni.hideLoading();
+							console.log(err);
+						});
+				}
+			});
+		}
+		getImgs(pics: any) {
+			this.data.shopPics = pics;
+		}
+		handleConfirm() {
+			// console.log(this.data)
+			uni.showLoading({
+				title: '加载中...'
+			});
+			this.$http
+				.post({
+					url: this.$api.addBusiness,
+					data: this.data
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '店铺入驻申请审核中,请稍后...',
+						icon: 'none'
+					});
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+		handleUpdate() {
+			console.log(this.data)
+			uni.showLoading({
+				title: '加载中...'
+			});
+			this.$http
+				.put({
+					url: this.$api.updateBusinessInfo,
+					data: {
+						id: this.info.id,
+						...this.data
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '店铺入驻申请审核中,请稍后...',
+						icon: 'none'
+					});
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+		examineRefuse() {
+			this.$http
+				.put({
+					url: this.$api.examineRefuse,
+					data: {
+						id: this.info.id,
+						rollback: '已拒绝'
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '已拒绝审核',
+						icon: 'none'
+					});
+					this.$Router.back(1);
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+		examinePass() {
+			this.$http
+				.put({
+					url: this.$api.examinePass,
+					data: {
+						id: this.info.id,
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '已通过审核',
+						icon: 'none'
+					});
+					this.$Router.back(1);
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.add-business-box {
+		.content {
+			padding-bottom: vw(100);
+
+			.item {
+				height: vw(55);
+				background: #fff;
+				margin-top: vw(1);
+				@include flex-x(flex-start);
+				padding: 0 vw(15);
+				font-size: vw(15);
+
+				.label {
+					@include word-vw(14, #333);
+					width: vw(120);
+					flex-shrink: 1;
+
+					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: auto;
+				min-height: vw(55);
+				padding: vw(12) vw(15);
+				@include flex-x(flex-start, flex-start);
+
+				.label {
+					align-self: flex-start;
+					padding-top: vw(3);
+				}
+			}
+
+			.master-img-box {
+				@include flex-x();
+			}
+
+			.master-img {
+				@include flex-x();
+
+				.img {
+					width: vw(40);
+					height: vw(40);
+					background: #ccc;
+					border-radius: vw(20);
+					margin-right: vw(5);
+				}
+			}
+
+			.upload-box {
+				@include flex-x(flex-start);
+				flex-wrap: wrap;
+			}
+
+			.pic-box {
+				width: 1/3 * 100%;
+				@include flex-y(center, center);
+			}
+
+			.pic {
+				width: vw(66);
+				height: vw(66);
+				border-radius: vw(5);
+				margin-bottom: vw(8);
+			}
+		}
+
+		.bottom {
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			height: vw(70);
+			background: #fff;
+			@include flex-x(center);
+
+			.btn {
+				@include flex-x(center);
+				@include solid-btn(148, 50, #fff, 10);
+				margin: vw(5);
+				box-sizing: border-box;
+			}
+
+			.btn2 {
+				background: #FFF7F8;
+				color: #333;
+				border: vw(1) solid $btn-color;
+			}
+		}
+	}
+</style>

+ 145 - 0
src/packages/user/business/my-business.vue

@@ -0,0 +1,145 @@
+<template>
+	<view class="my-business-box">
+		<Navbar :title="_userInfo.balance === 1 ? '我的顾客' : '我的商家'" color="#333"></Navbar>
+		<view class="content">
+			<view class="item" v-for="item in list" :key="item.id">
+				<image :src="item.shopIcon" mode="aspectFill"></image>
+				<view class="info">
+					<view class="name">{{item.shopName}}</view>
+					<view class="status" :class="{status2:  item.status === 3}">{{statusMap[item.status]}}</view>
+					<view class="phone">商家手机号:{{item.shopPhone}}</view>
+				</view>
+				<view class="btn" @click="toDetail(item.id)">
+					详情
+					<IconText :code="`\ue84a`" size="10" color="#fff"></IconText>
+				</view>
+			</view>
+			<view class="no-data" v-if="!list.length">
+				<NoData :show="!list.length" topNum="10" title="暂无商家!"></NoData>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	@Component({})
+
+	export default class MyBusiness extends Vue {
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		list: any = [];
+		current: number = 0;
+		size: number = 20;
+		finish: boolean = false;
+		loading: boolean = false;
+		statusMap: any = {
+			1: '待审核',
+			2: '审核通过',
+			3: '审核未通过'
+		}
+
+		onShow() {
+			this.list = [];
+			this.getBusinessList();
+		}
+
+		onReachBottom() {
+			if (this.finish || this.loading) return;
+			this.current++;
+			this.getBusinessList();
+		}
+
+		getBusinessList() {
+			this.$http
+				.get({
+					url: this.$api.getBusinessList,
+					data: {
+						page: this.current,
+						size: this.size
+					}
+				})
+				.then((res: any) => {
+					this.list = [...this.list, ...res.list];
+					if (res.list.length < this.size) this.finish = true;
+					this.loading = false;
+				}, (err: any) => {
+					console.log(err);
+					this.loading = false;
+				});
+		}
+
+		toDetail(id: any) {
+			this.$Router.push({
+				path: '/packages/user/business/business-detail',
+				query: {
+					id
+				}
+			})
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.my-business-box {
+		.content {
+			.item {
+				height: vw(88);
+				background: #fff;
+				margin-top: vw(10);
+				@include flex-x();
+				padding: 0 vw(15);
+
+				image {
+					width: vw(64);
+					height: vw(64);
+					border-radius: vw(5);
+				}
+
+				.info {
+					flex: 1;
+					height: vw(64);
+					@include flex-y(space-between, flex-start);
+					margin-right: vw(18);
+					margin-left: vw(10);
+
+					.name {
+						@include word-vw(18, #333);
+					}
+
+					.status {
+						padding: 0 vw(8);
+						height: vw(16);
+						background: #EDEDED;
+						border-radius: vw(8);
+						@include word-vw(10, #333);
+					}
+
+					.status2 {
+						background: #FFE6E6;
+					}
+
+					.phone {
+						@include word-vw(13, #333);
+					}
+				}
+
+				.btn {
+					width: vw(56);
+					height: vw(24);
+					border-radius: vw(12);
+					background: $btn-color;
+					@include flex-x(center);
+					@include word-vw(14, #fff);
+				}
+			}
+		}
+	}
+</style>

+ 323 - 0
src/packages/user/business/yyzx-apply.vue

@@ -0,0 +1,323 @@
+<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.companyName" placeholder="点击输入分公司名称">
+			</view>
+			<view class="item">
+				<view class="label">联系方式</view>
+				<input type="text" class="input" v-model="data.companyPhone" placeholder="输入联系电话">
+			</view>
+			<view class="item item2 item3">
+				<view class="label">地址信息</view>
+				<view class="position" @click="getLocation">{{data.address || '点击定位地址'}}
+					<IconText :code="`\ue853`" size="12" class="icon" color="#FA402B"></IconText>
+				</view>
+			</view>
+			<view class="item mph">
+				<view class="label">门牌号</view>
+				<textarea class="input" v-model="data.house" placeholder-class="placeholder"
+					placeholder="详细地址,例:8号楼1单元5层501室" cols="30" rows="10"></textarea>
+			</view>
+			<view class="item item3 pics">
+				<view class="label">门头图片</view>
+				<view class="upload-box">
+					<MulImgUpload @update="getImgs" :imgs="data.pics" :max="5" :width="66 / 3.75" :height="66 / 3.75"
+						addColor="#FA402B">
+					</MulImgUpload>
+				</view>
+			</view>
+		</view>
+		<view class="bottom">
+			<view class="btn" v-if="info.status === 1">审核中...</view>
+			<view class="btn" @click="handleUpdate" v-else-if="info.status === 2" style="background: #00BA66;">
+				更新运营中心信息</view>
+			<view class="btn" @click="handleUpdate" v-else-if="info.status === 3">重新提交申请</view>
+			<view class="btn" @click="handleConfirm" v-else-if="info.status === 0">提交申请</view>
+		</view>
+		<ShowModal ref="rejectTip" title="提示" :content="info.remark" btnText="确认" />
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	@Component({})
+
+	export default class AddBusiness extends Vue {
+		typeList: any = [];
+		shopType: any = {};
+		addressInfo: any = {};
+		videoImg: string = "";
+		info: any = {};
+		data: any = {
+			companyName: '',
+			companyPhone: '',
+			address: '',
+			house: '',
+			pics: []
+		};
+
+		onLoad() {
+			this.getInfo();
+		}
+
+		getInfo() {
+			return this.$http
+				.get({
+					url: this.$api.applyInfo2,
+				})
+				.then((res: any) => {
+					this.info = res;
+					let data = {
+						...this.data
+					};
+					for (let key in this.data) {
+						data[key] = res[key];
+					}
+					this.data = data;
+					if (res.status === 3) {
+						(this.$refs.rejectTip as any).open();
+					}
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+
+
+		getLocation() {
+			uni.getLocation({
+				type: 'wgs84',
+				success: (res: any) => {
+					// console.log(res, '经纬度')
+					if (res.errMsg == 'getLocation:ok') {
+						uni.chooseLocation({
+							// 传入你要去的纬度
+							latitude: this.data.lat || res.latitude,
+							// 传入你要去的经度
+							longitude: this.data.lng || res.longitude,
+							// 传入你要去的地址信息 不填则为空
+							// 缩放大小
+							success: (info: any) => {
+								this.data = {
+									...this.data,
+									lat: info.latitude,
+									lng: info.longitude,
+									address: info.address
+								};
+								console.log(this.data)
+							}
+						});
+					}
+				}
+			});
+		}
+		getImgs(pics: any) {
+			this.data.pics = pics;
+		}
+		handleConfirm() {
+			// console.log(this.data)
+			uni.showLoading({
+				title: '加载中...'
+			});
+			this.$http
+				.post({
+					url: this.$api.applyAdd2,
+					data: this.data
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '店铺入驻申请审核中,请稍后...',
+						icon: 'none'
+					});
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+		handleUpdate() {
+			console.log(this.data)
+			uni.showLoading({
+				title: '加载中...'
+			});
+			this.$http
+				.put({
+					url: this.$api.applyUpdate2,
+					data: {
+						id: this.info.id,
+						...this.data
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '店铺入驻申请审核中,请稍后...',
+						icon: 'none'
+					});
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.add-business-box {
+		.content {
+			padding-bottom: vw(100);
+
+			.item {
+				height: vw(66);
+				background: #fff;
+				margin-top: vw(1);
+				@include flex-x();
+				padding: 0 vw(15);
+
+				.label {
+					@include word-vw(14, #333);
+
+					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);
+			}
+
+			.item3 {
+				margin-top: vw(10);
+			}
+
+			.mph,
+			.des,
+			.pics {
+				height: auto;
+				padding: vw(15) vw(12);
+
+				.label {
+					align-self: flex-start;
+					padding-top: vw(3);
+
+					text {
+						font-size: vw(10);
+					}
+				}
+			}
+
+			.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 {
+					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-x(center);
+
+			.btn {
+				@include flex-x(center);
+				@include solid-btn(335, 50, #fff, 25);
+			}
+		}
+	}
+</style>

+ 143 - 0
src/packages/user/business/yyzx-yl.vue

@@ -0,0 +1,143 @@
+<template>
+	<view class="record-box">
+		<Navbar :title="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" v-for="item in list" :key="item.id">
+					{{item.companyName}}
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baeModule = namespace('base');
+	import {
+		types
+	} from '@/common/store';
+	@Component({})
+	export default class Record extends Vue {
+		isLoading: boolean = false;
+		list: any[] = [];
+		isLoad: boolean = false;
+		final: boolean = false;
+		current: number = 1;
+		size: number = 20;
+		classify: any = 0;
+		title: string = '';
+
+		onShow() {
+			let query = this.$Route.query;
+			this.classify = query.classify || 0;
+			this.title = query.name || '';
+			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;
+			let url = '';
+			if(this.classify === "1"){
+				url = 'yyzxyl';
+			}
+			if(this.classify === "2"){
+				url = 'zyyzxyl';
+			}
+			return this.$http.get({
+				url: this.$api[url],
+				data: {
+					classify: this.classify,
+					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;
+			})
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.record-box {
+		min-height: 100%;
+		@include flex-y();
+		background: #F6F6F6;
+
+		.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 {
+				/* padding: 0 vw(10) vw(30); */
+				box-sizing: border-box;
+
+				.item {
+					height: vw(55);
+					background: #fff;
+					margin-top: vw(1);
+					@include flex-x(center);
+					@include word-vw(14, #333);
+				}
+			}
+		}
+	}
+</style>

+ 322 - 0
src/packages/user/business/zyyzx-apply.vue

@@ -0,0 +1,322 @@
+<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.companyName" placeholder="点击输入区域代理名称">
+			</view>
+			<view class="item">
+				<view class="label">联系方式</view>
+				<input type="text" class="input" v-model="data.companyPhone" placeholder="输入联系电话">
+			</view>
+			<view class="item item2 item3">
+				<view class="label">所在地区</view>
+				<view class="position" @click="getLocation">{{data.address || '点击定位地址'}}
+					<IconText :code="`\ue853`" size="12" class="icon" color="#FA402B"></IconText>
+				</view>
+			</view>
+			<view class="item mph">
+				<view class="label">详细地址</view>
+				<textarea class="input" v-model="data.house" placeholder-class="placeholder"
+					placeholder="详细地址,例:8号楼1单元5层501室" cols="30" rows="10"></textarea>
+			</view>
+			<view class="item item3 pics">
+				<view class="label">场地图片</view>
+				<view class="upload-box">
+					<MulImgUpload @update="getImgs" :imgs="data.pics" :max="5" :width="66 / 3.75"
+						:height="66 / 3.75" addColor="#FA402B">
+					</MulImgUpload>
+				</view>
+			</view>
+		</view>
+		<view class="bottom">
+			<view class="btn" v-if="info.status === 1">审核中...</view>
+			<view class="btn" @click="handleUpdate" v-else-if="info.status === 2" style="background: #00BA66;">
+				更新运营中心信息</view>
+			<view class="btn" @click="handleUpdate" v-else-if="info.status === 3">重新提交申请</view>
+			<view class="btn" @click="handleConfirm" v-else-if="info.status === 0">提交申请</view>
+		</view>
+		<ShowModal ref="rejectTip" title="提示" :content="info.remark" btnText="确认" />
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Prop,
+		Vue
+	} from 'vue-property-decorator';
+	@Component({})
+
+	export default class AddBusiness extends Vue {
+		typeList: any = [];
+		shopType: any = {};
+		addressInfo: any = {};
+		videoImg: string = "";
+		info: any = {};
+		data: any = {
+			companyName: '',
+			companyPhone: '',
+			address: '',
+			house: '',
+			pics: []
+		};
+
+		onLoad() {
+			this.getInfo();
+		}
+
+		getInfo() {
+			return this.$http
+				.get({
+					url: this.$api.applyInfo1,
+				})
+				.then((res: any) => {
+					this.info = res;
+					let data = {
+						...this.data
+					};
+					for (let key in this.data) {
+						data[key] = res[key];
+					}
+					this.data = data;
+					if (res.status === 3) {
+						(this.$refs.rejectTip as any).open();
+					}
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+
+
+		getLocation() {
+			uni.getLocation({
+				type: 'wgs84',
+				success: (res: any) => {
+					// console.log(res, '经纬度')
+					if (res.errMsg == 'getLocation:ok') {
+						uni.chooseLocation({
+							// 传入你要去的纬度
+							latitude: this.data.lat || res.latitude,
+							// 传入你要去的经度
+							longitude: this.data.lng || res.longitude,
+							// 传入你要去的地址信息 不填则为空
+							// 缩放大小
+							success: (info: any) => {
+								this.data = {
+									...this.data,
+									lat: info.latitude,
+									lng: info.longitude,
+									address: info.address
+								};
+								console.log(this.data)
+							}
+						});
+					}
+				}
+			});
+		}
+		getImgs(pics: any) {
+			this.data.pics = pics;
+		}
+		handleConfirm() {
+			// console.log(this.data)
+			uni.showLoading({
+				title: '加载中...'
+			});
+			this.$http
+				.post({
+					url: this.$api.applyAdd1,
+					data: this.data
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '申请审核中,请稍后...',
+						icon: 'none'
+					});
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+		handleUpdate() {
+			console.log(this.data)
+			uni.showLoading({
+				title: '加载中...'
+			});
+			this.$http
+				.put({
+					url: this.$api.applyUpdate1,
+					data: {
+						id: this.info.id,
+						...this.data
+					}
+				})
+				.then((res: any) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '申请审核中,请稍后...',
+						icon: 'none'
+					});
+					this.getInfo();
+				}, (err: any) => {
+					console.log(err);
+					uni.hideLoading();
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.add-business-box {
+		.content {
+			padding-bottom: vw(100);
+
+			.item {
+				height: vw(66);
+				background: #fff;
+				margin-top: vw(1);
+				@include flex-x();
+				padding: 0 vw(15);
+
+				.label {
+					@include word-vw(14, #333);
+
+					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);
+			}
+
+			.item3 {
+				margin-top: vw(10);
+			}
+
+			.mph,
+			.des,
+			.pics {
+				height: auto;
+				padding: vw(15) vw(12);
+
+				.label {
+					align-self: flex-start;
+					padding-top: vw(3);
+
+					text {
+						font-size: vw(10);
+					}
+				}
+			}
+
+			.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 {
+					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-x(center);
+
+			.btn {
+				@include flex-x(center);
+				@include solid-btn(335, 50, #fff, 25);
+			}
+		}
+	}
+</style>

+ 203 - 0
src/packages/user/fund/data-statistics.vue

@@ -0,0 +1,203 @@
+<template>
+	<view class="data-statistics-box">
+		<Navbar title="数据统计" color="#333"></Navbar>
+		<view class="content">
+			<view class="bk"></view>
+			<view class="info">
+				<view class="top">
+					<view class="name">悦贝总量池</view>
+					<view class="num">{{info.totalGold}}</view>
+					<!-- <view class="tip" @click="toPage('')">查询区块链</view> -->
+				</view>
+				<view class="bottom">
+					<view class="title">
+						悦贝兑换产品系数(1 : {{price}})
+					</view>
+					<view class="box">
+						<view class="item">
+							<text>{{info.released}}</text>
+							悦贝释放池
+						</view>
+						<view class="item">
+							<text>{{info.remained}}</text>
+							悦贝剩余释放池
+						</view>
+						<view class="item">
+							<text>{{info.totalDestroyed}}</text>
+							悦贝总销毁值
+						</view>
+						<view class="item">
+							<text>{{info.todayDestroyed}}</text>
+							今日悦贝销毁值
+						</view>
+						<view class="item">
+							<text>{{info.allIntegral}}</text>
+							全网已释放的积分
+						</view>
+					</view>
+				</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.000000000000000000';
+				return (+val).toFixed(18);
+			}
+		}
+	})
+
+	export default class DataStatistics extends Vue {
+		info: any = {};
+		price: any = 0;
+		balanceInfo: any = {};
+
+		onShow() {
+			this.getInfo();
+			this.getGoldPrice();
+			// this.getBalance();
+		}
+
+		getInfo() {
+			this.$http
+				.get({
+					url: this.$api.getDataSum
+				})
+				.then((res: any) => {
+					this.info = res;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+		
+		toPage(url: any, data: any = {}) {
+			if (!url) {
+				uni.showToast({
+					title: '敬请期待',
+					icon: 'none'
+				})
+				return;
+			}
+			this.$Router.push({
+				path: url,
+				query: data
+			})
+		}
+
+		getGoldPrice() {
+			this.$http
+				.get({
+					url: this.$api.getGoldPrice
+				})
+				.then((res: any) => {
+					this.price = res.goldOfficialPrice;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+		getBalance() {
+			this.$http
+				.get({
+					url: this.$api.getBalance
+				})
+				.then((res: any) => {
+					this.balanceInfo = res;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.data-statistics-box {
+		.content {
+			@include flex-y();
+
+			.bk {
+				width: vw(800);
+				height: vw(800);
+				background: linear-gradient(90deg, rgba(24, 105, 171, 1) 0%, rgba(3, 86, 152, 1) 100%);
+				border-radius: vw(300);
+				position: absolute;
+				left: 50%;
+				transform: translateX(-50%);
+				top: vw(-520);
+			}
+
+			.info {
+				position: relative;
+				z-index: 10;
+				margin-top: vw(32);
+
+				.top {
+					@include flex-y();
+
+					.name {
+						@include word-vw(14, #fff);
+					}
+
+					.num {
+						@include word-vw(24, #fff);
+						margin-top: vw(8);
+					}
+
+					.tip {
+						padding: 0 vw(10);
+						height: vw(24);
+						line-height: vw(24);
+						box-sizing: border-box;
+						background: rgba(255, 255, 255, 0.2);
+						@include word-vw(14, #fff);
+						border: vw(1) solid rgba(255, 255, 255, 0.5);
+						border-radius: vw(12);
+						margin-top: vw(16);
+					}
+				}
+
+				.bottom {
+					background: #fff;
+					width: vw(355);
+					border-radius: vw(10);
+					margin-top: vw(32);
+					overflow: hidden;
+
+					.title {
+						height: vw(36);
+						line-height: vw(36);
+						background: #F7F7F7;
+						@include word-vw(12, #A8A8A8);
+						text-align: center;
+					}
+
+					.box {
+						@include flex-x();
+						flex-wrap: wrap;
+
+						.item {
+							width: 100%;
+							height: vw(100);
+							@include flex-y(center);
+							@include word-vw(14, #A8A8A8);
+
+							text {
+								@include word-vw(20, #333);
+								font-weight: bold;
+								margin-bottom: vw(5);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 192 - 0
src/packages/user/fund/kpi.vue

@@ -0,0 +1,192 @@
+<template>
+	<view class="data-statistics-box">
+		<Navbar title="社区业绩" color="#333"></Navbar>
+		<view class="content">
+			<view class="bk"></view>
+			<view class="info">
+				<view class="top">
+					<view class="name">社区总积分</view>
+					<view class="num">{{info.totalIntegral}}</view>
+				</view>
+				<view class="bottom">
+					<view class="box">
+						<view class="item">
+							<text>{{info.releaseIntegralSum}}</text>
+							社区已释放积分
+						</view>
+						<view class="item">
+							<text>{{info.goldSum}}</text>
+							冻结中悦贝
+						</view>
+						<view class="item">
+							<text>{{info.goldSum}}</text>
+							社区总悦贝
+						</view>
+					</view>
+				</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.000000000000000000';
+				return (+val).toFixed(18);
+			}
+		}
+	})
+
+	export default class DataStatistics extends Vue {
+		info: any = {};
+		price: any = 0;
+		balanceInfo: any = {};
+
+		onShow() {
+			this.getInfo();
+			// this.getGoldPrice();
+			// this.getBalance();
+		}
+
+		getInfo() {
+			this.$http
+				.get({
+					url: this.$api.getGroupSum
+				})
+				.then((res: any) => {
+					this.info = res;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+		
+		toPage(url: any, data: any = {}) {
+			if (!url) {
+				uni.showToast({
+					title: '敬请期待',
+					icon: 'none'
+				})
+				return;
+			}
+			this.$Router.push({
+				path: url,
+				query: data
+			})
+		}
+
+		getGoldPrice() {
+			this.$http
+				.get({
+					url: this.$api.getGoldPrice
+				})
+				.then((res: any) => {
+					this.price = res.goldOfficialPrice;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+		getBalance() {
+			this.$http
+				.get({
+					url: this.$api.getBalance
+				})
+				.then((res: any) => {
+					this.balanceInfo = res;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.data-statistics-box {
+		.content {
+			@include flex-y();
+			overflow: hidden;
+
+			.bk {
+				width: vw(800);
+				height: vw(800);
+				background: #6ABCE6;
+				border-radius: vw(300);
+				position: absolute;
+				left: 50%;
+				transform: translateX(-50%);
+				top: vw(-520);
+			}
+
+			.info {
+				position: relative;
+				z-index: 10;
+				margin-top: vw(32);
+
+				.top {
+					@include flex-y();
+
+					.name {
+						@include word-vw(14, #fff);
+					}
+
+					.num {
+						@include word-vw(24, #fff);
+						margin-top: vw(8);
+					}
+
+					.tip {
+						padding: 0 vw(10);
+						height: vw(24);
+						line-height: vw(24);
+						box-sizing: border-box;
+						background: rgba(255, 255, 255, 0.2);
+						@include word-vw(14, #fff);
+						border: vw(1) solid rgba(255, 255, 255, 0.5);
+						border-radius: vw(12);
+						margin-top: vw(16);
+					}
+				}
+
+				.bottom {
+					background: #fff;
+					width: vw(355);
+					border-radius: vw(10);
+					margin-top: vw(32);
+					overflow: hidden;
+
+					.title {
+						height: vw(36);
+						line-height: vw(36);
+						background: #F7F7F7;
+						@include word-vw(12, #A8A8A8);
+						text-align: center;
+					}
+
+					.box {
+						@include flex-x();
+						flex-wrap: wrap;
+
+						.item {
+							width: 100%;
+							height: vw(100);
+							@include flex-y(center);
+							@include word-vw(14, #A8A8A8);
+
+							text {
+								@include word-vw(20, #333);
+								font-weight: bold;
+								margin-bottom: vw(5);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 626 - 0
src/packages/user/fund/message-publish.vue

@@ -0,0 +1,626 @@
+<template>
+	<view class="record-box">
+		<Navbar title="信息市场" background-color="#fff" color="#333"></NavBar>
+		<view class="container">
+			<view class="tabs">
+				<view class="tab" :class="{active: index === tabActive}" v-for="(item, index) in statusOptions"
+					@click="changeTab(item.value, index)" :key="item.value">
+					{{item.name}}
+					<view class="bar"></view>
+				</view>
+			</view>
+			<swiper class="swiper" @change="selectTab" :current="tabActive" :duration="300" :disable-touch="true">
+				<swiper-item v-for="tab in statusOptions" :key="tab.value">
+					<!-- <view class="noData" v-if="!tab.list.length && !isLoading">
+						<image class="image" :src="img" mode="aspectFit"></image>
+						<text class="word16">暂无数据</text>
+					</view> -->
+					<view class="no-data" v-if="!tab.list.length">
+						<NoData :show="!tab.list.length" topNum="10" title="暂无数据!"></NoData>
+					</view>
+					<scroll-view class="list" scroll-y @scrolltolower="scrolltolower">
+						<view class="item-box" v-for="item in tab.list" :key="item.id">
+							<view class="item">
+								<view class="title">{{item.subject}}</view>
+								<view class="text">{{item.describe}}</view>
+								<scroll-view :scroll-x="true" class="pics">
+									<view>
+										<image class="pic" v-for="(pic, index) in item.pics" :key="index" :src="pic"
+											mode="aspectFill" @click="previewImage(item.pics, index)"></image>
+									</view>
+								</scroll-view>
+							</view>
+							<view class="item-bottom">
+								<view class="info">
+									<image :src="item.avatar" class="avatar" mode="aspectFill"></image>
+									<view>
+										<view class="phone">{{item.phone}}</view>
+										<view class="uid">{{item.uid}}</view>
+									</view>
+								</view>
+								<view class="btn-box" v-if="_userInfo.uid === item.uid">
+									<view class="btn btn1" @click="handleDeleteModal(item.id)">删除</view>
+									<view class="btn" @click="updateQiugouModal(item)">修改</view>
+								</view>
+							</view>
+							<view v-if="_userInfo.uid === item.uid">
+								<view class="status" v-if="item.way" :style="{color: statusMap[item.way].color}">
+									{{statusMap[item.way].name || ''}}</view>
+								<view class="remark" v-if="item.way === 3">
+									原因:{{item.remark}}
+								</view>
+							</view>
+						</view>
+						<view class="tips" v-if="tab.list.length">
+							<text v-if="finish">没有更多了</text>
+							<text v-else>加载更多</text>
+						</view>
+					</scroll-view>
+				</swiper-item>
+			</swiper>
+			<view class="bottom">
+				<view class="btn" @click="handleQiugouModal">发布消息</view>
+			</view>
+		</view>
+		<uni-popup ref="qiugou" :safeArea="false">
+			<view class="show-modal">
+				<view class="title">
+					发布消息
+					<IconText class="close" @click.native="close" :code="`\ue847`" color="#999" size="10"></IconText>
+				</view>
+				<view class="popup-content">
+					<view class="input-box">
+						<input v-model="form.subject" type="text" placeholder="点击编辑主题"
+							placeholder-style="color: #BFBFBF">
+					</view>
+					<view class="input-box">
+						<IconText class="icon" :code="`\ue852`" color="#333" size="16"></IconText>
+						<input v-model="form.phone" type="number" placeholder="点击输入联系方式"
+							placeholder-style="color: #BFBFBF">
+					</view>
+					<textarea v-model="form.describe" class="des" placeholder="点击输入详细信息"
+						placeholder-style="color: #BFBFBF"></textarea>
+					<view class="pics">
+						<MulImgUpload @update="getImgs" :imgs="form.pics" :max="5" :width="98 / 3.75"
+							:height="98 / 3.75" addColor="#FA402B">
+						</MulImgUpload>
+					</view>
+				</view>
+				<view class="btn-box btn-styl">
+					<view class="btn cancel-btn" @click="close">取消</view>
+					<view class="btn" @click="handleQiugou">发布</view>
+				</view>
+			</view>
+		</uni-popup>
+		<ShowModal ref="revokePopup" title="提示" @submit="handleDelete" leftBtnText="取消" content="确定要删除吗" btnText="确认" />
+		<ShowModal ref="confirmPopup" title="提示" @submit="handleConfirm" leftBtnText="取消" content="确定要完成吗"
+			btnText="确认" />
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue,
+		Mixins
+	} from 'vue-property-decorator';
+	import loginMixin from '@/common/mixins/loginMixin.ts';
+	// import dayjs from 'dayjs';
+	@Component({})
+	export default class RechargeRecord extends Mixins(loginMixin) {
+		img: string = '';
+		list: any[] = [];
+		tabActive: number = 0;
+		status: number = 0;
+		isLoading: boolean = false;
+		size: number = 20;
+		current: number = 1;
+		finish: boolean = false;
+		amount: any = '';
+		phone: any = '';
+		id: any = null;
+		form: any = {};
+
+		statusOptions: any[] = [{
+				name: '消息大厅',
+				value: 0,
+				list: []
+			},
+			{
+				name: '我发布的',
+				value: 1,
+				list: []
+			}
+		];
+
+		roleMap: any = {
+			0: '普通用户',
+			1: 'VIP',
+			2: '健康驿站',
+			3: '社区店',
+			4: '旗舰店',
+			5: '运营中心',
+			6: '分公司'
+		};
+
+		statusMap: any = {
+			1: {
+				name: '待审核',
+				color: '#999'
+			},
+			2: {
+				name: '审核通过',
+				color: '#00BAAD'
+			},
+			3: {
+				name: '审核驳回',
+				color: '#D43030'
+			}
+		}
+
+		onLoad() {
+			let query = this.$Route.query;
+			this.tabActive = +query.index || 0;
+			this.getList();
+		}
+
+		changeTab(status: number, index: number) {
+			this.tabActive = index;
+			this.status = status;
+			// this.getList();
+		}
+
+		getImgs(pics: any) {
+			this.form.pics = pics;
+		}
+
+		previewImage(pics: any, index: any) {
+			uni.previewImage({
+				urls: pics,
+				current: index
+			})
+		}
+
+		handleQiugouModal() {
+			this.form = {
+				subject: '',
+				phone: '',
+				describe: '',
+				pics: []
+			};
+			(this.$refs.qiugou as any).open('bottom');
+		}
+
+		updateQiugouModal(item: any) {
+			this.form = {
+				subject: item.subject,
+				phone: item.phone,
+				describe: item.describe,
+				pics: item.pics,
+				id: item.id
+			};
+			(this.$refs.qiugou as any).open('bottom');
+		}
+
+		close() {
+			(this.$refs.qiugou as any).close();
+		}
+
+		handleDeleteModal(id: any) {
+			this.id = id;
+			(this.$refs.revokePopup as any).open();
+		}
+
+		handleDelete() {
+			this.$http.delete({
+				url: this.$api.purchaseDelete,
+				data: {
+					id: this.id
+				}
+			}).then(() => {
+				uni.showToast({
+					title: '操作成功',
+					icon: 'none'
+				});
+				(this.$refs.qiugou as any).close();
+				this.reSet();
+			}).catch((err: any) => {
+				console.log(err);
+			})
+		}
+
+		handleConfirmModal(id: any) {
+			this.id = id;
+			(this.$refs.confirmPopup as any).open();
+		}
+
+		handleConfirm() {
+			this.$http.put({
+				url: this.$api.purchaseFinish,
+				data: {
+					id: this.id
+				}
+			}).then((res: any) => {
+				uni.showToast({
+					title: '操作成功',
+					icon: 'none'
+				});
+				(this.$refs.qiugou as any).close();
+				this.reSet();
+			}).catch((err: any) => {
+				console.log(err);
+			})
+		}
+
+		handleQiugou() {
+			let url = this.$api.purchaseIssue;
+			let method = 'post';
+			if (this.form.id) {
+				url = this.$api.updatePurchaseIssue;
+				method = 'put';
+			};
+			this.$http[method]({
+				url: url,
+				data: {
+					...this.form
+				}
+			}).then(() => {
+				uni.showToast({
+					title: '发布成功',
+					icon: 'none'
+				});
+				(this.$refs.qiugou as any).close();
+				this.reSet();
+			}).catch((err: any) => {
+				console.log(err);
+			})
+		}
+
+		selectTab(e: any) {
+			this.tabActive = e.detail.current;
+			this.status = this.statusOptions[this.tabActive].value;
+			// this.current = 1;
+			// this.finish = false;
+			// this.statusOptions[this.tabActive].list = [];
+			// this.getList();
+			this.reSet();
+		}
+
+		reSet() {
+			this.list = [];
+			this.statusOptions = [{
+					name: '消息大厅',
+					value: 0,
+					list: []
+				},
+				{
+					name: '我发布的',
+					value: 1,
+					list: []
+				}
+			];
+			this.current = 1;
+			this.finish = false;
+			this.getList();
+		}
+
+		//获取列表
+		getList() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.isLoading = true;
+			return this.$http.get({
+				url: this.$api.getPurchaseList,
+				data: {
+					self: Boolean(this.status),
+					size: this.size,
+					page: this.current
+				}
+			}).then((res: any) => {
+				// let list = [...this.statusOptions[this.tabActive].list];
+				// this.statusOptions[this.tabActive].list = [...list, ...res.list];
+				this.statusOptions[this.tabActive].list = [...this.statusOptions[this.tabActive].list, ...res
+					.list
+				];
+				this.statusOptions[this.tabActive].num = res.total;
+				if (res.list.length < this.size) this.finish = true;
+				this.isLoading = false;
+				uni.hideLoading();
+			}).catch(() => {
+				uni.hideLoading();
+				this.isLoading = false;
+			})
+		}
+		scrolltolower() {
+			if (this.isLoading || this.finish) return;
+			this.current++;
+			this.getList();
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.record-box {
+		height: 100vh;
+		@include flex-y();
+		background: #F6F6F6;
+
+		.container {
+			flex: 1;
+			width: 100%;
+			height: 100%;
+			box-sizing: border-box;
+			overflow-y: auto;
+			@include flex-y();
+
+			.tabs {
+				background: #fff;
+				margin-top: vw(1);
+				@include flex-x();
+				height: vw(45);
+				width: 100%;
+
+				.tab {
+					flex: 1;
+					text-align: center;
+					@include word-vw(16, #999);
+					height: vw(36);
+					@include flex-y(center, center);
+
+					&.active {
+						@include word-vw(16, #333);
+						font-weight: 450;
+						position: relative;
+
+						.bar {
+							width: vw(40);
+							height: vw(5);
+							border-radius: vw(5);
+							background: $btn-color;
+							position: absolute;
+							bottom: 0;
+						}
+					}
+				}
+			}
+
+			.swiper {
+				flex: 1;
+				width: 100%;
+			}
+
+			.list {
+				@include flex-y();
+				/* padding: 0 vw(10) vw(80); */
+				padding-bottom: vw(80);
+				box-sizing: border-box;
+				height: 100%;
+
+				.item-box {
+					@include flex-y(flex-start, flex-start);
+					margin-top: vw(10);
+					background: #fff;
+					/* height: vw(70); */
+					box-sizing: border-box;
+					/* border-radius: vw(10); */
+					padding: vw(15) vw(20);
+
+					.item-bottom {
+						width: 100%;
+						@include flex-x();
+
+						.info {
+							@include flex-x(flex-start);
+
+							.avatar {
+								width: vw(30);
+								height: vw(30);
+								border-radius: vw(15);
+								margin-right: vw(15);
+							}
+
+							.phone {
+								@include word-vw(14, #333);
+							}
+
+							.uid {
+								@include word-vw(12, #999);
+							}
+						}
+					}
+
+					.status {
+						line-height: vw(32);
+						font-size: vw(12);
+					}
+
+					.remark {
+						@include word-vw(12, #999);
+					}
+				}
+
+				.item {
+					width: 100%;
+					@include flex-y(flex-start, flex-start);
+					/* padding: vw(0) vw(10); */
+					box-sizing: border-box;
+
+					.title {
+						@include word-vw(14, #333);
+						font-weight: 600;
+					}
+
+					.text {
+						@include word-vw(12, #999);
+						margin-top: vw(3);
+					}
+
+					.pics {
+						width: 100%;
+						white-space: nowrap;
+						margin-top: vw(10);
+
+						.pic {
+							width: vw(90);
+							height: vw(90);
+							margin-right: vw(10);
+						}
+					}
+				}
+
+				.btn-box {
+					width: 100%;
+					height: vw(48);
+					/* border-top: vw(1) solid #F0F0F0; */
+					@include flex-x(flex-end);
+
+					.btn {
+						@include solid-btn(64, 30, #fff, 15);
+						margin-left: vw(12);
+						@include word-vw(12, #fff);
+						box-sizing: border-box;
+					}
+
+					.btn1 {
+						background: #fff;
+						@include word-vw(12, #333);
+						border: vw(1) solid #333;
+					}
+				}
+			}
+		}
+
+		.noData {
+			width: 100vw;
+			margin-top: vw(30);
+			@include flex-y(center, center);
+
+			.image {
+				width: vw(150);
+				height: vw(180);
+				margin-top: vw(30);
+			}
+
+			.word16 {
+				// margin-left: vw(20);
+				@include word-vw(14, #7B8184);
+			}
+		}
+
+		.tips {
+			width: 100vw;
+			text-align: center;
+			@include word-vw(12, $gray9);
+			margin-top: 10px;
+		}
+
+		.bottom {
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			height: vw(70);
+			background: #fff;
+			@include flex-x(center);
+
+			.btn {
+				@include flex-x(center);
+				@include solid-btn(335, 50, #fff, 25);
+			}
+		}
+	}
+
+	.show-modal {
+		background: #FAFAFA;
+		width: 100%;
+		@include flex-y();
+		border-radius: vw(10);
+		position: relative;
+
+		.close {
+			position: absolute;
+			right: vw(20);
+			top: 50%;
+			transform: translateY(-50%);
+			padding: vw(5);
+		}
+
+		.title {
+			width: 100%;
+			@include word-vw(14, #333);
+			font-weight: 700;
+			height: vw(60);
+			@include flex-x(center);
+			position: relative;
+			/* margin-top: vw(25); */
+		}
+
+		.popup-content {
+			width: 100%;
+			@include word-vw(14, #666);
+			@include flex-y();
+			padding: 0 vw(15);
+			box-sizing: border-box;
+		}
+
+		.input-box {
+			width: 100%;
+			@include flex-x();
+			margin-bottom: vw(10);
+			background: #F6F6F6;
+			border-radius: vw(10);
+			@include flex-x(flex-start);
+			height: vw(50);
+
+			.icon {
+				margin-left: vw(15);
+			}
+
+			input {
+				flex: 1;
+				height: vw(50);
+				border-radius: vw(6);
+				/* background: #F6F6F6; */
+				box-sizing: border-box;
+				padding: 0 vw(16);
+			}
+		}
+
+		.des {
+			width: vw(315);
+			height: vw(80);
+			margin-top: vw(5);
+			padding: 0 vw(15);
+		}
+
+		.pics {
+			width: 100%;
+			padding: 0 vw(15);
+			margin-top: vw(20);
+			box-sizing: border-box;
+		}
+
+		.btn-box {
+			width: 100%;
+			@include flex-x();
+			padding: vw(24) vw(10);
+			box-sizing: border-box;
+
+			.btn {
+				width: vw(213);
+				height: vw(50);
+				line-height: vw(50);
+				text-align: center;
+				background: $btn-color;
+				@include word-vw(14, #fff);
+				border-radius: vw(10);
+			}
+
+			.cancel-btn {
+				width: vw(127);
+				background: #fff;
+				@include word-vw(16, $btn-color);
+			}
+		}
+	}
+</style>

+ 118 - 0
src/packages/user/fund/recommend-list.vue

@@ -0,0 +1,118 @@
+<template>
+	<view class="recommend-box">
+		<Navbar :title="_userInfo.role > 1 ? '级差奖明细' : '推荐奖明细'"></NavBar>
+		<view class="content">
+			<view class="item" v-for="item in list">
+				<image :src="item.avatar" class="pic" mode="aspectFill"></image>
+				<view class="info">
+					<view class="name">{{map[item.rebateType]}}</view>
+					<view class="time">{{item.created}}</view>
+				</view>
+				<view class="num">+20</view>
+			</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 recommendList extends Vue {
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		list: any = [];
+		current: number = 0;
+		size: number = 20;
+		map: any = {
+			1: '推荐收益',
+			2: '级差收益'
+		};
+		finish: boolean = false;
+		loading: boolean = false;
+
+		onShow() {
+			this.getRebateLog();
+		}
+
+		onReachBottom() {
+			if (this.finish || this.loading) return;
+			this.current++;
+			this.getRebateLog();
+		}
+
+		getRebateLog() {
+			this.loading = true;
+			this.$http
+				.get({
+					url: this.$api.getRebateLog,
+					data: {
+						page: this.current,
+						size: this.size
+					}
+				})
+				.then((res: any) => {
+					this.list = [...this.list, ...res];
+					if (res.length < this.size) this.finish = true;
+					this.loading = false;
+				}, (err: any) => {
+					console.log(err);
+					this.loading = false;
+				});
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.recommend-box {
+		.content {
+			@include flex-y();
+			/* padding: 0 vw(10) vw(30); */
+			box-sizing: border-box;
+			height: 100%;
+			overflow-y: auto;
+
+			.item {
+				width: 100%;
+				@include flex-x(flex-start);
+				margin-top: vw(10);
+				background: #fff;
+				height: vw(70);
+				padding: 0 vw(16);
+				box-sizing: border-box;
+				/* border-radius: vw(10); */
+
+				.pic {
+					width: vw(34);
+					height: vw(34);
+					border-radius: vw(17);
+				}
+
+				.info {
+					margin-left: vw(10);
+					flex: 1;
+				}
+
+				.name {
+					@include word-vw(14, #333);
+					font-weight: 450;
+				}
+
+				.time {
+					@include word-vw(10, #999);
+					margin-top: vw(5);
+				}
+
+				.num {
+					@include word-vw(20, $bk-color);
+					font-weight: 600;
+				}
+			}
+		}
+	}
+</style>

+ 193 - 0
src/packages/user/fund/record-all.vue

@@ -0,0 +1,193 @@
+<template>
+	<view class="record-box">
+		<Navbar :title="title" background-color="#fff" color="#333"></NavBar>
+		<view class="container">
+			<!-- <view class="top">
+				<view class="title">
+					余额明细
+				</view>
+				<view class="status" @click="openSearch">
+					{{typeMap[type]}}
+					<IconText :code="`\ue84a`" :size="8" color="#666" class="icon"></IconText>
+				</view>
+			</view> -->
+			<view class="noData" v-if="!list.length && !isLoading">
+				<NoData :show="!list.length" topNum="10"></NoData>
+			</view>
+			<view class="list" v-else>
+				<view class="item" v-for="item in list" :key="item.id">
+					<view class="left">
+						<text>{{item.describe}}</text>
+						{{item.created}}
+					</view>
+					<view class="right">
+						<text v-if="item.direction === 1" style="color: #FA402B;">-{{item.amount}}</text>
+						<text v-else style="color: #409763;">+{{item.amount}}</text>
+					</view>
+				</view>
+				<view class="data-tips">
+					<text v-if="final">没有更多了</text>
+					<text v-else>加载更多</text>
+				</view>
+			</view>
+		</view>
+		<BottomPopup ref="bottom_popup" title="请选择" :dataList="typeList" @selected="popupSelected" keyName="name">
+		</BottomPopup>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	import {
+		types
+	} from '@/common/store';
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class Record extends Vue {
+		img: string = this.$oss_url + 'zwdd.png';
+		isLoading: boolean = false;
+		list: any[] = [];
+		sum: number = 0;
+		isLoad: boolean = false;
+		final: boolean = false;
+		current: number = 1;
+		size: number = 20;
+		classify: number = 0;
+		title: string = '';
+
+		onShow() {
+			let query = this.$Route.query;
+			this.classify = query.classify || 0;
+			this.title = query.name || '';
+			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.getFunList,
+				data: {
+					classify: this.classify,
+					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;
+			})
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.record-box {
+		min-height: 100%;
+		@include flex-y();
+		background: #F6F6F6;
+
+		.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 {
+				/* padding: 0 vw(10) vw(30); */
+				box-sizing: border-box;
+				margin-top: vw(10);
+
+				.item {
+					/* box-shadow: 0px 1px 5px rgba(225, 225, 225, 0.5); */
+					background: #fff;
+					margin-top: vw(1);
+					/* border-radius: vw(10); */
+					height: vw(60);
+					@include flex-x();
+
+					view {
+						padding: 0 vw(18);
+						@include flex-y(center, flex-start);
+						@include word-vw(12, #999);
+
+						text {
+							margin-bottom: vw(5);
+							@include word-vw(14, #333);
+							font-weight: 450;
+						}
+
+						&.right {
+							align-items: flex-end;
+							font-weight: bold;
+						}
+					}
+				}
+			}
+		}
+
+		.data-tips {
+			width: 100%;
+			text-align: center;
+			@include word-vw(12, $gray9);
+			margin-top: 10px;
+		}
+	}
+</style>

+ 228 - 0
src/packages/user/fund/record-recharge.vue

@@ -0,0 +1,228 @@
+<template>
+	<view class="record-box">
+		<Navbar title="充值明细" background-color="#fff" color="#333"></NavBar>
+		<view class="container">
+			<view class="top">
+				<view class="title">
+					充值明细
+				</view>
+				<view class="status" @click="openSearch">
+					{{typeMap[status] || '全部'}}
+					<IconText :code="`\ue84a`" :size="8" color="#666" class="icon"></IconText>
+				</view>
+			</view>
+			<view class="noData" v-if="!list.length && !isLoading">
+				<NoData :show="!list.length" topNum="10"></NoData>
+			</view>
+			<view class="list" v-else>
+				<view class="item" v-for="item in list" :key="item.id">
+					<view class="left" :class="{reject: item.status === 2}">
+						<!-- <text>{{item.describe}}</text> -->
+						<text>{{typeMap[item.status]}}</text>
+						{{item.created}}
+					</view>
+					<view class="right" v-if="item.status !== 2">
+						<text v-if="item.direction === 1" style="color: #FA402B;">-{{item.amount | moneyFormat}}</text>
+						<text v-else style="color: #409763;">+{{item.amount | moneyFormat}}</text>
+					</view>
+				</view>
+				<view class="data-tips">
+					<text v-if="final">没有更多了</text>
+					<text v-else>加载更多</text>
+				</view>
+			</view>
+		</view>
+		<BottomPopup ref="bottom_popup" title="请选择" :dataList="typeList" @selected="popupSelected" keyName="name">
+		</BottomPopup>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baeModule = namespace('base');
+	import {
+		types
+	} from '@/common/store';
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class RechargeRecord extends Vue {
+		img: string = this.$oss_url + 'zwdd.png';
+		isLoading: boolean = false;
+		list: any[] = [];
+		sum: number = 0;
+		isLoad: boolean = false;
+		final: boolean = false;
+		current: number = 1;
+		size: number = 20;
+		status: any = '';
+		typeList: any[] = [
+			{
+				name: '全部',
+				value: ''
+			},{
+				name: '待审核',
+				value: 0
+			},{
+				name: '审核通过',
+				value: 1
+			},{
+				name: '审核拒绝',
+				value: 2
+			}
+		];
+		typeMap: any = {
+			0: '线下汇款(待审核)',
+			1: '线下汇款(已审核)',
+			2: '线下汇款(平台已拒绝)'
+		};
+		type: number = 0;
+
+		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.xxRechargeRecord,
+				data: {
+					page: this.current,
+					size: this.size,
+					status: this.status
+				}
+			}).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;
+			})
+		}
+
+		openSearch() {
+			(this.$refs.bottom_popup as any).open();
+		}
+
+		popupSelected(val: any) {
+			this.status = val.value;
+			this.list = [];
+			this.current = 1;
+			this.final = false;
+			this.getList();
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.record-box {
+		min-height: 100%;
+		@include flex-y();
+		background: #F6F6F6;
+
+		.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);
+				padding-top: vw(55);
+
+				.item {
+					/* box-shadow: 0px 1px 5px rgba(225, 225, 225, 0.5); */
+					background: #fff;
+					margin-top: vw(1);
+					/* border-radius: vw(10); */
+					height: vw(60);
+					@include flex-x();
+
+					view {
+						padding: 0 vw(18);
+						@include flex-y(center, flex-start);
+						@include word-vw(12, #999);
+
+						&.reject {
+							text {
+								color: #FA402B;
+							}
+						}
+
+						text {
+							margin-bottom: vw(5);
+							@include word-vw(14, #333);
+							font-weight: 450;
+						}
+
+						&.right {
+							align-items: flex-end;
+						}
+					}
+				}
+			}
+		}
+
+		.data-tips {
+			width: 100%;
+			text-align: center;
+			@include word-vw(12, $gray9);
+			margin-top: 10px;
+		}
+	}
+</style>

+ 252 - 0
src/packages/user/fund/record.vue

@@ -0,0 +1,252 @@
+<template>
+	<view class="record-box">
+		<Navbar title="微信收入" background-color="#fff" color="#333"></NavBar>
+		<view class="container">
+			<!-- <view class="top">
+				<view class="title">
+					余额明细
+				</view>
+				<view class="status" @click="openSearch">
+					{{typeMap[type]}}
+					<IconText :code="`\ue84a`" :size="8" color="#666" class="icon"></IconText>
+				</view>
+			</view> -->
+			<view class="total">
+				累计微信收入/元:
+				<text>{{info.sumWx | moneyFormat}}</text>
+			</view>
+			<view class="noData" v-if="!list.length && !isLoading">
+				<NoData :show="!list.length" topNum="10"></NoData>
+			</view>
+			<view class="list" v-else>
+				<view class="item" v-for="item in list" :key="item.id">
+					<view class="left">
+						<text>{{item.describe}}</text>
+						{{item.created}}
+					</view>
+					<view class="right">
+						<text v-if="item.direction === 1" style="color: #FA402B;">-{{item.amount | moneyFormat}}</text>
+						<text v-else style="color: #409763;">+{{item.amount | moneyFormat}}</text>
+					</view>
+				</view>
+				<view class="data-tips">
+					<text v-if="final">没有更多了</text>
+					<text v-else>加载更多</text>
+				</view>
+			</view>
+		</view>
+		<BottomPopup ref="bottom_popup" title="请选择" :dataList="typeList" @selected="popupSelected" keyName="name">
+		</BottomPopup>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baeModule = namespace('base');
+	import {
+		types
+	} from '@/common/store';
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			}
+		}
+	})
+	export default class RechargeRecord extends Vue {
+		img: string = this.$oss_url + 'zwdd.png';
+		isLoading: boolean = false;
+		list: any[] = [];
+		sum: number = 0;
+		isLoad: boolean = false;
+		final: boolean = false;
+		current: number = 1;
+		size: number = 20;
+		typeList: any[] = [];
+		typeMap: any = {};
+		info: any = {};
+		type: number = 0;
+
+		onShow() {
+			this.list = [];
+			this.current = 1;
+			this.final = false;
+			this.getList();
+			this.getShopInfo();
+		}
+		
+		async getShopInfo() {
+			let eve: any = await this.getCode();
+			this.$http
+				.get({
+					url: this.$api.getShopInfo,
+					data: {
+						code: eve.code
+					}
+				})
+				.then((res : any) => {
+					this.info = res.info;
+				}, (err : any) => {
+					console.log(err);
+				});
+		}
+		
+		getCode() {
+			return new Promise((resolve: any, reject: any) => {
+				uni.login({
+					provider: 'weixin',
+					success: (eve) => {
+						resolve(eve);
+					},
+					fail: (err) => {
+						console.log(err);
+						reject();
+					}
+				});
+			})
+		}
+
+		onReachBottom() {
+			if (this.final) return;
+			this.current++;
+			this.getList();
+		}
+
+		getList() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.isLoading = true;
+			return this.$http.get({
+				url: this.$api.getWxIncomList,
+				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;
+			})
+		}
+
+		openSearch() {
+			(this.$refs.bottom_popup as any).open();
+		}
+
+		popupSelected(val: any) {
+			this.type = +(val.value);
+			this.list = [];
+			this.current = 1;
+			this.final = false;
+			this.getList();
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.record-box {
+		min-height: 100%;
+		@include flex-y();
+		background: #F6F6F6;
+
+		.container {
+			flex: 1;
+			width: 100%;
+			box-sizing: border-box;
+			overflow-y: auto;
+			
+			.total{
+				@include flex-x(flex-start);
+				height: vw(55);
+				background: #fff;
+				margin-top: vw(1);
+				padding: 0 vw(15);
+				@include word-vw(14, #333);
+				text{
+					margin-left: vw(12);
+					@include word-vw(20, #333);
+					font-weight: bold;
+				}
+			}
+
+			.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);
+				/* padding-top: vw(55); */
+
+				.item {
+					/* box-shadow: 0px 1px 5px rgba(225, 225, 225, 0.5); */
+					background: #fff;
+					margin-top: vw(1);
+					/* border-radius: vw(10); */
+					height: vw(60);
+					@include flex-x();
+
+					view {
+						padding: 0 vw(18);
+						@include flex-y(center, flex-start);
+						@include word-vw(12, #999);
+
+						text {
+							margin-bottom: vw(5);
+							@include word-vw(16, #333);
+							font-weight: 450;
+						}
+
+						&.right {
+							align-items: flex-end;
+						}
+					}
+				}
+			}
+		}
+		.data-tips {
+			width: 100%;
+			text-align: center;
+			@include word-vw(12, $gray9);
+			margin-top: 10px;
+		}
+	}
+</style>

+ 264 - 0
src/packages/user/fund/reward.vue

@@ -0,0 +1,264 @@
+<template>
+	<view class="reward-box">
+		<Navbar :title="_userInfo.balance === 1 ? '顾客打赏' : '顾客打赏'" color="#333"></Navbar>
+		<view class="content">
+			<view class="input-box">
+				<view class="label">赠送对象</view>
+				<input type="number" v-model="receivePhone" placeholder="请输入接收积分的手机号" class="input">
+				<view class="code-btn" @click="scanCode">
+					<IconText :code="`\ue601`" color="#FA402B" size="24"></IconText>
+				</view>
+			</view>
+			<view class="input-box">
+				<view class="label">输入金额</view>
+				<input type="number" v-model="integral" placeholder="输入金额" class="input">
+			</view>
+			<view class="input-box dz">
+				<view class="label">打赏商家</view>
+				{{_userInfo.phone || ''}}
+			</view>
+			<view class="input-box">
+				<view class="label">扣除悦贝数</view>
+				¥{{xhed | moneyFormat2}}
+			</view>
+			<view class="input-box">
+				<view class="label">打赏成本</view>
+				{{price}}/悦贝
+			</view>
+			<view class="input-box">
+				<view class="label">用户接收积分</view>
+				{{integral * 10}}
+			</view>
+			<!-- <view class="type">
+				<view class="label">扣除方式:</view>
+				<IconText :code="`\ue85d`" v-if="type === 1" color="#FA402B" size="18" @click.native="changeType(1)">
+				</IconText>
+				<view class="empty" v-else @click="changeType(1)"></view>
+				<text class="name">余额</text>
+				<IconText :code="`\ue85d`" v-if="type === 2" color="#FA402B" size="18" @click.native="changeType(2)">
+				</IconText>
+				<view class="empty" v-else @click="changeType(2)"></view>
+				<text class="name">悦贝</text>
+			</view> -->
+			<view class="btn" @click="reward">
+				确定打赏
+			</view>
+		</view>
+		<Password ref="password" @finish="passwordFinish"></Password>
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue,
+	} from 'vue-property-decorator';
+	import {
+		namespace
+	} from 'vuex-class';
+	const baseModule = namespace('base');
+	@Component({
+		filters: {
+			moneyFormat(val: any) {
+				if (!+val) return '0.00';
+				return (+val).toFixed(2);
+			},
+			moneyFormat2(val: any) {
+				if (!+val) return '0.0000000000000000';
+				return (+val).toFixed(16);
+			}
+		}
+	})
+
+	export default class Reward extends Vue {
+		@baseModule.Getter('_userInfo') _userInfo: any;
+		type: any = 1;
+		price: any = 0;
+		ratio: any = 0;
+		receivePhone: any = null;
+		integral: any = null;
+		isLoading: boolean = false;
+
+		get xhed() {
+			return this.integral / this.price / this.ratio;
+		}
+
+		get xhhj() {
+			if (!this.price) return 0;
+			return this.xhed / this.price;
+		}
+
+		onLoad() {
+			this.getGoldPrice();
+		}
+
+		changeType(type: any) {
+			this.type = type;
+		}
+		handleConfirm() {
+			(this.$refs.password as any).open();
+		}
+		
+		scanCode(){
+			uni.scanCode({
+				// onlyFromCamera: true,
+				success: (res: any) => {
+					// res.result
+					this.receivePhone = res.result;
+				}
+			});
+		}
+		
+		passwordFinish(val: any) {
+			uni.showLoading({
+				title: '加载中'
+			});
+			// this.$Router.push({
+			// 	path: '/packages/user/fund/reward-success',
+			// 	query: {
+			// 		num1:  400,
+			// 		num2:  388,
+			// 		account: '**58',
+			// 	}
+			// })
+			uni.hideLoading();
+		}
+
+		getGoldPrice() {
+			this.$http
+				.get({
+					url: this.$api.getGoldPrice
+				})
+				.then((res: any) => {
+					this.price = res.goldOfficialPrice;
+					this.ratio = res.ratio;
+				}, (err: any) => {
+					console.log(err);
+				});
+		}
+
+		reward() {
+			if (this.isLoading) return;
+			if (!this.receivePhone) {
+				uni.showToast({
+					title: '请输入赠送对象',
+					icon: 'none'
+				})
+				return;
+			}
+			if (!this.integral) {
+				uni.showToast({
+					title: '请输入赠送积分',
+					icon: 'none'
+				})
+				return;
+			}
+			this.isLoading = true;
+			uni.showLoading({
+				title: '加载中'
+			});
+			this.$http
+				.post({
+					url: this.$api.reward,
+					data: {
+						reward: {
+							amount: +this.integral
+						},
+						receivePhone: this.receivePhone
+					}
+				})
+				.then((res: any) => {
+					this.isLoading = false;
+					uni.hideLoading();
+					this.$Router.pushTab({
+						path: '/pages/user/user',
+						query: {}
+					});
+					uni.showToast({
+						title: "打赏成功",
+						icon: 'none'
+					});
+				}, (err: any) => {
+					console.log(err);
+					this.isLoading = false;
+					uni.hideLoading();
+				});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.reward-box {
+		.content {
+			@include flex-y();
+
+			.label {
+				width: vw(100);
+				@include word-vw(14, #333);
+			}
+
+			.type {
+				width: 100%;
+				height: vw(58);
+				@include flex-x(flex-start);
+				background: #fff;
+				padding: 0 vw(18);
+				box-sizing: border-box;
+				@include word-vw(14, #333);
+				margin-top: vw(1);
+
+				.name {
+					margin-left: vw(8);
+					margin-right: vw(24);
+				}
+
+				.empty {
+					width: vw(18);
+					height: vw(18);
+					border-radius: vw(4);
+					border: vw(1) solid #D9D9D9;
+					box-sizing: border-box;
+				}
+			}
+
+			.input-box {
+				width: 100%;
+				height: vw(66);
+				background: #fff;
+				padding: 0 vw(15);
+				box-sizing: border-box;
+				@include flex-x(flex-start);
+				margin-top: vw(1);
+				@include word-vw(14, #333);
+
+				.input {
+					background: #F6F6F6;
+					height: vw(50);
+					// width: vw(240);
+					flex: 1;
+					border-radius: vw(5);
+					padding: 0 vw(16);
+					box-sizing: border-box;
+				}
+				.code-btn{
+					width: vw(50);
+					height: vw(50);
+					flex-shrink: 0;
+					margin-left: vw(10);
+					background: #F6F6F6;
+					border-radius: vw(5);
+					@include flex-x(center);
+				}
+			}
+
+			.dz {
+				margin-top: vw(10);
+			}
+
+			.btn {
+				@include solid-btn(335, 50, #ffffff, 25);
+				margin-top: vw(80);
+			}
+		}
+	}
+</style>

+ 555 - 0
src/packages/user/fund/want-buy.vue

@@ -0,0 +1,555 @@
+<template>
+	<view class="record-box">
+		<Navbar title="求购专区" background-color="#fff" color="#333"></NavBar>
+		<view class="container">
+			<view class="tabs">
+				<view class="tab" :class="{active: index === tabActive}" v-for="(item, index) in statusOptions"
+					@click="changeTab(item.value, index)" :key="item.value">
+					{{item.name}}
+					<view class="bar"></view>
+				</view>
+			</view>
+			<swiper class="swiper" @change="selectTab" :current="tabActive" :duration="300">
+				<swiper-item v-for="tab in statusOptions" :key="tab.value">
+					<view class="noData" v-if="!tab.list.length && !isLoading">
+						<image class="image" :src="img" mode="aspectFit"></image>
+						<text class="word16">暂无数据</text>
+					</view>
+					<scroll-view class="list" scroll-y @scrolltolower="scrolltolower">
+						<view class="item-box" v-for="item in tab.list" :key="item.id">
+							<view class="item">
+								<image :src="item.avatar" class="pic" mode="aspectFill"></image>
+								<view class="info">
+									<view class="name">
+										<view class="name-left">
+											<view class="nickname">
+												{{item.nickname}}
+											</view>
+											<!-- <view class="role">
+												{{roleMap[item.role]}}
+											</view> -->
+										</view>
+									</view>
+									<view class="id">
+										ID:{{item.uid}}
+									</view>
+									<view class="id">
+										联系电话:{{item.phone}}
+									</view>
+									<view class="id">
+										悦贝求购数量:<text>{{item.amount || ''}}</text>
+									</view>
+								</view>
+							</view>
+							<view class="btn-box" v-if="item.status === 0 && _userInfo.uid === item.uid">
+								<view class="btn btn1" @click="handleRevokeModal(item.id)">撤销</view>
+								<view class="btn" @click="handleConfirmModal(item.id)">完成</view>
+							</view>
+						</view>
+						<view class="tips" v-if="tab.list.length">
+							<text v-if="finish">没有更多了</text>
+							<text v-else>加载更多</text>
+						</view>
+					</scroll-view>
+				</swiper-item>
+			</swiper>
+			<view class="bottom">
+				<view class="btn" @click="handleQiugouModal">我要求购</view>
+			</view>
+		</view>
+		<uni-popup ref="qiugou" type="center">
+			<view class="show-modal">
+				<IconText class="close" @click.native="close" :code="`\ue847`" color="#999" size="10"></IconText>
+				<view class="title">发布悦贝求购信息</view>
+				<view class="popup-content">
+					<view class="input-box">
+						<view class="label">求购数量</view>
+						<input type="digit" v-model="amount">
+					</view>
+					<view class="input-box">
+						<view class="label">联系电话</view>
+						<input type="number" v-model="phone">
+					</view>
+				</view>
+				<view class="btn-box btn-styl">
+					<view class="btn cancel-btn" @click="close">取消</view>
+					<view class="btn" @click="handleQiugou">确认</view>
+				</view>
+			</view>
+		</uni-popup>
+		<ShowModal ref="revokePopup" title="提示" @submit="handleRevoke" leftBtnText="取消" content="确定要撤销吗" btnText="确认" />
+		<ShowModal ref="confirmPopup" title="提示" @submit="handleConfirm" leftBtnText="取消" content="确定要完成吗"
+			btnText="确认" />
+	</view>
+</template>
+
+<script lang='ts'>
+	import {
+		Component,
+		Vue,
+		Mixins
+	} from 'vue-property-decorator';
+	import loginMixin from '@/common/mixins/loginMixin.ts';
+	// import dayjs from 'dayjs';
+	@Component({})
+	export default class RechargeRecord extends Mixins(loginMixin) {
+		img: string = '';
+		list: any[] = [];
+		tabActive: number = 0;
+		status: number = 0;
+		isLoading: boolean = false;
+		size: number = 20;
+		current: number = 1;
+		finish: boolean = false;
+		amount: any = '';
+		phone: any = '';
+		id: any = null;
+
+		statusOptions: any[] = [{
+				name: '求购大厅',
+				value: 0,
+				list: []
+			},
+			{
+				name: '我的求购',
+				value: 1,
+				list: []
+			}
+		];
+
+		roleMap: any = {
+			0: '普通用户',
+			1: 'VIP',
+			2: '健康驿站',
+			3: '社区店',
+			4: '旗舰店',
+			5: '运营中心',
+			6: '分公司'
+		}
+
+		onLoad() {
+			let query = this.$Route.query;
+			this.tabActive = +query.index || 0;
+			this.getList();
+		}
+
+		changeTab(status: number, index: number) {
+			this.tabActive = index;
+			this.status = status;
+			// this.getList();
+		}
+
+		handleQiugouModal() {
+			(this.$refs.qiugou as any).open();
+		}
+
+		close() {
+			(this.$refs.qiugou as any).close();
+		}
+
+		handleRevokeModal(id: any) {
+			this.id = id;
+			(this.$refs.revokePopup as any).open();
+		}
+
+		handleRevoke() {
+			this.$http.delete({
+				url: this.$api.purchaseRevocation,
+				data: {
+					id: this.id
+				}
+			}).then((res: any) => {
+				uni.showToast({
+					title: '操作成功',
+					icon: 'none'
+				});
+				(this.$refs.qiugou as any).close();
+				this.reSet();
+			}).catch((err: any) => {
+				console.log(err);
+			})
+		}
+
+		handleConfirmModal(id: any) {
+			this.id = id;
+			(this.$refs.confirmPopup as any).open();
+		}
+
+		handleConfirm() {
+			this.$http.put({
+				url: this.$api.purchaseFinish,
+				data: {
+					id: this.id
+				}
+			}).then((res: any) => {
+				uni.showToast({
+					title: '操作成功',
+					icon: 'none'
+				});
+				(this.$refs.qiugou as any).close();
+				this.reSet();
+			}).catch((err: any) => {
+				console.log(err);
+			})
+		}
+
+		handleQiugou() {
+			this.$http.post({
+				url: this.$api.purchaseIssue,
+				data: {
+					amount: this.amount,
+					phone: this.phone
+				}
+			}).then((res: any) => {
+				uni.showToast({
+					title: '发布成功',
+					icon: 'none'
+				});
+				(this.$refs.qiugou as any).close();
+				this.reSet();
+			}).catch((err: any) => {
+				console.log(err);
+			})
+		}
+
+		selectTab(e: any) {
+			this.tabActive = e.detail.current;
+			this.status = this.statusOptions[this.tabActive].value;
+			// this.current = 1;
+			// this.finish = false;
+			// this.statusOptions[this.tabActive].list = [];
+			// this.getList();
+			this.reSet();
+		}
+
+		reSet() {
+			this.list = [];
+			this.statusOptions = [{
+					name: '求购大厅',
+					value: 0,
+					list: []
+				},
+				{
+					name: '我的求购',
+					value: 1,
+					list: []
+				}
+			];
+			this.current = 1;
+			this.finish = false;
+			this.getList();
+		}
+
+		//获取列表
+		getList() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.isLoading = true;
+			return this.$http.get({
+				url: this.$api.getPurchaseList,
+				data: {
+					self: Boolean(this.status),
+					size: this.size,
+					page: this.current
+				}
+			}).then((res: any) => {
+				// let list = [...this.statusOptions[this.tabActive].list];
+				// this.statusOptions[this.tabActive].list = [...list, ...res.list];
+				this.statusOptions[this.tabActive].list = [...this.statusOptions[this.tabActive].list, ...res
+					.list
+				];
+				this.statusOptions[this.tabActive].num = res.total;
+				if (res.list.length < this.size) this.finish = true;
+				this.isLoading = false;
+				uni.hideLoading();
+			}).catch(() => {
+				uni.hideLoading();
+				this.isLoading = false;
+			})
+		}
+		scrolltolower() {
+			if (this.isLoading || this.finish) return;
+			this.current++;
+			this.getList();
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.record-box {
+		height: 100vh;
+		@include flex-y();
+		background: #F6F6F6;
+
+		.container {
+			flex: 1;
+			width: 100%;
+			height: 100%;
+			box-sizing: border-box;
+			overflow-y: auto;
+			@include flex-y();
+
+			.tabs {
+				background: #fff;
+				margin-top: vw(1);
+				@include flex-x();
+				height: vw(45);
+				width: 100%;
+
+				.tab {
+					flex: 1;
+					text-align: center;
+					@include word-vw(16, #999);
+					height: vw(36);
+					@include flex-y(center, center);
+
+					&.active {
+						@include word-vw(16, #333);
+						font-weight: 450;
+						position: relative;
+
+						.bar {
+							width: vw(40);
+							height: vw(5);
+							border-radius: vw(5);
+							background: $btn-color;
+							position: absolute;
+							bottom: 0;
+						}
+					}
+				}
+			}
+
+			.swiper {
+				flex: 1;
+				width: 100%;
+			}
+
+			.list {
+				@include flex-y();
+				padding: 0 vw(10) vw(80);
+				box-sizing: border-box;
+				height: 100%;
+
+				.item-box {
+					@include flex-y(flex-start, flex-start);
+					margin-top: vw(10);
+					background: #fff;
+					/* height: vw(70); */
+					box-sizing: border-box;
+					border-radius: vw(10);
+				}
+
+				.item {
+					width: 100%;
+					@include flex-x(flex-start);
+					padding: vw(12) vw(10);
+
+					.pic {
+						width: vw(60);
+						height: vw(60);
+						border-radius: vw(30);
+					}
+
+					.info {
+						margin-left: vw(10);
+						flex: 1;
+					}
+
+					.name {
+						@include word-vw(15, #333);
+						@include flex-x();
+						font-weight: bold;
+
+						.role {
+							padding: 0 vw(8);
+							height: vw(16);
+							line-height: vw(16);
+							border-radius: vw(8);
+							background: #EDEDED;
+							margin-left: vw(8);
+							@include word-vw(10, #333);
+							font-weight: normal;
+						}
+
+						.name-left {
+							@include flex-x(flex-start);
+						}
+
+						.phone {
+							@include word-vw(12, #333);
+							font-weight: normal;
+						}
+					}
+
+					.id {
+						@include word-vw(12, #999);
+						@include flex-x(flex-start);
+						padding-right: vw(12);
+						margin-top: vw(5);
+
+						text {
+							@include word-vw(12, #333);
+						}
+					}
+				}
+
+				.btn-box {
+					width: 100%;
+					height: vw(48);
+					border-top: vw(1) solid #F0F0F0;
+					@include flex-x(flex-end);
+
+					.btn {
+						@include solid-btn(64, 30, #fff, 15);
+						margin-right: vw(12);
+						@include word-vw(12, #fff);
+						box-sizing: border-box;
+					}
+
+					.btn1 {
+						background: #fff;
+						@include word-vw(12, #333);
+						border: vw(1) solid #333;
+					}
+				}
+			}
+		}
+
+		.noData {
+			width: 100vw;
+			margin-top: vw(30);
+			@include flex-y(center, center);
+
+			.image {
+				width: vw(150);
+				height: vw(180);
+				margin-top: vw(30);
+			}
+
+			.word16 {
+				// margin-left: vw(20);
+				@include word-vw(14, #7B8184);
+			}
+		}
+
+		.tips {
+			width: 100vw;
+			text-align: center;
+			@include word-vw(12, $gray9);
+			margin-top: 10px;
+		}
+
+		.bottom {
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			height: vw(70);
+			background: #fff;
+			@include flex-x(center);
+
+			.btn {
+				@include flex-x(center);
+				@include solid-btn(335, 50, #fff, 25);
+			}
+		}
+	}
+
+	.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);
+		}
+
+		.popup-content {
+			width: 100%;
+			@include word-vw(14, #666);
+			margin-top: vw(12);
+			@include flex-y();
+		}
+
+		.input-box {
+			@include flex-x();
+			margin-top: vw(12);
+
+			.label {
+				margin-right: vw(12);
+				@include word-vw(14, #666);
+			}
+
+			input {
+				width: vw(180);
+				height: vw(45);
+				border-radius: vw(6);
+				background: #F6F6F6;
+				box-sizing: border-box;
+				padding: 0 vw(16);
+			}
+		}
+
+		.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(18);
+			margin-top: vw(16);
+			margin-bottom: vw(20);
+		}
+
+		.cancel-btn {
+			margin-right: 32px;
+			background: #EBEBEB;
+			@include word-vw(14, #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>

+ 486 - 0
src/packages/user/fund/withdraw-type.vue

@@ -0,0 +1,486 @@
+<template>
+	<view class="apply-box">
+		<Navbar title="收款账户" background-color="#fff" color="#333"></Navbar>
+		<view class="container">
+			<view class="type">
+				<view class="left">选择方式</view>
+				<view class="right" @click="handleSelect">
+					{{currentType ? typeMap[currentType] : '未选择'}}
+					<IconText :code="`\ue84a`" color="#999" class="icon" :size="12"></IconText>
+				</view>
+			</view>
+			<view class="code" v-if="currentType === 1 || currentType === 2">
+				<view class="img-box">
+					<image :src="pic" class="img" mode="widthFix" v-if="pic" @click="chooseImg"></image>
+					<view class="empty-img" v-else @click="chooseImg">
+						上传收款码图片
+					</view>
+				</view>
+				<view class="item">
+					姓名:
+					<input type="text" v-model="name" placeholder="点击输入姓名" class="input">
+				</view>
+			</view>
+			<view class="card" v-if="currentType === 3">
+				<input type="number" class="card-num" v-model="card" placeholder="点击输入银行卡号">
+				<view class="info">
+					<view class="item">
+						开户行:
+						<input type="text" v-model="bank" placeholder="点击输入开户行" class="input">
+					</view>
+					<view class="item">
+						姓名:
+						<input type="text" v-model="name" placeholder="点击输入姓名" class="input">
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="bottom-btn-box">
+			<view class="bottom-btn" @click="handleWithdraw">确认提交</view>
+		</view>
+		<uni-popup ref="type" type="center" :safe-area="false">
+			<view class="select-type">
+				<view class="title">
+					选择方式
+				</view>
+				<view class="type-list">
+					<view class="item" v-for="item in typeList" :key="item.value" @click="changeType(item.value)">
+						<view class="name">
+							<IconText :code="item.icon" class="icon" :size='item.size' :color="item.color"></IconText>
+							{{item.label}}
+						</view>
+						<!-- <view class="" v-if="item.value === type"> -->
+						<IconText :code="`\ue879`" :color="item.value === type ? '#E33C64' : '#DEDEDE'" class="icon"
+							:size="16"></IconText>
+						<!-- </view> -->
+					</view>
+				</view>
+				<view class="btn-box" @click="confirmSelect">
+					确定
+				</view>
+			</view>
+		</uni-popup>
+		<Password ref="password" @finish="passwordFinish"></Password>
+	</view>
+</template>
+
+<script lang="ts">
+	import {
+		Component,
+		Vue
+	} from 'vue-property-decorator';
+	import {
+		OSS_STATIC
+	} from '@/common/constants';
+	import {
+		namespace,
+	} from 'vuex-class';
+	import {
+		types
+	} from '@/common/store';
+	const baseModule = namespace('base');
+	@Component({
+		filters: {
+			cardFormat(val: any) {
+				if (!+val) return '****';
+				let format = val.substring(val.length - 4);
+				return '****' + format;
+			}
+		}
+	})
+	export default class Apply extends Vue {
+		@baseModule.Mutation(types.SET_USERINFO) setUserInfo: any;
+		@baseModule.Getter('_userInfo') userInfo: any;
+		static: string = OSS_STATIC;
+		num: any = null;
+		type: any = null;
+		codePic: string = "";
+		info: any = {};
+		currentType: any = null;
+		charges: any = 0;
+		typeList: any = [{
+				label: '微信收款',
+				value: 1,
+				icon: `\ue84c`,
+				color: '#09BB07',
+				size: '17'
+			},
+			{
+				label: '支付宝收款',
+				value: 2,
+				icon: `\ue688`,
+				color: '#5A9EF7',
+				size: '20'
+			},
+			{
+				label: '银行卡收款',
+				value: 3,
+				icon: `\ue747`,
+				color: '#F2CB51'
+			}
+		];
+		typeMap: any = {
+			1: '微信收款',
+			2: '支付宝收款',
+			3: '银行卡收款'
+		};
+		balance: any = null;
+		bank: any = '';
+		name: any = '';
+		card: any = '';
+		pic: any = '';
+		onLoad() {
+			uni.setNavigationBarColor({
+				frontColor: '#000000', //文字颜色
+				backgroundColor: '#000000' //底部背景色
+			});
+			this.currentType = +uni.getStorageSync('currentType') || null;
+		}
+		onShow() {
+			this.getInfo();
+			// this.getBalance();
+		}
+		getInfo() {
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http.get({
+				url: this.$api.getWithdrawInfo,
+				data: {}
+			}).then((res: any) => {
+				uni.hideLoading();
+				this.info = res.info.sellUser;
+				console.log(this.currentType, 123)
+				if (this.currentType === 1) {
+					this.name = this.info.wx_name;
+					this.pic = this.info.wx_pic;
+				} else if (this.currentType === 2) {
+					this.name = this.info.zfb_name;
+					this.pic = this.info.zfb_pic;
+				} else if (this.currentType === 3) {
+					this.name = this.info.bank_name;
+					this.bank = this.info.bank;
+					this.card = this.info.bank_card;
+				}
+			})
+		}
+		changeType(type: any) {
+			this.type = type;
+		}
+		setInfo(type: any) {
+			if (type === 1) {
+				this.name = this.info.wx_name;
+				this.pic = this.info.wx_pic;
+			} else if (type === 2) {
+				this.name = this.info.zfb_name;
+				this.pic = this.info.zfb_pic;
+			} else if (type === 3) {
+				this.name = this.info.bank_name;
+				this.bank = this.info.bank;
+				this.card = this.info.bank_card;
+			}
+		}
+		confirmSelect() {
+			this.currentType = this.type;
+			this.setInfo(this.currentType);
+			(this.$refs.type as any).close();
+		}
+		handleSelect() {
+			this.type = this.currentType;
+			(this.$refs.type as any).open('bottom');
+		}
+		chooseImg() {
+			// 选择图库图片
+			uni.chooseImage({
+				sourceType: ['album'],
+				count: 1,
+				success: (res: any) => {
+					this.$http
+						.upPic({
+							filePath: res.tempFilePaths[0]
+						}).then((res: any) => {
+							this.pic = res;
+						})
+				}
+			})
+		}
+		handleWithdraw() {
+			let data: any = {
+				classify: this.currentType,
+				name: this.name
+			};
+			if (this.currentType === 1) {
+				data.wxPic = this.pic;
+			} else if (this.currentType === 2) {
+				data.zfbPic = this.pic;
+			} else if (this.currentType === 3) {
+				data.bankCard = this.card;
+				data.bank = this.bank;
+			}
+			// this.$Router.back(1);
+			// uni.showToast({
+			// 	icon: 'none',
+			// 	title: '设置成功'
+			// });
+			// return;
+			uni.showLoading({
+				title: '加载中',
+			});
+			this.$http.post({
+				url: this.$api.addWithdraw,
+				data: data
+			}).then((res: any) => {
+				uni.hideLoading();
+				uni.setStorageSync('currentType', this.currentType);
+				this.$Router.back(1);
+				uni.showToast({
+					icon: 'none',
+					title: '设置成功'
+				});
+			})
+		}
+		toRecord() {
+			this.$Router.push({
+				path: '/pages/withdraw/record',
+			})
+		}
+		toCard() {
+			this.$Router.push({
+				path: '/pages/withdraw/card',
+			})
+		}
+		updateCard() {
+			this.$Router.push({
+				path: '/pages/withdraw/card',
+				query: {
+					card: this.info.bank_card,
+					bank: this.info.bank,
+					name: this.info.bank_name
+				}
+			})
+		}
+		toCode() {
+			this.$Router.push({
+				path: '/pages/withdraw/code',
+				query: {
+					type: this.currentType,
+					name: this.name,
+					pic: this.codePic
+				}
+			})
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.apply-box {
+		background: #F8F8F8;
+		min-height: 100vh;
+		padding-bottom: vw(80);
+		box-sizing: border-box;
+
+		.container {
+			width: 100%;
+			padding: 0 vw(10);
+			@include flex-y();
+			box-sizing: border-box;
+		}
+
+		.type {
+			height: vw(64);
+			width: 100%;
+			margin-top: vw(10);
+			background: #fff;
+			border-radius: vw(5);
+			padding: 0 vw(14);
+			box-sizing: border-box;
+			@include flex-x(space-between);
+
+			.left {
+				@include word-vw(16, #333);
+				font-weight: 600;
+			}
+
+			.right {
+				@include word-vw(16, #999);
+				@include flex-x();
+
+				.icon {
+					margin-left: vw(3);
+				}
+			}
+		}
+
+		.code {
+			width: 100%;
+			@include flex-y();
+			// background: #fff;
+			margin-top: vw(10);
+			border-radius: vw(10);
+
+			.img {
+				width: vw(240);
+				height: vw(240);
+			}
+
+			.empty-img {
+				width: vw(240);
+				height: vw(240);
+				@include flex-x(center);
+				background: #E8E8E8;
+				@include word-vw(14, #333);
+			}
+
+			.tip {
+				@include word-vw(12, #999);
+				text-align: center;
+				margin-top: vw(12);
+			}
+
+			.img-box {
+				width: vw(345);
+				height: vw(320);
+				background: #fff;
+				@include flex-y(center);
+				border-radius: vw(10);
+			}
+
+			.item {
+				width: 100%;
+				background: #fff;
+				padding: 0 vw(15);
+				box-sizing: border-box;
+				height: vw(66);
+				margin-bottom: vw(1);
+				@include flex-x(space-between);
+				@include word-vw(15, #999);
+				margin-top: vw(10);
+
+				.input {
+					width: vw(200);
+					height: vw(50);
+					background: #EFEFEF;
+					border-radius: vw(5);
+					box-sizing: border-box;
+					padding: 0 vw(15);
+					text-align: center;
+				}
+			}
+		}
+
+		.card {
+			width: 100%;
+
+			.card-num {
+				width: vw(345);
+				height: vw(100);
+				line-height: vw(150);
+				background: #fff;
+				margin-top: vw(10);
+				font-size: vw(30);
+				padding: 0 vw(20);
+				box-sizing: border-box;
+			}
+
+			.info {
+				margin-top: vw(10);
+				width: 100%;
+
+				.item {
+					width: 100%;
+					background: #fff;
+					padding: 0 vw(15);
+					box-sizing: border-box;
+					height: vw(66);
+					margin-bottom: vw(1);
+					@include flex-x(space-between);
+					@include word-vw(15, #999);
+
+					.input {
+						width: vw(200);
+						height: vw(50);
+						background: #EFEFEF;
+						border-radius: vw(5);
+						box-sizing: border-box;
+						padding: 0 vw(15);
+						text-align: center;
+					}
+				}
+			}
+		}
+
+		.bottom-btn-box {
+			height: vw(70);
+			width: 100%;
+			background: #fff;
+			@include flex-x(center);
+			position: fixed;
+			bottom: 0;
+
+			.bottom-btn {
+				width: vw(335);
+				height: vw(50);
+				background: #035698;
+				border-radius: vw(10);
+				@include word-vw(16, #fff);
+				@include flex-x(center);
+			}
+		}
+	}
+
+	.select-type {
+		height: vw(400);
+		background: #FAFAFA;
+		border-top-left-radius: vw(34);
+		border-top-right-radius: vw(34);
+		@include flex-y();
+
+		.title {
+			height: vw(60);
+			line-height: vw(60);
+			text-align: center;
+			@include word-vw(18, #333);
+			margin-top: vw(16);
+			font-weight: bold;
+		}
+
+		.type-list {
+			// flex: 1;
+			width: 100%;
+			@include flex-y(center);
+			border-radius: vw(10);
+			overflow: hidden;
+			margin-top: vw(6);
+
+			.item {
+				height: vw(60);
+				background: #fff;
+				width: vw(355);
+				padding: 0 vw(24);
+				box-sizing: border-box;
+				@include flex-x(space-between);
+				margin-bottom: vw(1);
+				@include word-vw(14, #333);
+
+				.name {
+					@include flex-x(flex-start);
+
+					.icon {
+						margin-right: vw(6);
+					}
+				}
+			}
+		}
+
+		.btn-box {
+			width: 100%;
+			height: vw(50);
+			width: vw(335);
+			@include flex-x(center);
+			// border-top: vw(1) solid #DEDEDE;
+			margin-top: vw(50);
+			background: #035698;
+			border-radius: vw(10);
+			@include word-vw(16, #fff);
+		}
+	}
+</style>

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