Browse Source

初始化

347617796@qq.com 3 years ago
parent
commit
85d886f90b
100 changed files with 34224 additions and 0 deletions
  1. 3 0
      .browserslistrc
  2. 4 0
      .env.development
  3. 6 0
      .env.production
  4. 17 0
      .eslintrc.js
  5. 22 0
      .gitignore
  6. 5 0
      babel.config.js
  7. 15394 0
      package-lock.json
  8. 51 0
      package.json
  9. BIN
      public/favicon.ico
  10. 20 0
      public/index.html
  11. 19 0
      src/App.vue
  12. 151 0
      src/api/auth.js
  13. 108 0
      src/api/axios.js
  14. 101 0
      src/api/websocket.js
  15. 62 0
      src/assets/css/iconfont.css
  16. 0 0
      src/assets/css/iconfont.js
  17. 86 0
      src/assets/css/iconfont.json
  18. BIN
      src/assets/css/iconfont.ttf
  19. BIN
      src/assets/css/iconfont.woff
  20. BIN
      src/assets/css/iconfont.woff2
  21. 333 0
      src/assets/css/reset.css
  22. BIN
      src/assets/image/APP2.png
  23. BIN
      src/assets/image/a_apply.png
  24. BIN
      src/assets/image/app1.png
  25. BIN
      src/assets/image/code.png
  26. BIN
      src/assets/image/entry_list.png
  27. BIN
      src/assets/image/init.gif
  28. BIN
      src/assets/image/kq1.png
  29. BIN
      src/assets/image/kq2.png
  30. BIN
      src/assets/image/logo.png
  31. BIN
      src/assets/image/my_publish.png
  32. BIN
      src/assets/image/nodata.png
  33. BIN
      src/assets/image/nodata_default.png
  34. BIN
      src/assets/image/noperson_default.png
  35. BIN
      src/assets/image/one.png
  36. BIN
      src/assets/image/pc.png
  37. BIN
      src/assets/image/performance.png
  38. BIN
      src/assets/image/prizeBuckle.png
  39. BIN
      src/assets/image/rules_mould.png
  40. BIN
      src/assets/image/rules_mould1.png
  41. BIN
      src/assets/image/statistics_NO1.png
  42. BIN
      src/assets/image/statistics_NO2.png
  43. BIN
      src/assets/image/statistics_NO3.png
  44. BIN
      src/assets/image/task.png
  45. BIN
      src/assets/image/task_hall.png
  46. BIN
      src/assets/image/two.png
  47. BIN
      src/assets/image/tz.png
  48. BIN
      src/assets/image/wn.png
  49. BIN
      src/assets/image/zq.png
  50. 754 0
      src/components/EmployeeSelector.vue
  51. 86 0
      src/components/Steps.vue
  52. 268 0
      src/components/Suggest.vue
  53. 43 0
      src/components/SvgIcon/index.vue
  54. 97 0
      src/components/UserImage.vue
  55. 110 0
      src/components/VirtualList.vue
  56. 819 0
      src/components/applicationIntegrationPopup.vue
  57. 954 0
      src/components/bonusPointsPopup.vue
  58. 777 0
      src/components/examinePopup.vue
  59. 54 0
      src/components/noData.vue
  60. 163 0
      src/components/publics/workpoints.vue
  61. 179 0
      src/components/season.vue
  62. 164 0
      src/components/toLead.vue
  63. 214 0
      src/components/upload.vue
  64. 38 0
      src/dome.vue
  65. 129 0
      src/hint.vue
  66. 1758 0
      src/home.vue
  67. 9 0
      src/icons/index.js
  68. 0 0
      src/icons/svg/approval_process.svg
  69. 1 0
      src/icons/svg/droparrows.svg
  70. 1 0
      src/icons/svg/first.svg
  71. 2 0
      src/icons/svg/leadErrRed.svg
  72. 2 0
      src/icons/svg/leadJgRed.svg
  73. 2 0
      src/icons/svg/leadThenGreen.svg
  74. 1 0
      src/icons/svg/litrearrows.svg
  75. 1 0
      src/icons/svg/secondPlace.svg
  76. 1 0
      src/icons/svg/third.svg
  77. 479 0
      src/index.vue
  78. 363 0
      src/inform.vue
  79. 148 0
      src/init.vue
  80. 134 0
      src/main.js
  81. 30 0
      src/noAccess.vue
  82. 403 0
      src/router/index.js
  83. 22 0
      src/store/index.js
  84. 411 0
      src/views/abPoint/apply_list.vue
  85. 550 0
      src/views/abPoint/award_punish.vue
  86. 257 0
      src/views/common/repeatTaskDetailsPopup.vue
  87. 689 0
      src/views/common/rewardTask.vue
  88. 773 0
      src/views/common/rewardTaskAmend.vue
  89. 272 0
      src/views/common/rewardTaskDetailsPopup.vue
  90. 609 0
      src/views/common/taskDetailsPopup.vue
  91. 625 0
      src/views/common/temporaryTask.vue
  92. 650 0
      src/views/common/temporaryTaskAmend.vue
  93. 415 0
      src/views/ranking/attendance_rating.vue
  94. 303 0
      src/views/ranking/balanceA.vue
  95. 1172 0
      src/views/ranking/custom_rank.vue
  96. 856 0
      src/views/ranking/department_statistics.vue
  97. 158 0
      src/views/ranking/deptRankSwiper.vue
  98. 818 0
      src/views/ranking/dept_rank.vue
  99. 46 0
      src/views/ranking/each_rank.vue
  100. 1032 0
      src/views/ranking/individual_statistics.vue

+ 3 - 0
.browserslistrc

@@ -0,0 +1,3 @@
+> 1%
+last 2 versions
+not dead

+ 4 - 0
.env.development

@@ -0,0 +1,4 @@
+NODE_ENV="development"
+VUE_APP_BASE_API="https://test-ding.g107.com/"
+VUE_APP_APPID="50530"
+VUE_APP_WEBSCOKET="test-ding.g107.com"

+ 6 - 0
.env.production

@@ -0,0 +1,6 @@
+NODE_ENV="production"
+VUE_APP_BASE_API="https://ding.insys.g107.com/"
+VUE_APP_APPID="55493"
+VUE_APP_WEBSCOKET="ding.insys.g107.com"
+
+

+ 17 - 0
.eslintrc.js

@@ -0,0 +1,17 @@
+module.exports = {
+  root: true,
+  env: {
+    node: true
+  },
+  // 'extends': [
+  //   'plugin:vue/essential',
+  //   'eslint:recommended'
+  // ],
+  parserOptions: {
+    parser: 'babel-eslint'
+  },
+  rules: {
+    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
+  }
+}

+ 22 - 0
.gitignore

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

+ 5 - 0
babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/cli-plugin-babel/preset'
+  ]
+}

+ 15394 - 0
package-lock.json

@@ -0,0 +1,15394 @@
+{
+  "name": "ddpc",
+  "version": "0.1.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@babel/code-frame": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.12.13.tgz?cache=0&sync_timestamp=1612314620252&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.12.13.tgz",
+      "integrity": "sha1-3PyCa+72XnXFDiHTg319lXmN1lg=",
+      "dev": true,
+      "requires": {
+        "@babel/highlight": "^7.12.13"
+      }
+    },
+    "@babel/compat-data": {
+      "version": "7.14.0",
+      "resolved": "https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.14.0.tgz?cache=0&sync_timestamp=1619727645372&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcompat-data%2Fdownload%2F%40babel%2Fcompat-data-7.14.0.tgz",
+      "integrity": "sha1-qQESi84q0CVl35Xm7L8ZXPlGWRk=",
+      "dev": true
+    },
+    "@babel/core": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/core/download/@babel/core-7.14.2.tgz?cache=0&sync_timestamp=1620839401293&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.14.2.tgz",
+      "integrity": "sha1-VORTNP/AFyBI5ck97TZGHTrUxBc=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.12.13",
+        "@babel/generator": "^7.14.2",
+        "@babel/helper-compilation-targets": "^7.13.16",
+        "@babel/helper-module-transforms": "^7.14.2",
+        "@babel/helpers": "^7.14.0",
+        "@babel/parser": "^7.14.2",
+        "@babel/template": "^7.12.13",
+        "@babel/traverse": "^7.14.2",
+        "@babel/types": "^7.14.2",
+        "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": {
+        "debug": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
+          "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+          "dev": true
+        }
+      }
+    },
+    "@babel/generator": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.14.2.tgz?cache=0&sync_timestamp=1620840046555&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.14.2.tgz",
+      "integrity": "sha1-1Xc+i1V9Qh/Wzg1e+l/X/CJWfDA=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.2",
+        "jsesc": "^2.5.1",
+        "source-map": "^0.5.0"
+      }
+    },
+    "@babel/helper-annotate-as-pure": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.12.13.tgz?cache=0&sync_timestamp=1612314684390&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.12.13.tgz",
+      "integrity": "sha1-D1jobfxLs7H819uAZXDhd9Q5tqs=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.12.13"
+      }
+    },
+    "@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz?cache=0&sync_timestamp=1612314819975&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor%2Fdownload%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor-7.12.13.tgz",
+      "integrity": "sha1-a8IDYciLCnTQUTemXKyNPL9vYfw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-explode-assignable-expression": "^7.12.13",
+        "@babel/types": "^7.12.13"
+      }
+    },
+    "@babel/helper-compilation-targets": {
+      "version": "7.13.16",
+      "resolved": "https://registry.nlark.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.13.16.tgz?cache=0&sync_timestamp=1618918283860&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.13.16.tgz",
+      "integrity": "sha1-bpHczxXj9D5VVt/+MthgEJiHVjw=",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.13.15",
+        "@babel/helper-validator-option": "^7.12.17",
+        "browserslist": "^4.14.5",
+        "semver": "^6.3.0"
+      }
+    },
+    "@babel/helper-create-class-features-plugin": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.14.2.tgz?cache=0&sync_timestamp=1620839398628&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-create-class-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-class-features-plugin-7.14.2.tgz",
+      "integrity": "sha1-TkVbAymvKcLTrSVLXdWu00WVOF0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.12.13",
+        "@babel/helper-function-name": "^7.14.2",
+        "@babel/helper-member-expression-to-functions": "^7.13.12",
+        "@babel/helper-optimise-call-expression": "^7.12.13",
+        "@babel/helper-replace-supers": "^7.13.12",
+        "@babel/helper-split-export-declaration": "^7.12.13"
+      }
+    },
+    "@babel/helper-create-regexp-features-plugin": {
+      "version": "7.12.17",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.12.17.tgz",
+      "integrity": "sha1-oqyH6eMZJprGVbjUQV6U041mPLc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.12.13",
+        "regexpu-core": "^4.7.1"
+      }
+    },
+    "@babel/helper-define-polyfill-provider": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.2.0.tgz",
+      "integrity": "sha1-pkAFF3IEX+2q7MbwxsafAr3TS/E=",
+      "dev": true,
+      "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": {
+        "debug": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
+          "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+          "dev": true
+        }
+      }
+    },
+    "@babel/helper-explode-assignable-expression": {
+      "version": "7.13.0",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.13.0.tgz?cache=0&sync_timestamp=1614034233759&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-explode-assignable-expression%2Fdownload%2F%40babel%2Fhelper-explode-assignable-expression-7.13.0.tgz",
+      "integrity": "sha1-F7XFn/Rz2flW9A71cM86dsoSZX8=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.13.0"
+      }
+    },
+    "@babel/helper-function-name": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/helper-function-name/download/@babel/helper-function-name-7.14.2.tgz?cache=0&sync_timestamp=1620839396154&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.14.2.tgz",
+      "integrity": "sha1-OXaItZB2C273cltfCGDIJCfrqsI=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-get-function-arity": "^7.12.13",
+        "@babel/template": "^7.12.13",
+        "@babel/types": "^7.14.2"
+      }
+    },
+    "@babel/helper-get-function-arity": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.12.13.tgz?cache=0&sync_timestamp=1612314652298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.12.13.tgz",
+      "integrity": "sha1-vGNFHUA6OzCCuX4diz/lvUCR5YM=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.12.13"
+      }
+    },
+    "@babel/helper-hoist-variables": {
+      "version": "7.13.16",
+      "resolved": "https://registry.nlark.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.13.16.tgz",
+      "integrity": "sha1-GxZRJJ6UtR+PDTNDmEPjPjl3WzA=",
+      "dev": true,
+      "requires": {
+        "@babel/traverse": "^7.13.15",
+        "@babel/types": "^7.13.16"
+      }
+    },
+    "@babel/helper-member-expression-to-functions": {
+      "version": "7.13.12",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.13.12.tgz?cache=0&sync_timestamp=1616428111276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.13.12.tgz",
+      "integrity": "sha1-3+No8m1CagcpnY1lE4IXaCFubXI=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.13.12"
+      }
+    },
+    "@babel/helper-module-imports": {
+      "version": "7.13.12",
+      "resolved": "https://registry.nlark.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.13.12.tgz?cache=0&sync_timestamp=1618846791460&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.13.12.tgz",
+      "integrity": "sha1-xqNppvNiHLJdoBQHhoTakZa2GXc=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.13.12"
+      }
+    },
+    "@babel/helper-module-transforms": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.14.2.tgz?cache=0&sync_timestamp=1620839398699&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.14.2.tgz",
+      "integrity": "sha1-rBzDDuR7lF4+DE2xL6DFOJUJ3+U=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.13.12",
+        "@babel/helper-replace-supers": "^7.13.12",
+        "@babel/helper-simple-access": "^7.13.12",
+        "@babel/helper-split-export-declaration": "^7.12.13",
+        "@babel/helper-validator-identifier": "^7.14.0",
+        "@babel/template": "^7.12.13",
+        "@babel/traverse": "^7.14.2",
+        "@babel/types": "^7.14.2"
+      }
+    },
+    "@babel/helper-optimise-call-expression": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.12.13.tgz?cache=0&sync_timestamp=1612314687212&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.12.13.tgz",
+      "integrity": "sha1-XALRcbTIYVsecWP4iMHIHDCiquo=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.12.13"
+      }
+    },
+    "@babel/helper-plugin-utils": {
+      "version": "7.13.0",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.13.0.tgz",
+      "integrity": "sha1-gGUmzhJa7QM3O8QWqCgyHjpqM68=",
+      "dev": true
+    },
+    "@babel/helper-remap-async-to-generator": {
+      "version": "7.13.0",
+      "resolved": "https://registry.nlark.com/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.13.0.tgz",
+      "integrity": "sha1-N2p2DZ97SyB3qd0Fqpw5J8rbIgk=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.12.13",
+        "@babel/helper-wrap-function": "^7.13.0",
+        "@babel/types": "^7.13.0"
+      }
+    },
+    "@babel/helper-replace-supers": {
+      "version": "7.13.12",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.13.12.tgz?cache=0&sync_timestamp=1616428060118&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.13.12.tgz",
+      "integrity": "sha1-ZEL0wa2RJQJIGlZKc4beDHf/OAQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-member-expression-to-functions": "^7.13.12",
+        "@babel/helper-optimise-call-expression": "^7.12.13",
+        "@babel/traverse": "^7.13.0",
+        "@babel/types": "^7.13.12"
+      }
+    },
+    "@babel/helper-simple-access": {
+      "version": "7.13.12",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.13.12.tgz?cache=0&sync_timestamp=1616428063009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.13.12.tgz",
+      "integrity": "sha1-3WxTivthgZ0gWgEsMXkqOcel6vY=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.13.12"
+      }
+    },
+    "@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.12.1.tgz",
+      "integrity": "sha1-Ri3GOn5DWt6EaDhcY9K4TM5LPL8=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.12.1"
+      }
+    },
+    "@babel/helper-split-export-declaration": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.12.13.tgz?cache=0&sync_timestamp=1612314686094&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.12.13.tgz",
+      "integrity": "sha1-6UML4AuvPoiw4T5vnU6vITY3KwU=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.12.13"
+      }
+    },
+    "@babel/helper-validator-identifier": {
+      "version": "7.14.0",
+      "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.14.0.tgz?cache=0&sync_timestamp=1619727412592&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.14.0.tgz",
+      "integrity": "sha1-0mytikfGUoaxXfFUcxml0Lzycog=",
+      "dev": true
+    },
+    "@babel/helper-validator-option": {
+      "version": "7.12.17",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-option/download/@babel/helper-validator-option-7.12.17.tgz",
+      "integrity": "sha1-0fvwEuGnm37rv9xtJwuq+NnrmDE=",
+      "dev": true
+    },
+    "@babel/helper-wrap-function": {
+      "version": "7.13.0",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.13.0.tgz?cache=0&sync_timestamp=1614034233760&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.13.0.tgz",
+      "integrity": "sha1-vbXGb9qFJuwjWriUrVOhI1x5/MQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "^7.12.13",
+        "@babel/template": "^7.12.13",
+        "@babel/traverse": "^7.13.0",
+        "@babel/types": "^7.13.0"
+      }
+    },
+    "@babel/helpers": {
+      "version": "7.14.0",
+      "resolved": "https://registry.nlark.com/@babel/helpers/download/@babel/helpers-7.14.0.tgz?cache=0&sync_timestamp=1619727432208&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.14.0.tgz",
+      "integrity": "sha1-6ptr6UeKE9b5Ydu182v3Xi87j2I=",
+      "dev": true,
+      "requires": {
+        "@babel/template": "^7.12.13",
+        "@babel/traverse": "^7.14.0",
+        "@babel/types": "^7.14.0"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.14.0",
+      "resolved": "https://registry.nlark.com/@babel/highlight/download/@babel/highlight-7.14.0.tgz?cache=0&sync_timestamp=1619727182056&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.14.0.tgz",
+      "integrity": "sha1-MZfjdXEe9r+DTmfQ2uyI5PRhE88=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-validator-identifier": "^7.14.0",
+        "chalk": "^2.0.0",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.14.2.tgz",
+      "integrity": "sha1-DBaAqkStRgWxbL3MXDQaYb3px0Y=",
+      "dev": true
+    },
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.13.12",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz",
+      "integrity": "sha1-o0hNhNC1SfP8kWuZ7keD8m+rrSo=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
+        "@babel/plugin-proposal-optional-chaining": "^7.13.12"
+      }
+    },
+    "@babel/plugin-proposal-async-generator-functions": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.14.2.tgz?cache=0&sync_timestamp=1620839417583&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-async-generator-functions%2Fdownload%2F%40babel%2Fplugin-proposal-async-generator-functions-7.14.2.tgz",
+      "integrity": "sha1-OiCFq79dX5YtSA28gTRzhe1i6x4=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-remap-async-to-generator": "^7.13.0",
+        "@babel/plugin-syntax-async-generators": "^7.8.4"
+      }
+    },
+    "@babel/plugin-proposal-class-properties": {
+      "version": "7.13.0",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.13.0.tgz?cache=0&sync_timestamp=1614035098704&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.13.0.tgz",
+      "integrity": "sha1-FGN2AAuU79AB5XpAqIpSWvqrnzc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.13.0",
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-proposal-class-static-block": {
+      "version": "7.13.11",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.13.11.tgz?cache=0&sync_timestamp=1619727669793&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-class-static-block%2Fdownload%2F%40babel%2Fplugin-proposal-class-static-block-7.13.11.tgz",
+      "integrity": "sha1-b8u6SpYnAsF+U3Ggx7Oa/eGG1wM=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-class-static-block": "^7.12.13"
+      }
+    },
+    "@babel/plugin-proposal-decorators": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.14.2.tgz?cache=0&sync_timestamp=1620839996248&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-decorators%2Fdownload%2F%40babel%2Fplugin-proposal-decorators-7.14.2.tgz",
+      "integrity": "sha1-5ow8XkpqCINEVlaCVvw+cbk1kM8=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.14.2",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-decorators": "^7.12.13"
+      }
+    },
+    "@babel/plugin-proposal-dynamic-import": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.14.2.tgz",
+      "integrity": "sha1-Aeur18OBz/Ix+kPjApOaneW+nZ8=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-export-namespace-from": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.14.2.tgz",
+      "integrity": "sha1-YlQvlKqc6Pbbp57saYryIRIlN5E=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-json-strings": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.14.2.tgz?cache=0&sync_timestamp=1620840046817&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-json-strings%2Fdownload%2F%40babel%2Fplugin-proposal-json-strings-7.14.2.tgz",
+      "integrity": "sha1-gwtOJCanguiyh4+/4suoW3DL+Yw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-json-strings": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-logical-assignment-operators": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.14.2.tgz",
+      "integrity": "sha1-IiNIwIChZ44OdOpj/nbydYgtH9c=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+      }
+    },
+    "@babel/plugin-proposal-nullish-coalescing-operator": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz",
+      "integrity": "sha1-QlsR3GL8JpOaKrQsu6aAvfVzRUY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-numeric-separator": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.14.2.tgz?cache=0&sync_timestamp=1620839422175&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-numeric-separator%2Fdownload%2F%40babel%2Fplugin-proposal-numeric-separator-7.14.2.tgz",
+      "integrity": "sha1-grTMBlcRQ/r1BiYQSzNd1xuqT54=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+      }
+    },
+    "@babel/plugin-proposal-object-rest-spread": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.14.2.tgz?cache=0&sync_timestamp=1620840046672&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.14.2.tgz",
+      "integrity": "sha1-4X1Bj4HMED/t1M4DfhgcgFYiWrw=",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.14.0",
+        "@babel/helper-compilation-targets": "^7.13.16",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-transform-parameters": "^7.14.2"
+      }
+    },
+    "@babel/plugin-proposal-optional-catch-binding": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.14.2.tgz",
+      "integrity": "sha1-FQ1OWOUlsWqaFDG9UybE7thw1xc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-optional-chaining": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.14.2.tgz?cache=0&sync_timestamp=1620839998724&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-optional-chaining%2Fdownload%2F%40babel%2Fplugin-proposal-optional-chaining-7.14.2.tgz",
+      "integrity": "sha1-34FxqLnEPr9MHavmMRtDLYPhs04=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-private-methods": {
+      "version": "7.13.0",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.13.0.tgz?cache=0&sync_timestamp=1614035100398&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-private-methods%2Fdownload%2F%40babel%2Fplugin-proposal-private-methods-7.13.0.tgz",
+      "integrity": "sha1-BL1MbUD25rv6L1fi2AlLrZAO94c=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.13.0",
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-proposal-private-property-in-object": {
+      "version": "7.14.0",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.14.0.tgz?cache=0&sync_timestamp=1619727655656&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.14.0.tgz",
+      "integrity": "sha1-saHyAwWGudNInMJhedLrWIMndjY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.12.13",
+        "@babel/helper-create-class-features-plugin": "^7.14.0",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.0"
+      }
+    },
+    "@babel/plugin-proposal-unicode-property-regex": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.12.13.tgz",
+      "integrity": "sha1-vr3lEzm+gpwXqqrO0YZB3rYrObo=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@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=",
+      "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",
+      "integrity": "sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-syntax-class-static-block": {
+      "version": "7.12.13",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.12.13.tgz?cache=0&sync_timestamp=1619727671263&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-class-static-block%2Fdownload%2F%40babel%2Fplugin-syntax-class-static-block-7.12.13.tgz",
+      "integrity": "sha1-jj1nSwYT5nl1zqwndsl7YMr8XJw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-syntax-decorators": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.12.13.tgz?cache=0&sync_timestamp=1612314725413&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-decorators%2Fdownload%2F%40babel%2Fplugin-syntax-decorators-7.12.13.tgz",
+      "integrity": "sha1-+sgpvzx+9KG8kWJXtAPljGva9kg=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.3"
+      }
+    },
+    "@babel/plugin-syntax-json-strings": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz",
+      "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-jsx": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.12.13.tgz",
+      "integrity": "sha1-BE+4HrrWaY/mLEeIdVdby7m3DxU=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-syntax-logical-assignment-operators": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+      "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-nullish-coalescing-operator": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+      "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.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?cache=0&sync_timestamp=1593521788128&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-numeric-separator%2Fdownload%2F%40babel%2Fplugin-syntax-numeric-separator-7.10.4.tgz",
+      "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-object-rest-spread": {
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-private-property-in-object": {
+      "version": "7.14.0",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.0.tgz",
+      "integrity": "sha1-dipLq+xhF2/sbIhIDexANysUDAs=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-syntax-top-level-await": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.12.13.tgz",
+      "integrity": "sha1-xfD6biSfW3OXJ/kjVAz3qAYTAXg=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-arrow-functions": {
+      "version": "7.13.0",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.13.0.tgz",
+      "integrity": "sha1-EKWb661S1jegJ6+mkujVzv9ePa4=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-transform-async-to-generator": {
+      "version": "7.13.0",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.13.0.tgz",
+      "integrity": "sha1-jhEr9ncbgr8el05eJoBsXJmqUW8=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-remap-async-to-generator": "^7.13.0"
+      }
+    },
+    "@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.12.13.tgz?cache=0&sync_timestamp=1612314818063&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoped-functions%2Fdownload%2F%40babel%2Fplugin-transform-block-scoped-functions-7.12.13.tgz",
+      "integrity": "sha1-qb8YNvKjm062zwmWdzneKepL9MQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-block-scoping": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.14.2.tgz?cache=0&sync_timestamp=1620839422743&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-block-scoping%2Fdownload%2F%40babel%2Fplugin-transform-block-scoping-7.14.2.tgz",
+      "integrity": "sha1-dhyxKrWojWQK1K9KqB+CDmtf31w=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-transform-classes": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.14.2.tgz?cache=0&sync_timestamp=1620840046699&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.14.2.tgz",
+      "integrity": "sha1-PxGWxXCfBkwlKtBWIH2Ht66y0D0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.12.13",
+        "@babel/helper-function-name": "^7.14.2",
+        "@babel/helper-optimise-call-expression": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-replace-supers": "^7.13.12",
+        "@babel/helper-split-export-declaration": "^7.12.13",
+        "globals": "^11.1.0"
+      }
+    },
+    "@babel/plugin-transform-computed-properties": {
+      "version": "7.13.0",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.13.0.tgz?cache=0&sync_timestamp=1614034212505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-computed-properties%2Fdownload%2F%40babel%2Fplugin-transform-computed-properties-7.13.0.tgz",
+      "integrity": "sha1-hFxui5u1U3ax+guS7wvcjqBmRO0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-transform-destructuring": {
+      "version": "7.13.17",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.13.17.tgz",
+      "integrity": "sha1-Z42WV2Y4wZ1bNrMyUE0/1uBt6ic=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-transform-dotall-regex": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.12.13.tgz",
+      "integrity": "sha1-PxYBzCmQW/y2f1ORDxl66v67Ja0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-duplicate-keys": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.12.13.tgz?cache=0&sync_timestamp=1612314817333&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-duplicate-keys%2Fdownload%2F%40babel%2Fplugin-transform-duplicate-keys-7.12.13.tgz",
+      "integrity": "sha1-bwa4eouAP9ko5UuBwljwoAM5BN4=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.12.13.tgz",
+      "integrity": "sha1-TVI5C5onPmUeSrpq7knvQOgM0KE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-for-of": {
+      "version": "7.13.0",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.13.0.tgz",
+      "integrity": "sha1-x5n4gagJGsJrVIZ6hFw+l9JpYGI=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-transform-function-name": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.12.13.tgz",
+      "integrity": "sha1-uwJEUvmq7YYdN0yOeiQlLOOlAFE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-literals": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.12.13.tgz?cache=0&sync_timestamp=1612314818038&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-literals%2Fdownload%2F%40babel%2Fplugin-transform-literals-7.12.13.tgz",
+      "integrity": "sha1-LKRbr+SoIBl88xV5Sk0mVg/kvbk=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-member-expression-literals": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.12.13.tgz?cache=0&sync_timestamp=1612314834575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-member-expression-literals%2Fdownload%2F%40babel%2Fplugin-transform-member-expression-literals-7.12.13.tgz",
+      "integrity": "sha1-X/pmzVm54ZExTJ8fgDuTjowIHkA=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-modules-amd": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.14.2.tgz",
+      "integrity": "sha1-ZiKAb+GnwHoTiERCIu+VNfLKF7A=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.14.2",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
+      }
+    },
+    "@babel/plugin-transform-modules-commonjs": {
+      "version": "7.14.0",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.14.0.tgz?cache=0&sync_timestamp=1619727184331&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-commonjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-commonjs-7.14.0.tgz",
+      "integrity": "sha1-UrwZnLWB4Jku26Dw+ANWRnWH8WE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.14.0",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-simple-access": "^7.13.12",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
+      }
+    },
+    "@babel/plugin-transform-modules-systemjs": {
+      "version": "7.13.8",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.13.8.tgz?cache=0&sync_timestamp=1614382839114&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.13.8.tgz",
+      "integrity": "sha1-bQZu4r/zx7PWC/KN7Baa2ZODGuM=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.13.0",
+        "@babel/helper-module-transforms": "^7.13.0",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-validator-identifier": "^7.12.11",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
+      }
+    },
+    "@babel/plugin-transform-modules-umd": {
+      "version": "7.14.0",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.14.0.tgz?cache=0&sync_timestamp=1619727183056&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.14.0.tgz",
+      "integrity": "sha1-L4F50bvJJjZlzkpl8wVSay6orDQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.14.0",
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.12.13.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-named-capturing-groups-regex%2Fdownload%2F%40babel%2Fplugin-transform-named-capturing-groups-regex-7.12.13.tgz",
+      "integrity": "sha1-IhNyWl9bu+NktQw7pZmMlZnFydk=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-new-target": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.12.13.tgz?cache=0&sync_timestamp=1612314816557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-new-target%2Fdownload%2F%40babel%2Fplugin-transform-new-target-7.12.13.tgz",
+      "integrity": "sha1-4i2MOvJLFQ3VKMvW5oXnmb8cNRw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-object-super": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.12.13.tgz?cache=0&sync_timestamp=1612314795746&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.12.13.tgz",
+      "integrity": "sha1-tEFqLWO4974xTz00m9VanBtRcfc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13",
+        "@babel/helper-replace-supers": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-parameters": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.14.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.14.2.tgz",
+      "integrity": "sha1-5CkPcuDp6DEADQZkJ8RmcJjezDE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-transform-property-literals": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.12.13.tgz",
+      "integrity": "sha1-TmqeN4ZNjxs7wOLc57+IV9uLGoE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-regenerator": {
+      "version": "7.13.15",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.13.15.tgz",
+      "integrity": "sha1-5esolFv4tlY+f4GJRflmqNKZfzk=",
+      "dev": true,
+      "requires": {
+        "regenerator-transform": "^0.14.2"
+      }
+    },
+    "@babel/plugin-transform-reserved-words": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.12.13.tgz?cache=0&sync_timestamp=1612314845661&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-reserved-words%2Fdownload%2F%40babel%2Fplugin-transform-reserved-words-7.12.13.tgz",
+      "integrity": "sha1-fZmI1PBuD+aX6h2YAxiKoYtHJpU=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-runtime": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.14.2.tgz?cache=0&sync_timestamp=1620839386201&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-runtime%2Fdownload%2F%40babel%2Fplugin-transform-runtime-7.14.2.tgz",
+      "integrity": "sha1-TiQ4m9aA3ZTqG4cUZdABEq6XRCU=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.13.12",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "babel-plugin-polyfill-corejs2": "^0.2.0",
+        "babel-plugin-polyfill-corejs3": "^0.2.0",
+        "babel-plugin-polyfill-regenerator": "^0.2.0",
+        "semver": "^6.3.0"
+      }
+    },
+    "@babel/plugin-transform-shorthand-properties": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.12.13.tgz?cache=0&sync_timestamp=1612314820265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-shorthand-properties%2Fdownload%2F%40babel%2Fplugin-transform-shorthand-properties-7.12.13.tgz",
+      "integrity": "sha1-23VXMrcMU51QTGOQ2c6Q/mSv960=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-spread": {
+      "version": "7.13.0",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.13.0.tgz?cache=0&sync_timestamp=1614034217488&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-spread%2Fdownload%2F%40babel%2Fplugin-transform-spread-7.13.0.tgz",
+      "integrity": "sha1-hIh3EOJzwYFaznrkWfb0Kl0x1f0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1"
+      }
+    },
+    "@babel/plugin-transform-sticky-regex": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.12.13.tgz",
+      "integrity": "sha1-dg/9k2+s5z+GCuZG+4bugvPQbR8=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-template-literals": {
+      "version": "7.13.0",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.13.0.tgz",
+      "integrity": "sha1-o2BJEnl3rZRDje50Q1mNHO/fQJ0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0"
+      }
+    },
+    "@babel/plugin-transform-typeof-symbol": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.12.13.tgz?cache=0&sync_timestamp=1612314820235&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-typeof-symbol%2Fdownload%2F%40babel%2Fplugin-transform-typeof-symbol-7.12.13.tgz",
+      "integrity": "sha1-eF3Weh8upXnZwr5yLejITLhfWn8=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-unicode-escapes": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.12.13.tgz?cache=0&sync_timestamp=1612314845292&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-escapes%2Fdownload%2F%40babel%2Fplugin-transform-unicode-escapes-7.12.13.tgz",
+      "integrity": "sha1-hAztO4FtO1En3R0S3O3F3q0aXnQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-transform-unicode-regex": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.12.13.tgz?cache=0&sync_timestamp=1612314820337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-regex%2Fdownload%2F%40babel%2Fplugin-transform-unicode-regex-7.12.13.tgz",
+      "integrity": "sha1-tSUhaFgE4VWxIC6D/BiNNLtw9aw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/preset-env": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/preset-env/download/@babel/preset-env-7.14.2.tgz?cache=0&sync_timestamp=1620839401950&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.14.2.tgz",
+      "integrity": "sha1-6AYSll2nNXnIStL5Y8I1nHFSTtU=",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.14.0",
+        "@babel/helper-compilation-targets": "^7.13.16",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-validator-option": "^7.12.17",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12",
+        "@babel/plugin-proposal-async-generator-functions": "^7.14.2",
+        "@babel/plugin-proposal-class-properties": "^7.13.0",
+        "@babel/plugin-proposal-class-static-block": "^7.13.11",
+        "@babel/plugin-proposal-dynamic-import": "^7.14.2",
+        "@babel/plugin-proposal-export-namespace-from": "^7.14.2",
+        "@babel/plugin-proposal-json-strings": "^7.14.2",
+        "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2",
+        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2",
+        "@babel/plugin-proposal-numeric-separator": "^7.14.2",
+        "@babel/plugin-proposal-object-rest-spread": "^7.14.2",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.14.2",
+        "@babel/plugin-proposal-optional-chaining": "^7.14.2",
+        "@babel/plugin-proposal-private-methods": "^7.13.0",
+        "@babel/plugin-proposal-private-property-in-object": "^7.14.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.12.13",
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-class-properties": "^7.12.13",
+        "@babel/plugin-syntax-class-static-block": "^7.12.13",
+        "@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.0",
+        "@babel/plugin-syntax-top-level-await": "^7.12.13",
+        "@babel/plugin-transform-arrow-functions": "^7.13.0",
+        "@babel/plugin-transform-async-to-generator": "^7.13.0",
+        "@babel/plugin-transform-block-scoped-functions": "^7.12.13",
+        "@babel/plugin-transform-block-scoping": "^7.14.2",
+        "@babel/plugin-transform-classes": "^7.14.2",
+        "@babel/plugin-transform-computed-properties": "^7.13.0",
+        "@babel/plugin-transform-destructuring": "^7.13.17",
+        "@babel/plugin-transform-dotall-regex": "^7.12.13",
+        "@babel/plugin-transform-duplicate-keys": "^7.12.13",
+        "@babel/plugin-transform-exponentiation-operator": "^7.12.13",
+        "@babel/plugin-transform-for-of": "^7.13.0",
+        "@babel/plugin-transform-function-name": "^7.12.13",
+        "@babel/plugin-transform-literals": "^7.12.13",
+        "@babel/plugin-transform-member-expression-literals": "^7.12.13",
+        "@babel/plugin-transform-modules-amd": "^7.14.2",
+        "@babel/plugin-transform-modules-commonjs": "^7.14.0",
+        "@babel/plugin-transform-modules-systemjs": "^7.13.8",
+        "@babel/plugin-transform-modules-umd": "^7.14.0",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13",
+        "@babel/plugin-transform-new-target": "^7.12.13",
+        "@babel/plugin-transform-object-super": "^7.12.13",
+        "@babel/plugin-transform-parameters": "^7.14.2",
+        "@babel/plugin-transform-property-literals": "^7.12.13",
+        "@babel/plugin-transform-regenerator": "^7.13.15",
+        "@babel/plugin-transform-reserved-words": "^7.12.13",
+        "@babel/plugin-transform-shorthand-properties": "^7.12.13",
+        "@babel/plugin-transform-spread": "^7.13.0",
+        "@babel/plugin-transform-sticky-regex": "^7.12.13",
+        "@babel/plugin-transform-template-literals": "^7.13.0",
+        "@babel/plugin-transform-typeof-symbol": "^7.12.13",
+        "@babel/plugin-transform-unicode-escapes": "^7.12.13",
+        "@babel/plugin-transform-unicode-regex": "^7.12.13",
+        "@babel/preset-modules": "^0.1.4",
+        "@babel/types": "^7.14.2",
+        "babel-plugin-polyfill-corejs2": "^0.2.0",
+        "babel-plugin-polyfill-corejs3": "^0.2.0",
+        "babel-plugin-polyfill-regenerator": "^0.2.0",
+        "core-js-compat": "^3.9.0",
+        "semver": "^6.3.0"
+      }
+    },
+    "@babel/preset-modules": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/preset-modules/download/@babel/preset-modules-0.1.4.tgz",
+      "integrity": "sha1-Ni8raMZihClw/bXiVP/I/BwuQV4=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+        "@babel/plugin-transform-dotall-regex": "^7.4.4",
+        "@babel/types": "^7.4.4",
+        "esutils": "^2.0.2"
+      }
+    },
+    "@babel/runtime": {
+      "version": "7.14.0",
+      "resolved": "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.14.0.tgz?cache=0&sync_timestamp=1619727414495&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.14.0.tgz",
+      "integrity": "sha1-RnlLwgthLF915i3QceJN/ZXxy+Y=",
+      "requires": {
+        "regenerator-runtime": "^0.13.4"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.13.7",
+          "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz",
+          "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U="
+        }
+      }
+    },
+    "@babel/template": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.12.13.tgz",
+      "integrity": "sha1-UwJlvooliduzdSOETFvLVZR/syc=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.12.13",
+        "@babel/parser": "^7.12.13",
+        "@babel/types": "^7.12.13"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/traverse/download/@babel/traverse-7.14.2.tgz?cache=0&sync_timestamp=1620839391311&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.14.2.tgz",
+      "integrity": "sha1-kgGo2RJyOoMcJnnH678v4UFtdls=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.12.13",
+        "@babel/generator": "^7.14.2",
+        "@babel/helper-function-name": "^7.14.2",
+        "@babel/helper-split-export-declaration": "^7.12.13",
+        "@babel/parser": "^7.14.2",
+        "@babel/types": "^7.14.2",
+        "debug": "^4.1.0",
+        "globals": "^11.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
+          "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+          "dev": true
+        }
+      }
+    },
+    "@babel/types": {
+      "version": "7.14.2",
+      "resolved": "https://registry.nlark.com/@babel/types/download/@babel/types-7.14.2.tgz",
+      "integrity": "sha1-QgiuADEH74oFfqgzPlbrZNL2osM=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-validator-identifier": "^7.14.0",
+        "to-fast-properties": "^2.0.0"
+      }
+    },
+    "@hapi/address": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-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?cache=0&sync_timestamp=1593915150444&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Fbourne%2Fdownload%2F%40hapi%2Fbourne-1.3.2.tgz",
+      "integrity": "sha1-CnCVreoGckPOMoPhtWuKj0U7JCo=",
+      "dev": true
+    },
+    "@hapi/hoek": {
+      "version": "8.5.1",
+      "resolved": "https://registry.nlark.com/@hapi/hoek/download/@hapi/hoek-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.npm.taobao.org/@hapi/topo/download/@hapi/topo-3.1.6.tgz?cache=0&sync_timestamp=1593916080558&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Ftopo%2Fdownload%2F%40hapi%2Ftopo-3.1.6.tgz",
+      "integrity": "sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck=",
+      "dev": true,
+      "requires": {
+        "@hapi/hoek": "^8.3.0"
+      }
+    },
+    "@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"
+      }
+    },
+    "@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.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "dependencies": {
+        "@nodelib/fs.stat": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+          "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+          "dev": true
+        }
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&sync_timestamp=1609074523193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz",
+      "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=",
+      "dev": true
+    },
+    "@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      }
+    },
+    "@sindresorhus/is": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
+      "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow=="
+    },
+    "@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=1607927399532&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Ffriendly-errors-webpack-plugin%2Fdownload%2F%40soda%2Ffriendly-errors-webpack-plugin-1.8.0.tgz",
+      "integrity": "sha1-hHUdgqkwGdXJLAzw5FrFkIfNIkA=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "error-stack-parser": "^2.0.2",
+        "string-width": "^2.0.0",
+        "strip-ansi": "^5"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz?cache=0&sync_timestamp=1618552489864&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=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-2.1.1.tgz",
+          "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
+              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^3.0.0"
+              }
+            }
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553320591&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"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            }
+          }
+        }
+      }
+    },
+    "@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?cache=0&sync_timestamp=1592273074614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Fget-current-script%2Fdownload%2F%40soda%2Fget-current-script-1.0.2.tgz",
+      "integrity": "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=",
+      "dev": true
+    },
+    "@transloadit/prettier-bytes": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz",
+      "integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA=="
+    },
+    "@trysound/sax": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+      "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+      "dev": true,
+      "optional": true
+    },
+    "@types/esrever": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/@types/esrever/-/esrever-0.2.0.tgz",
+      "integrity": "sha512-5NI6TeGzVEy/iBcuYtcPzzIC6EqlfQ2+UZ54vT0ulq8bPNGAy8UJD+XcsAyEOcnYFUjOVWuUV+k4/rVkxt9/XQ=="
+    },
+    "@types/glob": {
+      "version": "7.1.3",
+      "resolved": "https://registry.nlark.com/@types/glob/download/@types/glob-7.1.3.tgz?cache=0&sync_timestamp=1618847045236&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.3.tgz",
+      "integrity": "sha1-5rqA82t9qtLGhazZJmOC5omFwYM=",
+      "dev": true,
+      "requires": {
+        "@types/minimatch": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/json-schema": {
+      "version": "7.0.7",
+      "resolved": "https://registry.nlark.com/@types/json-schema/download/@types/json-schema-7.0.7.tgz",
+      "integrity": "sha1-mKmTUWyFnrDVxMjwmDF6nqaNua0=",
+      "dev": true
+    },
+    "@types/minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.4.tgz",
+      "integrity": "sha1-8Owl2/Lw5LGGRzE6wDETTKWySyE=",
+      "dev": true
+    },
+    "@types/node": {
+      "version": "15.0.3",
+      "resolved": "https://registry.nlark.com/@types/node/download/@types/node-15.0.3.tgz",
+      "integrity": "sha1-7gn8qsUTV2R0wyfaWBjUIbmNuIo=",
+      "dev": true
+    },
+    "@types/normalize-package-data": {
+      "version": "2.4.0",
+      "resolved": "https://registry.nlark.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz",
+      "integrity": "sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4=",
+      "dev": true
+    },
+    "@types/q": {
+      "version": "1.5.4",
+      "resolved": "https://registry.nlark.com/@types/q/download/@types/q-1.5.4.tgz",
+      "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=",
+      "dev": true
+    },
+    "@uppy/companion-client": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-2.0.3.tgz",
+      "integrity": "sha512-I1baKKBpb3d//q3agRtNV3UD/sA7EecFOfoVSpMlPkFu6oQqxjSC5OFXTf3fa8X+wo4Lcutv1++3igPJ1zrgbA==",
+      "requires": {
+        "@uppy/utils": "^4.0.3",
+        "namespace-emitter": "^2.0.1"
+      }
+    },
+    "@uppy/core": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/@uppy/core/-/core-2.1.2.tgz",
+      "integrity": "sha512-w5wE2THkGxYxwxfZ/89q1s8umGNswCXmgjwUxB52faOnosvtu3BLp/hJltmWUQ6YNlsRsjrzxA5IyZ+/J3ApNQ==",
+      "requires": {
+        "@transloadit/prettier-bytes": "0.0.7",
+        "@uppy/store-default": "^2.0.2",
+        "@uppy/utils": "^4.0.3",
+        "lodash.throttle": "^4.1.1",
+        "mime-match": "^1.0.2",
+        "namespace-emitter": "^2.0.1",
+        "nanoid": "^3.1.25",
+        "preact": "^10.5.13"
+      }
+    },
+    "@uppy/store-default": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@uppy/store-default/-/store-default-2.0.2.tgz",
+      "integrity": "sha512-D9oz08EYBoc4fDotvaevd2Q7uVldS61HYFOXK20b5M/xXF/uxepapaqQnMu1DfCVsA77rhp7DMemxnWc9y8xTQ=="
+    },
+    "@uppy/utils": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-4.0.3.tgz",
+      "integrity": "sha512-LApneC8lNvTonzSJFupxzuEvKhwp/Klc1otq8t+zXpdgjLVVSuW/rJBFfdIDrmDoqSzVLQKYjMy07CmhDAWfKg==",
+      "requires": {
+        "lodash.throttle": "^4.1.1"
+      }
+    },
+    "@uppy/xhr-upload": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-2.0.5.tgz",
+      "integrity": "sha512-DkD6cRKrcI4oDmCimHAULb6rruyUt6SbH4/omhpvWILbG/mWV5vA39YLvYxCZ1FZbijJ4QkVTKEeOTLcmoljPg==",
+      "requires": {
+        "@uppy/companion-client": "^2.0.3",
+        "@uppy/utils": "^4.0.3",
+        "nanoid": "^3.1.25"
+      }
+    },
+    "@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?cache=0&sync_timestamp=1602851386916&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz",
+      "integrity": "sha1-MWJKelBfsU2h1YAjclpMXycOaoE=",
+      "dev": true
+    },
+    "@vue/babel-helper-vue-transform-on": {
+      "version": "1.0.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=1610812489009&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.6",
+      "resolved": "https://registry.nlark.com/@vue/babel-plugin-jsx/download/@vue/babel-plugin-jsx-1.0.6.tgz?cache=0&sync_timestamp=1619929844730&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fbabel-plugin-jsx%2Fdownload%2F%40vue%2Fbabel-plugin-jsx-1.0.6.tgz",
+      "integrity": "sha1-GEvzVBq279vlB5q4sgwZ4q8QC/s=",
+      "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=1602851113524&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-plugin-transform-vue-jsx%2Fdownload%2F%40vue%2Fbabel-plugin-transform-vue-jsx-1.2.1.tgz",
+      "integrity": "sha1-ZGBGxlLC8CQnJ/NFGdkXsGQEHtc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.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=1620434254645&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"
+      }
+    },
+    "@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=1603806927648&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-preset-jsx%2Fdownload%2F%40vue%2Fbabel-preset-jsx-1.2.4.tgz",
+      "integrity": "sha1-kv6nnbbxOwHoDToAmeKSS9y+Toc=",
+      "dev": true,
+      "requires": {
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+        "@vue/babel-sugar-composition-api-inject-h": "^1.2.1",
+        "@vue/babel-sugar-composition-api-render-instance": "^1.2.4",
+        "@vue/babel-sugar-functional-vue": "^1.2.2",
+        "@vue/babel-sugar-inject-h": "^1.2.2",
+        "@vue/babel-sugar-v-model": "^1.2.3",
+        "@vue/babel-sugar-v-on": "^1.2.3"
+      }
+    },
+    "@vue/babel-sugar-composition-api-inject-h": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-composition-api-inject-h/download/@vue/babel-sugar-composition-api-inject-h-1.2.1.tgz?cache=0&sync_timestamp=1602851113182&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-composition-api-inject-h%2Fdownload%2F%40vue%2Fbabel-sugar-composition-api-inject-h-1.2.1.tgz",
+      "integrity": "sha1-BdbgxDJxDjdYKyvppgSbaJtvA+s=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-composition-api-render-instance": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-composition-api-render-instance/download/@vue/babel-sugar-composition-api-render-instance-1.2.4.tgz?cache=0&sync_timestamp=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=1602929973472&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-functional-vue%2Fdownload%2F%40vue%2Fbabel-sugar-functional-vue-1.2.2.tgz",
+      "integrity": "sha1-JnqayNeHyW7b8Dzj85LEnam9Jlg=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-inject-h": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.2.2.tgz?cache=0&sync_timestamp=1602929885089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-inject-h%2Fdownload%2F%40vue%2Fbabel-sugar-inject-h-1.2.2.tgz",
+      "integrity": "sha1-1zjTyJM2fshJHcu2abAAkZKT46o=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-v-model": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.2.3.tgz",
+      "integrity": "sha1-+h8pulHr8KoabDX6ZtU5vEWaGPI=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.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=1603921884289&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",
+      "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=1603921884289&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=1620434262557&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.4.6",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-4.4.6.tgz?cache=0&sync_timestamp=1620434447449&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-plugin-babel%2Fdownload%2F%40vue%2Fcli-plugin-babel-4.4.6.tgz",
+      "integrity": "sha1-1ddQ1PdJAMAINuGcFkGTZQ3ybzs=",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.9.6",
+        "@vue/babel-preset-app": "^4.4.6",
+        "@vue/cli-shared-utils": "^4.4.6",
+        "babel-loader": "^8.1.0",
+        "cache-loader": "^4.1.0",
+        "thread-loader": "^2.1.3",
+        "webpack": "^4.0.0"
+      }
+    },
+    "@vue/cli-plugin-eslint": {
+      "version": "4.4.6",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.4.6.tgz?cache=0&sync_timestamp=1620434327927&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-plugin-eslint%2Fdownload%2F%40vue%2Fcli-plugin-eslint-4.4.6.tgz",
+      "integrity": "sha1-RC1ipw3ZPkpUn/kWTS0Q9Ol6WPE=",
+      "dev": true,
+      "requires": {
+        "@vue/cli-shared-utils": "^4.4.6",
+        "eslint-loader": "^2.2.1",
+        "globby": "^9.2.0",
+        "inquirer": "^7.1.0",
+        "webpack": "^4.0.0",
+        "yorkie": "^2.0.0"
+      }
+    },
+    "@vue/cli-plugin-router": {
+      "version": "4.4.6",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-router/download/@vue/cli-plugin-router-4.4.6.tgz?cache=0&sync_timestamp=1620434257359&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-plugin-router%2Fdownload%2F%40vue%2Fcli-plugin-router-4.4.6.tgz",
+      "integrity": "sha1-21uxySr9IEY3bk+qkCcNY2PUubg=",
+      "dev": true,
+      "requires": {
+        "@vue/cli-shared-utils": "^4.4.6"
+      }
+    },
+    "@vue/cli-plugin-vuex": {
+      "version": "4.4.6",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.4.6.tgz?cache=0&sync_timestamp=1620434265398&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-plugin-vuex%2Fdownload%2F%40vue%2Fcli-plugin-vuex-4.4.6.tgz",
+      "integrity": "sha1-RLWW8NUjbgos4apHV72lIHwjC+A=",
+      "dev": true
+    },
+    "@vue/cli-service": {
+      "version": "4.4.6",
+      "resolved": "https://registry.nlark.com/@vue/cli-service/download/@vue/cli-service-4.4.6.tgz?cache=0&sync_timestamp=1620434329965&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-service%2Fdownload%2F%40vue%2Fcli-service-4.4.6.tgz",
+      "integrity": "sha1-g8oFjQgesUW7wa4v6AadLZ3ffhg=",
+      "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",
+        "@vue/cli-overlay": "^4.4.6",
+        "@vue/cli-plugin-router": "^4.4.6",
+        "@vue/cli-plugin-vuex": "^4.4.6",
+        "@vue/cli-shared-utils": "^4.4.6",
+        "@vue/component-compiler-utils": "^3.1.2",
+        "@vue/preload-webpack-plugin": "^1.1.0",
+        "@vue/web-component-wrapper": "^1.2.0",
+        "acorn": "^7.2.0",
+        "acorn-walk": "^7.1.1",
+        "address": "^1.1.2",
+        "autoprefixer": "^9.8.0",
+        "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": "^7.1.0",
+        "terser-webpack-plugin": "^2.3.6",
+        "thread-loader": "^2.1.3",
+        "url-loader": "^2.2.0",
+        "vue-loader": "^15.9.2",
+        "vue-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?cache=0&sync_timestamp=1620134123724&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
+          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+          "dev": true
+        },
+        "cacache": {
+          "version": "13.0.1",
+          "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1616431156987&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz",
+          "integrity": "sha1-qAAMIWlwiQgvhSh6GuxuOCAkpxw=",
+          "dev": true,
+          "requires": {
+            "chownr": "^1.1.2",
+            "figgy-pudding": "^3.5.1",
+            "fs-minipass": "^2.0.0",
+            "glob": "^7.1.4",
+            "graceful-fs": "^4.2.2",
+            "infer-owner": "^1.0.4",
+            "lru-cache": "^5.1.1",
+            "minipass": "^3.0.0",
+            "minipass-collect": "^1.0.2",
+            "minipass-flush": "^1.0.5",
+            "minipass-pipeline": "^1.2.2",
+            "mkdirp": "^0.5.1",
+            "move-concurrently": "^1.0.1",
+            "p-map": "^3.0.0",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^2.7.1",
+            "ssri": "^7.0.0",
+            "unique-filename": "^1.1.1"
+          }
+        },
+        "debug": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
+          "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        },
+        "ssri": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-7.1.0.tgz?cache=0&sync_timestamp=1617826295004&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-7.1.0.tgz",
+          "integrity": "sha1-ksJBv23oI2W1x/tL126XVSLhKU0=",
+          "dev": true,
+          "requires": {
+            "figgy-pudding": "^3.5.1",
+            "minipass": "^3.1.1"
+          }
+        },
+        "terser-webpack-plugin": {
+          "version": "2.3.8",
+          "resolved": "https://registry.nlark.com/terser-webpack-plugin/download/terser-webpack-plugin-2.3.8.tgz?cache=0&sync_timestamp=1620830611931&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.8.tgz",
+          "integrity": "sha1-iUdkoZsHQ/L3BOfCqEjFKDppZyQ=",
+          "dev": true,
+          "requires": {
+            "cacache": "^13.0.1",
+            "find-cache-dir": "^3.3.1",
+            "jest-worker": "^25.4.0",
+            "p-limit": "^2.3.0",
+            "schema-utils": "^2.6.6",
+            "serialize-javascript": "^4.0.0",
+            "source-map": "^0.6.1",
+            "terser": "^4.6.12",
+            "webpack-sources": "^1.4.3"
+          }
+        },
+        "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"
+          }
+        }
+      }
+    },
+    "@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=1620434287034&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"
+      }
+    },
+    "@vue/component-compiler-utils": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.2.0.tgz?cache=0&sync_timestamp=1595427628913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcomponent-compiler-utils%2Fdownload%2F%40vue%2Fcomponent-compiler-utils-3.2.0.tgz",
+      "integrity": "sha1-j4UYLO7Sjps8dTE95mn4MWbRHl0=",
+      "dev": true,
+      "requires": {
+        "consolidate": "^0.15.1",
+        "hash-sum": "^1.0.2",
+        "lru-cache": "^4.1.2",
+        "merge-source-map": "^1.1.0",
+        "postcss": "^7.0.14",
+        "postcss-selector-parser": "^6.0.2",
+        "prettier": "^1.18.2",
+        "source-map": "~0.6.1",
+        "vue-template-es2015-compiler": "^1.9.0"
+      },
+      "dependencies": {
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+          "dev": true
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz",
+          "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/preload-webpack-plugin": {
+      "version": "1.1.2",
+      "resolved": "https://registry.nlark.com/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz",
+      "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=",
+      "dev": true
+    },
+    "@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&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
+    },
+    "@wangeditor/basic-modules": {
+      "version": "0.7.8",
+      "resolved": "https://registry.npmjs.org/@wangeditor/basic-modules/-/basic-modules-0.7.8.tgz",
+      "integrity": "sha512-i921Wm+L5YQ9Xjgmm06oje8I2/zdz1g7b2jO2+0YvlL0Fe8gyIwyev3lRLIauWUr0jy3c21erKMcd0T/0PPb0A==",
+      "requires": {
+        "is-url": "^1.2.4"
+      }
+    },
+    "@wangeditor/code-highlight": {
+      "version": "0.7.5",
+      "resolved": "https://registry.npmjs.org/@wangeditor/code-highlight/-/code-highlight-0.7.5.tgz",
+      "integrity": "sha512-+MjF1b5ab8S36IMBbVQ6vpt8EbrifUKhb/i2hf5E3YnTK/8Yaama9QyHMXW5VHK4guysMP92+HlBcApCERgGPQ==",
+      "requires": {
+        "prismjs": "^1.23.0"
+      }
+    },
+    "@wangeditor/core": {
+      "version": "0.12.3",
+      "resolved": "https://registry.npmjs.org/@wangeditor/core/-/core-0.12.3.tgz",
+      "integrity": "sha512-GNOV6DT/zNsvLR0zGEnXyb30vbp9tfY2LeQzzX+hjlkNwXPaP3FcLWWZFYGPbrGCA0O8Z2cM4b7GIcYVoAPO+Q==",
+      "requires": {
+        "event-emitter": "^0.3.5",
+        "html-void-elements": "^2.0.0",
+        "i18next": "^20.4.0",
+        "scroll-into-view-if-needed": "^2.2.28",
+        "slate-history": "^0.62.0",
+        "xml-formatter": "^2.4.0"
+      }
+    },
+    "@wangeditor/editor": {
+      "version": "0.12.3",
+      "resolved": "https://registry.npmjs.org/@wangeditor/editor/-/editor-0.12.3.tgz",
+      "integrity": "sha512-IsmgdSCLlBdm9so4b/8pQn/8ce7uy2n4yhLoFeHmHmDrNjgrytTnEJTixITcXusG4cHZkKKmyWK/ZEVCM8Jt7g==",
+      "requires": {
+        "@uppy/core": "^2.1.1",
+        "@uppy/xhr-upload": "^2.0.3",
+        "@wangeditor/basic-modules": "^0.7.8",
+        "@wangeditor/code-highlight": "^0.7.5",
+        "@wangeditor/core": "^0.12.3",
+        "@wangeditor/list-module": "^0.7.7",
+        "@wangeditor/table-module": "^0.8.5",
+        "@wangeditor/upload-image-module": "^0.7.7",
+        "@wangeditor/video-module": "^0.7.5",
+        "dom7": "^3.0.0",
+        "is-hotkey": "^0.2.0",
+        "lodash.camelcase": "^4.3.0",
+        "lodash.clonedeep": "^4.5.0",
+        "lodash.debounce": "^4.0.8",
+        "lodash.foreach": "^4.5.0",
+        "lodash.isequal": "^4.5.0",
+        "lodash.throttle": "^4.1.1",
+        "lodash.toarray": "^4.4.0",
+        "nanoid": "^3.1.30",
+        "slate": "^0.63.0",
+        "snabbdom": "^3.0.1"
+      }
+    },
+    "@wangeditor/editor-for-vue": {
+      "version": "0.6.12-1",
+      "resolved": "https://registry.npmjs.org/@wangeditor/editor-for-vue/-/editor-for-vue-0.6.12-1.tgz",
+      "integrity": "sha512-qt6pyQtE8y3m3qP+EwfiiS0fcDwpJpOjXqV976OdPUwlV4LPY8AXnGGmG12GPNOvQW3C43W8rYbUpZ8+62gEYw==",
+      "requires": {
+        "event-emitter": "^0.3.5",
+        "vue-template-compiler": "^2.6.14"
+      },
+      "dependencies": {
+        "vue-template-compiler": {
+          "version": "2.6.14",
+          "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz",
+          "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==",
+          "requires": {
+            "de-indent": "^1.0.2",
+            "he": "^1.1.0"
+          }
+        }
+      }
+    },
+    "@wangeditor/list-module": {
+      "version": "0.7.7",
+      "resolved": "https://registry.npmjs.org/@wangeditor/list-module/-/list-module-0.7.7.tgz",
+      "integrity": "sha512-lZdtg72A99m/icXfMk4vyDXMAUXRnLx4/N0SVJwVLrHBdztM1XmBw48l/XCChwxkpRC0BxbsSNE4H5iHvupWqQ=="
+    },
+    "@wangeditor/table-module": {
+      "version": "0.8.5",
+      "resolved": "https://registry.npmjs.org/@wangeditor/table-module/-/table-module-0.8.5.tgz",
+      "integrity": "sha512-KAh0dzKUNUqKHAqCTsQUHBxYoTDB76tEXEVe+NmK/lRih+bFdy2l5q83rIr5fiJqwonzEVobBZbr2mVD8I8RXQ=="
+    },
+    "@wangeditor/upload-image-module": {
+      "version": "0.7.7",
+      "resolved": "https://registry.npmjs.org/@wangeditor/upload-image-module/-/upload-image-module-0.7.7.tgz",
+      "integrity": "sha512-559lcMmRPiSTXI+mD1W/cGn+NYF4BqkCK9MoJJCT9eXD17c6+6GlJ3gNeMtYuYAHL/hlwlDUWRtSe99lG8WCYA=="
+    },
+    "@wangeditor/video-module": {
+      "version": "0.7.5",
+      "resolved": "https://registry.npmjs.org/@wangeditor/video-module/-/video-module-0.7.5.tgz",
+      "integrity": "sha512-KIgm69L+OSYvaeoQGGdVLgOV1r20ixaxI5lysvu1UCRUR26vukTIXK617CiR0Q1gueYMaU6lY9JqMyr+wExjDg=="
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz?cache=0&sync_timestamp=1610045499973&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz",
+      "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=",
+      "dev": true,
+      "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.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&sync_timestamp=1610045504831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz",
+      "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=",
+      "dev": true
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz?cache=0&sync_timestamp=1610045498041&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.9.0.tgz",
+      "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=",
+      "dev": true
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz?cache=0&sync_timestamp=1610045496323&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-buffer%2Fdownload%2F%40webassemblyjs%2Fhelper-buffer-1.9.0.tgz",
+      "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=",
+      "dev": true
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz?cache=0&sync_timestamp=1610045502739&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-code-frame%2Fdownload%2F%40webassemblyjs%2Fhelper-code-frame-1.9.0.tgz",
+      "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.9.0"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz?cache=0&sync_timestamp=1610045497114&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-fsm%2Fdownload%2F%40webassemblyjs%2Fhelper-fsm-1.9.0.tgz",
+      "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=",
+      "dev": true
+    },
+    "@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=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0"
+      }
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz?cache=0&sync_timestamp=1610045496699&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-bytecode%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-bytecode-1.9.0.tgz",
+      "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz?cache=0&sync_timestamp=1610045503299&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.9.0.tgz",
+      "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=",
+      "dev": true,
+      "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.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz?cache=0&sync_timestamp=1610045498486&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fieee754%2Fdownload%2F%40webassemblyjs%2Fieee754-1.9.0.tgz",
+      "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=",
+      "dev": true,
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz?cache=0&sync_timestamp=1610045497611&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.9.0.tgz",
+      "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=",
+      "dev": true,
+      "requires": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz?cache=0&sync_timestamp=1610045498791&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Futf8%2Fdownload%2F%40webassemblyjs%2Futf8-1.9.0.tgz",
+      "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=",
+      "dev": true
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz?cache=0&sync_timestamp=1610045504190&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.9.0.tgz",
+      "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=",
+      "dev": true,
+      "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.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz?cache=0&sync_timestamp=1610045502219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.9.0.tgz",
+      "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=",
+      "dev": true,
+      "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.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz?cache=0&sync_timestamp=1610045503072&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-opt%2Fdownload%2F%40webassemblyjs%2Fwasm-opt-1.9.0.tgz",
+      "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=",
+      "dev": true,
+      "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.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz?cache=0&sync_timestamp=1610045501288&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-parser%2Fdownload%2F%40webassemblyjs%2Fwasm-parser-1.9.0.tgz",
+      "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=",
+      "dev": true,
+      "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.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz?cache=0&sync_timestamp=1610045503781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-parser%2Fdownload%2F%40webassemblyjs%2Fwast-parser-1.9.0.tgz",
+      "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=",
+      "dev": true,
+      "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.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz?cache=0&sync_timestamp=1610045500821&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-printer%2Fdownload%2F%40webassemblyjs%2Fwast-printer-1.9.0.tgz",
+      "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "@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=",
+      "dev": true
+    },
+    "accepts": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
+      "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
+      "dev": true,
+      "requires": {
+        "mime-types": "~2.1.24",
+        "negotiator": "0.6.2"
+      }
+    },
+    "acorn": {
+      "version": "6.4.2",
+      "resolved": "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1620134123724&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz",
+      "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=",
+      "dev": true
+    },
+    "acorn-jsx": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz",
+      "integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=",
+      "dev": true
+    },
+    "acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.nlark.com/acorn-walk/download/acorn-walk-7.2.0.tgz",
+      "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=",
+      "dev": true
+    },
+    "address": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz",
+      "integrity": "sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=",
+      "dev": true
+    },
+    "aggregate-error": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz",
+      "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=",
+      "dev": true,
+      "requires": {
+        "clean-stack": "^2.0.0",
+        "indent-string": "^4.0.0"
+      }
+    },
+    "ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1620560113100&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+      "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+      "dev": true,
+      "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.nlark.com/ajv-errors/download/ajv-errors-1.0.1.tgz",
+      "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=",
+      "dev": true
+    },
+    "ajv-keywords": {
+      "version": "3.5.2",
+      "resolved": "https://registry.nlark.com/ajv-keywords/download/ajv-keywords-3.5.2.tgz",
+      "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=",
+      "dev": true
+    },
+    "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
+    },
+    "ansi-colors": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz",
+      "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=",
+      "dev": true
+    },
+    "ansi-escapes": {
+      "version": "4.3.2",
+      "resolved": "https://registry.nlark.com/ansi-escapes/download/ansi-escapes-4.3.2.tgz?cache=0&sync_timestamp=1618847144938&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-escapes%2Fdownload%2Fansi-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",
+          "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.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz",
+      "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+      "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "anymatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.nlark.com/anymatch/download/anymatch-3.1.2.tgz",
+      "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "arch": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/arch/download/arch-2.2.0.tgz",
+      "integrity": "sha1-G8R4GPMFdk8jqzMGsL/AhsWinRE="
+    },
+    "archive-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
+      "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=",
+      "requires": {
+        "file-type": "^4.2.0"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "4.4.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
+          "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU="
+        }
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+      "dev": true,
+      "optional": true
+    },
+    "array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&sync_timestamp=1574313384951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-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?cache=0&sync_timestamp=1614624407140&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-union%2Fdownload%2Farray-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=1620042121153&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=",
+      "dev": true
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz",
+      "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "assert": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz",
+      "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=",
+      "dev": true,
+      "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=",
+          "dev": true
+        },
+        "util": {
+          "version": "0.10.3",
+          "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz",
+          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+          "dev": true,
+          "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "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.npm.taobao.org/async/download/async-2.6.3.tgz",
+      "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "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
+    },
+    "async-validator": {
+      "version": "1.8.5",
+      "resolved": "https://registry.nlark.com/async-validator/download/async-validator-1.8.5.tgz",
+      "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=",
+      "requires": {
+        "babel-runtime": "6.x"
+      }
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz",
+      "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=",
+      "dev": true
+    },
+    "autoprefixer": {
+      "version": "9.8.6",
+      "resolved": "https://registry.nlark.com/autoprefixer/download/autoprefixer-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"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "aws4": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101385256&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz",
+      "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=",
+      "dev": true
+    },
+    "axios": {
+      "version": "0.19.2",
+      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.2.tgz?cache=0&sync_timestamp=1608611162952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.19.2.tgz",
+      "integrity": "sha1-PqNsXYgY0NX4qKl6bTa4bNwAyyc=",
+      "requires": {
+        "follow-redirects": "1.5.10"
+      }
+    },
+    "babel-eslint": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz?cache=0&sync_timestamp=1611946434496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-eslint%2Fdownload%2Fbabel-eslint-10.1.0.tgz",
+      "integrity": "sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@babel/parser": "^7.7.0",
+        "@babel/traverse": "^7.7.0",
+        "@babel/types": "^7.7.0",
+        "eslint-visitor-keys": "^1.0.0",
+        "resolve": "^1.12.0"
+      }
+    },
+    "babel-helper-vue-jsx-merge-props": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+      "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
+    },
+    "babel-loader": {
+      "version": "8.2.2",
+      "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.2.2.tgz",
+      "integrity": "sha1-k2POhMEMmkDmx1N0jhRBtgyKC4E=",
+      "dev": true,
+      "requires": {
+        "find-cache-dir": "^3.3.1",
+        "loader-utils": "^1.4.0",
+        "make-dir": "^3.1.0",
+        "schema-utils": "^2.6.5"
+      }
+    },
+    "babel-plugin-dynamic-import-node": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1587495903478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz",
+      "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=",
+      "dev": true,
+      "requires": {
+        "object.assign": "^4.1.0"
+      }
+    },
+    "babel-plugin-polyfill-corejs2": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.0.tgz",
+      "integrity": "sha1-aGd1v5pap1fhBSCQNnXjiJyu7cQ=",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.13.11",
+        "@babel/helper-define-polyfill-provider": "^0.2.0",
+        "semver": "^6.1.1"
+      }
+    },
+    "babel-plugin-polyfill-corejs3": {
+      "version": "0.2.0",
+      "resolved": "https://registry.nlark.com/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.2.0.tgz",
+      "integrity": "sha1-9LS7exkymCffNv9W9ubTZwJst6I=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-define-polyfill-provider": "^0.2.0",
+        "core-js-compat": "^3.9.1"
+      }
+    },
+    "babel-plugin-polyfill-regenerator": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-polyfill-regenerator%2Fdownload%2Fbabel-plugin-polyfill-regenerator-0.2.0.tgz",
+      "integrity": "sha1-hT9fVxb0aR2YyE+Aacdjbqjaerg=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-define-polyfill-provider": "^0.2.0"
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.12",
+          "resolved": "https://registry.nlark.com/core-js/download/core-js-2.6.12.tgz?cache=0&sync_timestamp=1620508113239&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js%2Fdownload%2Fcore-js-2.6.12.tgz",
+          "integrity": "sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw="
+        }
+      }
+    },
+    "balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz",
+      "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=",
+      "dev": true
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz",
+      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
+      "dev": true,
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.5.1.tgz",
+      "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo="
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "dev": true,
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "bfj": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz",
+      "integrity": "sha1-MlyGGoIryzWKQceKM7jm4ght3n8=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.5",
+        "check-types": "^8.0.3",
+        "hoopy": "^0.1.4",
+        "tryer": "^1.0.1"
+      }
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.nlark.com/big.js/download/big.js-5.2.2.tgz",
+      "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=",
+      "dev": true
+    },
+    "bin-build": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz",
+      "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==",
+      "requires": {
+        "decompress": "^4.0.0",
+        "download": "^6.2.2",
+        "execa": "^0.7.0",
+        "p-map-series": "^1.0.0",
+        "tempfile": "^2.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "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.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+          "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+          "requires": {
+            "shebang-regex": "^1.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+        }
+      }
+    },
+    "bin-check": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
+      "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
+      "requires": {
+        "execa": "^0.7.0",
+        "executable": "^4.1.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "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.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+          "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+          "requires": {
+            "shebang-regex": "^1.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+        }
+      }
+    },
+    "bin-version": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz",
+      "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==",
+      "requires": {
+        "execa": "^1.0.0",
+        "find-versions": "^3.0.0"
+      }
+    },
+    "bin-version-check": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz",
+      "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==",
+      "requires": {
+        "bin-version": "^3.0.0",
+        "semver": "^5.6.0",
+        "semver-truncate": "^1.1.2"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "bin-wrapper": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
+      "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
+      "requires": {
+        "bin-check": "^4.1.0",
+        "bin-version-check": "^4.0.0",
+        "download": "^7.1.0",
+        "import-lazy": "^3.1.0",
+        "os-filter-obj": "^2.0.0",
+        "pify": "^4.0.1"
+      },
+      "dependencies": {
+        "download": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
+          "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
+          "requires": {
+            "archive-type": "^4.0.0",
+            "caw": "^2.0.1",
+            "content-disposition": "^0.5.2",
+            "decompress": "^4.2.0",
+            "ext-name": "^5.0.0",
+            "file-type": "^8.1.0",
+            "filenamify": "^2.0.0",
+            "get-stream": "^3.0.0",
+            "got": "^8.3.1",
+            "make-dir": "^1.2.0",
+            "p-event": "^2.1.0",
+            "pify": "^3.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+            }
+          }
+        },
+        "file-type": {
+          "version": "8.1.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
+          "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ=="
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+        },
+        "got": {
+          "version": "8.3.2",
+          "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
+          "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
+          "requires": {
+            "@sindresorhus/is": "^0.7.0",
+            "cacheable-request": "^2.1.1",
+            "decompress-response": "^3.3.0",
+            "duplexer3": "^0.1.4",
+            "get-stream": "^3.0.0",
+            "into-stream": "^3.1.0",
+            "is-retry-allowed": "^1.1.0",
+            "isurl": "^1.0.0-alpha5",
+            "lowercase-keys": "^1.0.0",
+            "mimic-response": "^1.0.0",
+            "p-cancelable": "^0.4.0",
+            "p-timeout": "^2.0.1",
+            "pify": "^3.0.0",
+            "safe-buffer": "^5.1.1",
+            "timed-out": "^4.0.1",
+            "url-parse-lax": "^3.0.0",
+            "url-to-options": "^1.0.1"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+            }
+          }
+        },
+        "make-dir": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+          "requires": {
+            "pify": "^3.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+            }
+          }
+        },
+        "p-cancelable": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
+          "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ=="
+        },
+        "p-event": {
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz",
+          "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
+          "requires": {
+            "p-timeout": "^2.0.1"
+          }
+        },
+        "p-timeout": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
+          "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
+          "requires": {
+            "p-finally": "^1.0.0"
+          }
+        },
+        "prepend-http": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+          "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
+        },
+        "url-parse-lax": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+          "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+          "requires": {
+            "prepend-http": "^2.0.0"
+          }
+        }
+      }
+    },
+    "binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299514499&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz",
+      "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=",
+      "dev": true
+    },
+    "bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz",
+      "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "file-uri-to-path": "1.0.0"
+      }
+    },
+    "bl": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
+      "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
+      "requires": {
+        "readable-stream": "^2.3.5",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "bluebird": {
+      "version": "3.7.2",
+      "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz",
+      "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=",
+      "dev": true
+    },
+    "bn.js": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.2.0.tgz",
+      "integrity": "sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI=",
+      "dev": true
+    },
+    "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.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.nlark.com/qs/download/qs-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?cache=0&sync_timestamp=1574313384951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-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.nlark.com/brace-expansion/download/brace-expansion-1.1.11.tgz",
+      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=",
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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",
+      "integrity": "sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0=",
+      "dev": true,
+      "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",
+      "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=",
+      "dev": true,
+      "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?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
+          "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
+          "dev": true
+        }
+      }
+    },
+    "browserify-zlib": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz",
+      "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+      "dev": true,
+      "requires": {
+        "pako": "~1.0.5"
+      }
+    },
+    "browserslist": {
+      "version": "4.16.6",
+      "resolved": "https://registry.nlark.com/browserslist/download/browserslist-4.16.6.tgz?cache=0&sync_timestamp=1619789101558&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.16.6.tgz",
+      "integrity": "sha1-15ASd6WojlVO0wWxg+ybDAj2b6I=",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "^1.0.30001219",
+        "colorette": "^1.2.2",
+        "electron-to-chromium": "^1.3.723",
+        "escalade": "^3.1.1",
+        "node-releases": "^1.1.71"
+      }
+    },
+    "buffer": {
+      "version": "4.9.2",
+      "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz",
+      "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=",
+      "dev": true,
+      "requires": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
+      }
+    },
+    "buffer-alloc": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+      "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+      "requires": {
+        "buffer-alloc-unsafe": "^1.1.0",
+        "buffer-fill": "^1.0.0"
+      }
+    },
+    "buffer-alloc-unsafe": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+      "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
+    },
+    "buffer-crc32": {
+      "version": "0.2.13",
+      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
+    },
+    "buffer-fill": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
+    },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
+      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
+      "dev": true
+    },
+    "buffer-indexof": {
+      "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=",
+      "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=",
+      "dev": true
+    },
+    "bytes": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz",
+      "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=",
+      "dev": true
+    },
+    "cacache": {
+      "version": "12.0.4",
+      "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1616431156987&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz",
+      "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.5",
+        "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"
+      }
+    },
+    "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=",
+      "dev": true,
+      "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-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"
+      }
+    },
+    "cacheable-request": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
+      "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
+      "requires": {
+        "clone-response": "1.0.2",
+        "get-stream": "3.0.0",
+        "http-cache-semantics": "3.8.1",
+        "keyv": "3.0.0",
+        "lowercase-keys": "1.0.0",
+        "normalize-url": "2.0.1",
+        "responselike": "1.0.2"
+      },
+      "dependencies": {
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+        },
+        "lowercase-keys": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+          "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY="
+        },
+        "normalize-url": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
+          "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
+          "requires": {
+            "prepend-http": "^2.0.0",
+            "query-string": "^5.0.1",
+            "sort-keys": "^2.0.0"
+          }
+        },
+        "prepend-http": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+          "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
+        },
+        "query-string": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
+          "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
+          "requires": {
+            "decode-uri-component": "^0.2.0",
+            "object-assign": "^4.1.0",
+            "strict-uri-encode": "^1.0.0"
+          }
+        },
+        "sort-keys": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+          "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+          "requires": {
+            "is-plain-obj": "^1.0.0"
+          }
+        }
+      }
+    },
+    "call-bind": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.2.tgz",
+      "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
+      "dev": true,
+      "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.npm.taobao.org/callsites/download/callsites-2.0.0.tgz",
+      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+      "dev": true
+    },
+    "camel-case": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1606867359182&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz",
+      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+      "dev": true,
+      "requires": {
+        "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=1603921884289&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.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "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.30001228",
+      "resolved": "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001228.tgz?cache=0&sync_timestamp=1620658722974&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001228.tgz",
+      "integrity": "sha1-v9xZQs0zJvpR7gtC++9NqdSSp/o=",
+      "dev": true
+    },
+    "case-sensitive-paths-webpack-plugin": {
+      "version": "2.4.0",
+      "resolved": "https://registry.nlark.com/case-sensitive-paths-webpack-plugin/download/case-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=",
+      "dev": true
+    },
+    "caw": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
+      "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
+      "requires": {
+        "get-proxy": "^2.0.0",
+        "isurl": "^1.0.0-alpha5",
+        "tunnel-agent": "^0.6.0",
+        "url-to-options": "^1.0.1"
+      }
+    },
+    "chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995367379&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz",
+      "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      }
+    },
+    "chardet": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz",
+      "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
+      "dev": true
+    },
+    "check-types": {
+      "version": "8.0.3",
+      "resolved": "https://registry.npm.taobao.org/check-types/download/check-types-8.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcheck-types%2Fdownload%2Fcheck-types-8.0.3.tgz",
+      "integrity": "sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=",
+      "dev": true
+    },
+    "chokidar": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.5.1.tgz?cache=0&sync_timestamp=1610719384066&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.5.1.tgz",
+      "integrity": "sha1-7pznu+vSt59J8wR5nVRo4x4U5oo=",
+      "dev": true,
+      "requires": {
+        "anymatch": "~3.1.1",
+        "braces": "~3.0.2",
+        "fsevents": "~2.3.1",
+        "glob-parent": "~5.1.0",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.5.0"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "chownr": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchownr%2Fdownload%2Fchownr-1.1.4.tgz",
+      "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=",
+      "dev": true
+    },
+    "chrome-trace-event": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz",
+      "integrity": "sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=",
+      "dev": true
+    },
+    "ci-info": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "clean-css": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz?cache=0&sync_timestamp=1616153455026&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-css%2Fdownload%2Fclean-css-4.2.3.tgz",
+      "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=",
+      "dev": true,
+      "requires": {
+        "source-map": "~0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "clean-stack": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1618847036567&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz",
+      "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=",
+      "dev": true
+    },
+    "cli-cursor": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz",
+      "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?cache=0&sync_timestamp=1616955054342&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-highlight%2Fdownload%2Fcli-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.1",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995367379&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz",
+          "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=",
+          "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.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618560983872&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "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=1616091572272&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.6.0.tgz",
+      "integrity": "sha1-NsfcmPtqmna9YjjsP3fiQlYn6Tk=",
+      "dev": true
+    },
+    "cli-width": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-3.0.0.tgz",
+      "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=",
+      "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",
+      "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
+        },
+        "wrap-ansi": {
+          "version": "6.2.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz",
+          "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=",
+          "dev": true,
+          "requires": {
+            "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.npm.taobao.org/clone-deep/download/clone-deep-4.0.1.tgz",
+      "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=",
+      "dev": true,
+      "requires": {
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.2",
+        "shallow-clone": "^3.0.0"
+      }
+    },
+    "clone-response": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+      "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+      "requires": {
+        "mimic-response": "^1.0.0"
+      }
+    },
+    "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"
+      }
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.3.tgz",
+      "integrity": "sha1-ymf7TnuX1hHc3jns7tQiBn2RWW4=",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.1",
+        "color-string": "^1.5.4"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
+      "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+      "dev": true,
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
+    },
+    "color-string": {
+      "version": "1.5.5",
+      "resolved": "https://registry.nlark.com/color-string/download/color-string-1.5.5.tgz",
+      "integrity": "sha1-ZUdKjw50OWJfPSemoZ2J/EUiMBQ=",
+      "dev": true,
+      "requires": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
+      }
+    },
+    "colorette": {
+      "version": "1.2.2",
+      "resolved": "https://registry.nlark.com/colorette/download/colorette-1.2.2.tgz",
+      "integrity": "sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ=",
+      "dev": true
+    },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
+      "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=",
+      "dev": true,
+      "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=1618847060379&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=",
+      "dev": true
+    },
+    "component-emitter": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz",
+      "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=",
+      "dev": true
+    },
+    "compressible": {
+      "version": "2.0.18",
+      "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz?cache=0&sync_timestamp=1578286264482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-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.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "compute-scroll-into-view": {
+      "version": "1.0.17",
+      "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz",
+      "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg=="
+    },
+    "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "config-chain": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+      "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+      "requires": {
+        "ini": "^1.3.4",
+        "proto-list": "~1.2.1"
+      }
+    },
+    "connect-history-api-fallback": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz",
+      "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=",
+      "dev": true
+    },
+    "console-browserify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz",
+      "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=",
+      "dev": true
+    },
+    "console-stream": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz",
+      "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=",
+      "dev": true,
+      "optional": true
+    },
+    "consolidate": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz?cache=0&sync_timestamp=1599596863404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsolidate%2Fdownload%2Fconsolidate-0.15.1.tgz",
+      "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.1.1"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "convert-source-map": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz",
+      "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.1"
+      }
+    },
+    "cookie": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz?cache=0&sync_timestamp=1587525865178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-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
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "copy-text-to-clipboard": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/copy-text-to-clipboard/download/copy-text-to-clipboard-3.0.1.tgz?cache=0&sync_timestamp=1613626493019&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-text-to-clipboard%2Fdownload%2Fcopy-text-to-clipboard-3.0.1.tgz",
+      "integrity": "sha1-jL+PkOCkfxLkokdDc2Jl0Ve85pw="
+    },
+    "copy-webpack-plugin": {
+      "version": "5.1.2",
+      "resolved": "https://registry.nlark.com/copy-webpack-plugin/download/copy-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"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz",
+          "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^2.0.0",
+            "pkg-dir": "^3.0.0"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1620073321855&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
+        "globby": {
+          "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
+            }
+          }
+        },
+        "ignore": {
+          "version": "3.3.10",
+          "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-3.3.10.tgz",
+          "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
+          "dev": true
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-2.1.0.tgz",
+          "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
+          "dev": true,
+          "requires": {
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1618847119601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+          "dev": true
+        },
+        "slash": {
+          "version": "1.0.0",
+          "resolved": "https://registry.nlark.com/slash/download/slash-1.0.0.tgz",
+          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+          "dev": true
+        }
+      }
+    },
+    "core-js": {
+      "version": "3.12.1",
+      "resolved": "https://registry.nlark.com/core-js/download/core-js-3.12.1.tgz?cache=0&sync_timestamp=1620508113239&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js%2Fdownload%2Fcore-js-3.12.1.tgz",
+      "integrity": "sha1-a1r0/1VhbAikTThvH1EJF/8gQRI="
+    },
+    "core-js-compat": {
+      "version": "3.12.1",
+      "resolved": "https://registry.nlark.com/core-js-compat/download/core-js-compat-3.12.1.tgz",
+      "integrity": "sha1-LDAsRwhQX6cHKwrbUVbSb3gBoYs=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.16.6",
+        "semver": "7.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "7.0.0",
+          "resolved": "https://registry.nlark.com/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1618847119601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz",
+          "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=",
+          "dev": true
+        }
+      }
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+    },
+    "cosmiconfig": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-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=1610966631829&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=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+      "requires": {
+        "cross-spawn": "^7.0.1"
+      }
+    },
+    "cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz",
+      "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
+      "requires": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      }
+    },
+    "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=",
+      "dev": true,
+      "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-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?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-declaration-sorter%2Fdownload%2Fcss-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",
+      "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=1603921884289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        }
+      }
+    },
+    "css-select": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/css-select/download/css-select-2.1.0.tgz?cache=0&sync_timestamp=1618846786574&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-select%2Fdownload%2Fcss-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.nlark.com/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"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "css-what": {
+      "version": "3.4.2",
+      "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-3.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-what%2Fdownload%2Fcss-what-3.4.2.tgz",
+      "integrity": "sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ=",
+      "dev": true
+    },
+    "cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
+      "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
+      "dev": true
+    },
+    "cssnano": {
+      "version": "4.1.11",
+      "resolved": "https://registry.nlark.com/cssnano/download/cssnano-4.1.11.tgz?cache=0&sync_timestamp=1619611252094&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssnano%2Fdownload%2Fcssnano-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=1619610644776&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?cache=0&sync_timestamp=1606408790645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsso%2Fdownload%2Fcsso-4.2.0.tgz",
+      "integrity": "sha1-6jpWE0bo3J9UbW/r7dUBh884lSk=",
+      "dev": true,
+      "requires": {
+        "css-tree": "^1.1.2"
+      },
+      "dependencies": {
+        "css-tree": {
+          "version": "1.1.3",
+          "resolved": "https://registry.nlark.com/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?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.14.tgz",
+          "integrity": "sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "currently-unhandled": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "array-find-index": "^1.0.1"
+      }
+    },
+    "cwebp-bin": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/cwebp-bin/-/cwebp-bin-5.1.0.tgz",
+      "integrity": "sha512-BsPKStaNr98zfxwejWWLIGELbPERULJoD2v5ijvpeutSAGsegX7gmABgnkRK7MUucCPROXXfaPqkLAwI509JzA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "bin-build": "^3.0.0",
+        "bin-wrapper": "^4.0.1",
+        "logalot": "^2.1.0"
+      }
+    },
+    "cyclist": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz",
+      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
+      "dev": true
+    },
+    "d": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+      "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+      "requires": {
+        "es5-ext": "^0.10.50",
+        "type": "^1.0.1"
+      }
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073602368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "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": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz",
+      "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1610348634503&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "dev": true
+    },
+    "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="
+    },
+    "decompress": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
+      "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
+      "requires": {
+        "decompress-tar": "^4.0.0",
+        "decompress-tarbz2": "^4.0.0",
+        "decompress-targz": "^4.0.0",
+        "decompress-unzip": "^4.0.1",
+        "graceful-fs": "^4.1.10",
+        "make-dir": "^1.0.0",
+        "pify": "^2.3.0",
+        "strip-dirs": "^2.0.0"
+      },
+      "dependencies": {
+        "make-dir": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+          "requires": {
+            "pify": "^3.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+            }
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+        }
+      }
+    },
+    "decompress-response": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+      "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+      "requires": {
+        "mimic-response": "^1.0.0"
+      }
+    },
+    "decompress-tar": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
+      "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+      "requires": {
+        "file-type": "^5.2.0",
+        "is-stream": "^1.1.0",
+        "tar-stream": "^1.5.2"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+          "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY="
+        }
+      }
+    },
+    "decompress-tarbz2": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
+      "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+      "requires": {
+        "decompress-tar": "^4.1.0",
+        "file-type": "^6.1.0",
+        "is-stream": "^1.1.0",
+        "seek-bzip": "^1.0.5",
+        "unbzip2-stream": "^1.0.9"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "6.2.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
+          "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg=="
+        }
+      }
+    },
+    "decompress-targz": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
+      "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+      "requires": {
+        "decompress-tar": "^4.1.1",
+        "file-type": "^5.2.0",
+        "is-stream": "^1.1.0"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+          "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY="
+        }
+      }
+    },
+    "decompress-unzip": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
+      "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+      "requires": {
+        "file-type": "^3.8.0",
+        "get-stream": "^2.2.0",
+        "pify": "^2.3.0",
+        "yauzl": "^2.4.2"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "3.9.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+          "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek="
+        },
+        "get-stream": {
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+          "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+          "requires": {
+            "object-assign": "^4.0.1",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+        }
+      }
+    },
+    "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=1606859943631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz",
+      "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
+      "dev": true,
+      "requires": {
+        "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-is": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz",
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+      "dev": true
+    },
+    "deepmerge": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1572279720382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz",
+      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
+    },
+    "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=1610365857779&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": {
+        "execa": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1606970975645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz",
+          "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^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",
+          "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "is-stream": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz",
+          "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=",
+          "dev": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz",
+          "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+          "dev": true
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz",
+          "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz",
+          "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "p-finally": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz",
+          "integrity": "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=",
+          "dev": true
+        }
+      }
+    },
+    "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "del": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz?cache=0&sync_timestamp=1601076741536&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-4.1.1.tgz",
+      "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=",
+      "dev": true,
+      "requires": {
+        "@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
+            }
+          }
+        },
+        "p-map": {
+          "version": "2.1.0",
+          "resolved": "https://registry.nlark.com/p-map/download/p-map-2.1.0.tgz",
+          "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=",
+          "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=",
+      "dev": true
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "detect-node": {
+      "version": "2.0.5",
+      "resolved": "https://registry.nlark.com/detect-node/download/detect-node-2.0.5.tgz",
+      "integrity": "sha1-nScKp+qlrwtyxMnZuBTn9M5zi3k=",
+      "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=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "dingtalk-design-libs": {
+      "version": "0.0.14-alpha.3",
+      "resolved": "https://registry.nlark.com/dingtalk-design-libs/download/dingtalk-design-libs-0.0.14-alpha.3.tgz",
+      "integrity": "sha1-NiriiV9Bg1Yz4D2Zde9+MUYk55o=",
+      "requires": {
+        "axios": "^0.21.1",
+        "dingtalk-jsapi": "*",
+        "eventemitter2": "^6.4.4",
+        "query-string": "^5.1.1"
+      },
+      "dependencies": {
+        "axios": {
+          "version": "0.21.1",
+          "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz?cache=0&sync_timestamp=1608611162952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.21.1.tgz",
+          "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=",
+          "requires": {
+            "follow-redirects": "^1.10.0"
+          }
+        },
+        "follow-redirects": {
+          "version": "1.14.1",
+          "resolved": "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz?cache=0&sync_timestamp=1620555300559&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.14.1.tgz",
+          "integrity": "sha1-2RFN7Qoc/dM04WTmZirQK/2R/0M="
+        },
+        "query-string": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-5.1.1.tgz",
+          "integrity": "sha1-p4wBK3HBfgXy4/ojGd0zBoLvs8s=",
+          "requires": {
+            "decode-uri-component": "^0.2.0",
+            "object-assign": "^4.1.0",
+            "strict-uri-encode": "^1.0.0"
+          }
+        }
+      }
+    },
+    "dingtalk-jsapi": {
+      "version": "2.13.51",
+      "resolved": "https://registry.npmjs.org/dingtalk-jsapi/-/dingtalk-jsapi-2.13.51.tgz",
+      "integrity": "sha512-gm/9eLdNCUVZzOt0vLKJ2l2QoQK7CBNrYP7b86EMy9NKO6xg4QI7aYAObtde9+u6OTroF9dTsax6ngvx2fA5Gw==",
+      "requires": {
+        "promise-polyfill": "^7.1.0"
+      }
+    },
+    "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.1",
+      "resolved": "https://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz",
+      "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=",
+      "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"
+      }
+    },
+    "doctrine": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz",
+      "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=",
+      "dev": true,
+      "requires": {
+        "esutils": "^2.0.2"
+      }
+    },
+    "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",
+      "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?cache=0&sync_timestamp=1617298554829&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.2.0.tgz",
+          "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+          "dev": true
+        }
+      }
+    },
+    "dom7": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz",
+      "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==",
+      "requires": {
+        "ssr-window": "^3.0.0-alpha.1"
+      }
+    },
+    "domain-browser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz",
+      "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
+      "dev": true
+    },
+    "domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz?cache=0&sync_timestamp=1617298554829&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-1.3.1.tgz",
+      "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=",
+      "dev": true
+    },
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz?cache=0&sync_timestamp=1618563954924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomhandler%2Fdownload%2Fdomhandler-2.4.2.tgz",
+      "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "1"
+      }
+    },
+    "domready": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npm.taobao.org/domready/download/domready-1.0.8.tgz",
+      "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=",
+      "dev": true
+    },
+    "domutils": {
+      "version": "1.7.0",
+      "resolved": "https://registry.nlark.com/domutils/download/domutils-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&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",
+      "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
+    },
+    "download": {
+      "version": "6.2.5",
+      "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz",
+      "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==",
+      "requires": {
+        "caw": "^2.0.0",
+        "content-disposition": "^0.5.2",
+        "decompress": "^4.0.0",
+        "ext-name": "^5.0.0",
+        "file-type": "5.2.0",
+        "filenamify": "^2.0.0",
+        "get-stream": "^3.0.0",
+        "got": "^7.0.0",
+        "make-dir": "^1.0.0",
+        "p-event": "^1.0.0",
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+          "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY="
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+        },
+        "make-dir": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+          "requires": {
+            "pify": "^3.0.0"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+        }
+      }
+    },
+    "duplexer": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz",
+      "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=",
+      "dev": true
+    },
+    "duplexer3": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+      "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
+    },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz",
+      "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=",
+      "dev": true,
+      "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",
+      "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=",
+      "dev": true,
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "echarts": {
+      "version": "4.9.0",
+      "resolved": "https://registry.nlark.com/echarts/download/echarts-4.9.0.tgz",
+      "integrity": "sha1-qbm6oD8Doqcx5jQMVb77V6nhNH0=",
+      "requires": {
+        "zrender": "4.3.2"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+      "dev": true
+    },
+    "ejs": {
+      "version": "2.7.4",
+      "resolved": "https://registry.nlark.com/ejs/download/ejs-2.7.4.tgz",
+      "integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.3.727",
+      "resolved": "https://registry.nlark.com/electron-to-chromium/download/electron-to-chromium-1.3.727.tgz",
+      "integrity": "sha1-hX4xDKAPC3XaTh22/w4HPMSpHd8=",
+      "dev": true
+    },
+    "element-ui": {
+      "version": "2.15.1",
+      "resolved": "https://registry.nlark.com/element-ui/download/element-ui-2.15.1.tgz",
+      "integrity": "sha1-raAKpuMsAndKLndWPdhGaPgTzf8=",
+      "requires": {
+        "async-validator": "~1.8.1",
+        "babel-helper-vue-jsx-merge-props": "^2.0.0",
+        "deepmerge": "^1.2.0",
+        "normalize-wheel": "^1.0.1",
+        "resize-observer-polyfill": "^1.5.0",
+        "throttle-debounce": "^1.0.1"
+      }
+    },
+    "elliptic": {
+      "version": "6.5.4",
+      "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.4.tgz",
+      "integrity": "sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.nlark.com/emoji-regex/download/emoji-regex-8.0.0.tgz",
+      "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
+      "dev": true
+    },
+    "emojis-list": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz",
+      "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=",
+      "dev": true
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "enhanced-resolve": {
+      "version": "4.5.0",
+      "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-4.5.0.tgz?cache=0&sync_timestamp=1620663202047&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.5.0.tgz",
+      "integrity": "sha1-Lzz9hNvjtIfxjy2y7x4GSlccpew=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
+          }
+        }
+      }
+    },
+    "entities": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.2.0.tgz",
+      "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=",
+      "dev": true
+    },
+    "errno": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.8.tgz",
+      "integrity": "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=",
+      "dev": true,
+      "requires": {
+        "prr": "~1.0.1"
+      }
+    },
+    "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=",
+      "dev": true,
+      "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?cache=0&sync_timestamp=1578288503034&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ferror-stack-parser%2Fdownload%2Ferror-stack-parser-2.0.6.tgz",
+      "integrity": "sha1-WpmnB716TFinl5AtSNgoA+3mqtg=",
+      "dev": true,
+      "requires": {
+        "stackframe": "^1.1.1"
+      }
+    },
+    "es-abstract": {
+      "version": "1.18.0",
+      "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0.tgz?cache=0&sync_timestamp=1614814706790&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.18.0.tgz",
+      "integrity": "sha1-q4CzWe7Lft5MKYAAOQvFrD7HtaQ=",
+      "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",
+        "is-callable": "^1.2.3",
+        "is-negative-zero": "^2.0.1",
+        "is-regex": "^1.1.2",
+        "is-string": "^1.0.5",
+        "object-inspect": "^1.9.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.0"
+      }
+    },
+    "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"
+      }
+    },
+    "es5-ext": {
+      "version": "0.10.53",
+      "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
+      "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
+      "requires": {
+        "es6-iterator": "~2.0.3",
+        "es6-symbol": "~3.1.3",
+        "next-tick": "~1.0.0"
+      }
+    },
+    "es6-iterator": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+      "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+      "requires": {
+        "d": "1",
+        "es5-ext": "^0.10.35",
+        "es6-symbol": "^3.1.1"
+      }
+    },
+    "es6-symbol": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+      "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+      "requires": {
+        "d": "^1.0.1",
+        "ext": "^1.1.2"
+      }
+    },
+    "escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz",
+      "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=",
+      "dev": true
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+      "dev": true
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.nlark.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+    },
+    "eslint": {
+      "version": "6.8.0",
+      "resolved": "https://registry.nlark.com/eslint/download/eslint-6.8.0.tgz",
+      "integrity": "sha1-YiYtZylzn5J1cjgkMC+yJ8jJP/s=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "ajv": "^6.10.0",
+        "chalk": "^2.1.0",
+        "cross-spawn": "^6.0.5",
+        "debug": "^4.0.1",
+        "doctrine": "^3.0.0",
+        "eslint-scope": "^5.0.0",
+        "eslint-utils": "^1.4.3",
+        "eslint-visitor-keys": "^1.1.0",
+        "espree": "^6.1.2",
+        "esquery": "^1.0.1",
+        "esutils": "^2.0.2",
+        "file-entry-cache": "^5.0.1",
+        "functional-red-black-tree": "^1.0.1",
+        "glob-parent": "^5.0.0",
+        "globals": "^12.1.0",
+        "ignore": "^4.0.6",
+        "import-fresh": "^3.0.0",
+        "imurmurhash": "^0.1.4",
+        "inquirer": "^7.0.0",
+        "is-glob": "^4.0.0",
+        "js-yaml": "^3.13.1",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.3.0",
+        "lodash": "^4.17.14",
+        "minimatch": "^3.0.4",
+        "mkdirp": "^0.5.1",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.8.3",
+        "progress": "^2.0.0",
+        "regexpp": "^2.0.1",
+        "semver": "^6.1.2",
+        "strip-ansi": "^5.2.0",
+        "strip-json-comments": "^3.0.1",
+        "table": "^5.2.3",
+        "text-table": "^0.2.0",
+        "v8-compile-cache": "^2.0.3"
+      },
+      "dependencies": {
+        "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"
+          },
+          "dependencies": {
+            "semver": {
+              "version": "5.7.1",
+              "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1618847119601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+              "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+              "dev": true
+            }
+          }
+        },
+        "debug": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
+          "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "eslint-scope": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1600070417656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz",
+          "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=",
+          "dev": true,
+          "requires": {
+            "esrecurse": "^4.3.0",
+            "estraverse": "^4.1.1"
+          }
+        },
+        "globals": {
+          "version": "12.4.0",
+          "resolved": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1617957813601&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz",
+          "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=",
+          "dev": true,
+          "requires": {
+            "type-fest": "^0.8.1"
+          }
+        },
+        "import-fresh": {
+          "version": "3.3.0",
+          "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.3.0.tgz?cache=0&sync_timestamp=1608469485280&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.3.0.tgz",
+          "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=",
+          "dev": true,
+          "requires": {
+            "parent-module": "^1.0.0",
+            "resolve-from": "^4.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+          "dev": true
+        },
+        "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=1617971695678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz",
+          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+          "dev": true
+        },
+        "resolve-from": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz",
+          "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
+          "dev": true
+        },
+        "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.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz",
+          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+          "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=1618553320591&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"
+          }
+        },
+        "type-fest": {
+          "version": "0.8.1",
+          "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.8.1.tgz",
+          "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=",
+          "dev": true
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz",
+          "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "eslint-loader": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/eslint-loader/download/eslint-loader-2.2.1.tgz",
+      "integrity": "sha1-KLnBLaVAV68IReKmEScBova/gzc=",
+      "dev": true,
+      "requires": {
+        "loader-fs-cache": "^1.0.0",
+        "loader-utils": "^1.0.2",
+        "object-assign": "^4.0.1",
+        "object-hash": "^1.1.4",
+        "rimraf": "^2.6.1"
+      }
+    },
+    "eslint-plugin-vue": {
+      "version": "6.2.2",
+      "resolved": "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-6.2.2.tgz?cache=0&sync_timestamp=1618213545245&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-vue%2Fdownload%2Feslint-plugin-vue-6.2.2.tgz",
+      "integrity": "sha1-J/7NmjokeJsPER7N1UCp5WGY4P4=",
+      "dev": true,
+      "requires": {
+        "natural-compare": "^1.4.0",
+        "semver": "^5.6.0",
+        "vue-eslint-parser": "^7.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1618847119601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+          "dev": true
+        }
+      }
+    },
+    "eslint-scope": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&sync_timestamp=1600070417656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz",
+      "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=",
+      "dev": true,
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "eslint-utils": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz?cache=0&sync_timestamp=1592222107394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-1.4.3.tgz",
+      "integrity": "sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8=",
+      "dev": true,
+      "requires": {
+        "eslint-visitor-keys": "^1.1.0"
+      }
+    },
+    "eslint-visitor-keys": {
+      "version": "1.3.0",
+      "resolved": "https://registry.nlark.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz",
+      "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=",
+      "dev": true
+    },
+    "espree": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npm.taobao.org/espree/download/espree-6.2.1.tgz?cache=0&sync_timestamp=1607144072939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-6.2.1.tgz",
+      "integrity": "sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o=",
+      "dev": true,
+      "requires": {
+        "acorn": "^7.1.1",
+        "acorn-jsx": "^5.2.0",
+        "eslint-visitor-keys": "^1.1.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "7.4.1",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1620134123724&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
+          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+          "dev": true
+        }
+      }
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz",
+      "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=",
+      "dev": true
+    },
+    "esquery": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.4.0.tgz",
+      "integrity": "sha1-IUj/w4uC6McFff7UhCWz5h8PJKU=",
+      "dev": true,
+      "requires": {
+        "estraverse": "^5.1.0"
+      },
+      "dependencies": {
+        "estraverse": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz",
+          "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=",
+          "dev": true
+        }
+      }
+    },
+    "esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz",
+      "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
+      "dev": true,
+      "requires": {
+        "estraverse": "^5.2.0"
+      },
+      "dependencies": {
+        "estraverse": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz",
+          "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=",
+          "dev": true
+        }
+      }
+    },
+    "esrever": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/esrever/-/esrever-0.2.0.tgz",
+      "integrity": "sha1-lunSj08bGnZ4TNXUkOquAQ50B7g="
+    },
+    "estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz",
+      "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz",
+      "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=",
+      "dev": true
+    },
+    "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-emitter": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+      "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+      "requires": {
+        "d": "1",
+        "es5-ext": "~0.10.14"
+      }
+    },
+    "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=1606361475552&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevent-pubsub%2Fdownload%2Fevent-pubsub-4.3.0.tgz",
+      "integrity": "sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=",
+      "dev": true
+    },
+    "eventemitter2": {
+      "version": "6.4.4",
+      "resolved": "https://registry.npm.taobao.org/eventemitter2/download/eventemitter2-6.4.4.tgz",
+      "integrity": "sha1-qpboJ1xNvrAXpdDgN4DGVhKhICs="
+    },
+    "eventemitter3": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz?cache=0&sync_timestamp=1598517809015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.7.tgz",
+      "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=",
+      "dev": true
+    },
+    "events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.nlark.com/events/download/events-3.3.0.tgz",
+      "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=",
+      "dev": true
+    },
+    "eventsource": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-1.1.0.tgz?cache=0&sync_timestamp=1616041710425&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=",
+      "dev": true,
+      "requires": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "exec-buffer": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz",
+      "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "execa": "^0.7.0",
+        "p-finally": "^1.0.0",
+        "pify": "^3.0.0",
+        "rimraf": "^2.5.4",
+        "tempfile": "^2.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "dev": true,
+          "optional": 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.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true,
+          "optional": true
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true,
+          "optional": true
+        },
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+          "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "shebang-regex": "^1.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+          "dev": true,
+          "optional": true
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "execa": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1606970975645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
+      "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
+      "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"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "6.0.5",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz",
+          "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
+          "requires": {
+            "nice-try": "^1.0.4",
+            "path-key": "^2.0.1",
+            "semver": "^5.5.0",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "path-key": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1617971695678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz",
+          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1618847119601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc="
+        },
+        "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=",
+          "requires": {
+            "shebang-regex": "^1.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz",
+          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz",
+          "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "executable": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+      "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+      "requires": {
+        "pify": "^2.2.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+        }
+      }
+    },
+    "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=",
+      "dev": true,
+      "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.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "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=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "express": {
+      "version": "4.17.1",
+      "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&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.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.nlark.com/qs/download/qs-6.7.0.tgz",
+          "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=",
+          "dev": true
+        }
+      }
+    },
+    "ext": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz",
+      "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==",
+      "requires": {
+        "type": "^2.5.0"
+      },
+      "dependencies": {
+        "type": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz",
+          "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw=="
+        }
+      }
+    },
+    "ext-list": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
+      "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
+      "requires": {
+        "mime-db": "^1.28.0"
+      }
+    },
+    "ext-name": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
+      "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
+      "requires": {
+        "ext-list": "^2.0.0",
+        "sort-keys-length": "^1.0.0"
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz",
+      "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=",
+      "dev": true
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "external-editor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz",
+      "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=",
+      "dev": true,
+      "requires": {
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
+        "tmp": "^0.0.33"
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz",
+      "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "dev": true
+    },
+    "fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599697571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz",
+      "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU="
+    },
+    "fast-glob": {
+      "version": "2.2.7",
+      "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.7.tgz?cache=0&sync_timestamp=1610876645039&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-2.2.7.tgz",
+      "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=",
+      "dev": true,
+      "requires": {
+        "@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"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1620073321855&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        }
+      }
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1576340291001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "fast-xml-parser": {
+      "version": "3.21.1",
+      "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz",
+      "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "strnum": "^1.0.4"
+      }
+    },
+    "fastq": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+      "dev": true,
+      "requires": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "faye-websocket": {
+      "version": "0.11.3",
+      "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz",
+      "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=",
+      "dev": true,
+      "requires": {
+        "websocket-driver": ">=0.5.1"
+      }
+    },
+    "fd-slicer": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+      "requires": {
+        "pend": "~1.2.0"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "figures": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz",
+      "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.5"
+      }
+    },
+    "file-entry-cache": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz?cache=0&sync_timestamp=1613794357372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-entry-cache%2Fdownload%2Ffile-entry-cache-5.0.1.tgz",
+      "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=",
+      "dev": true,
+      "requires": {
+        "flat-cache": "^2.0.1"
+      }
+    },
+    "file-loader": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-4.3.0.tgz?cache=0&sync_timestamp=1603819351401&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-4.3.0.tgz",
+      "integrity": "sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.2.3",
+        "schema-utils": "^2.5.0"
+      }
+    },
+    "file-saver": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
+      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+    },
+    "file-type": {
+      "version": "12.4.2",
+      "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz",
+      "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "optional": true
+    },
+    "filename-reserved-regex": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
+      "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik="
+    },
+    "filenamify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
+      "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
+      "requires": {
+        "filename-reserved-regex": "^2.0.0",
+        "strip-outer": "^1.0.0",
+        "trim-repeated": "^1.0.0"
+      }
+    },
+    "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "find-cache-dir": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz",
+      "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=",
+      "dev": true,
+      "requires": {
+        "commondir": "^1.0.1",
+        "make-dir": "^3.0.2",
+        "pkg-dir": "^4.1.0"
+      }
+    },
+    "find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
+      "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+      "dev": true,
+      "requires": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      }
+    },
+    "find-versions": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz",
+      "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==",
+      "requires": {
+        "semver-regex": "^2.0.0"
+      }
+    },
+    "flat-cache": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz",
+      "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=",
+      "dev": true,
+      "requires": {
+        "flatted": "^2.0.0",
+        "rimraf": "2.6.3",
+        "write": "1.0.3"
+      },
+      "dependencies": {
+        "rimraf": {
+          "version": "2.6.3",
+          "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz",
+          "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        }
+      }
+    },
+    "flatted": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz?cache=0&sync_timestamp=1611059462226&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflatted%2Fdownload%2Fflatted-2.0.2.tgz",
+      "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      }
+    },
+    "follow-redirects": {
+      "version": "1.5.10",
+      "resolved": "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.5.10.tgz?cache=0&sync_timestamp=1620555300559&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.5.10.tgz",
+      "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=",
+      "requires": {
+        "debug": "=3.1.0"
+      }
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "dev": 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=",
+      "dev": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "forwarded": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz",
+      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "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-constants": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+    },
+    "fs-extra": {
+      "version": "7.0.1",
+      "resolved": "https://registry.nlark.com/fs-extra/download/fs-extra-7.0.1.tgz",
+      "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
+      }
+    },
+    "fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz?cache=0&sync_timestamp=1579628575109&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-2.1.0.tgz",
+      "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "fs-write-stream-atomic": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz",
+      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz",
+      "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=",
+      "dev": true,
+      "optional": true
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
+      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
+      "dev": true
+    },
+    "functional-red-black-tree": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz",
+      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+      "dev": true
+    },
+    "gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.2.tgz?cache=0&sync_timestamp=1603830155677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgensync%2Fdownload%2Fgensync-1.0.0-beta.2.tgz",
+      "integrity": "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=",
+      "dev": true
+    },
+    "get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz",
+      "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=",
+      "dev": true
+    },
+    "get-intrinsic": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.1.1.tgz",
+      "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.1"
+      }
+    },
+    "get-proxy": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
+      "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
+      "requires": {
+        "npm-conf": "^1.1.0"
+      }
+    },
+    "get-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+      "dev": true,
+      "optional": true
+    },
+    "get-stream": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz",
+      "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
+      "requires": {
+        "pump": "^3.0.0"
+      }
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "gifsicle": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.3.0.tgz",
+      "integrity": "sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "bin-build": "^3.0.0",
+        "bin-wrapper": "^4.0.0",
+        "execa": "^5.0.0"
+      },
+      "dependencies": {
+        "execa": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+          "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+          "dev": true,
+          "optional": 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.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+          "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+          "dev": true,
+          "optional": true
+        },
+        "human-signals": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+          "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+          "dev": true,
+          "optional": true
+        },
+        "is-stream": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+          "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+          "dev": true,
+          "optional": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true,
+          "optional": true
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+          "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+          "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "mimic-fn": "^2.1.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=",
+      "dev": true,
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073321855&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
+      "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
+      "dev": true,
+      "requires": {
+        "is-glob": "^4.0.1"
+      }
+    },
+    "glob-to-regexp": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz",
+      "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+      "dev": true
+    },
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1617957813601&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz",
+      "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=",
+      "dev": true
+    },
+    "globby": {
+      "version": "9.2.0",
+      "resolved": "https://registry.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"
+      }
+    },
+    "got": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz",
+      "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",
+      "requires": {
+        "decompress-response": "^3.2.0",
+        "duplexer3": "^0.1.4",
+        "get-stream": "^3.0.0",
+        "is-plain-obj": "^1.1.0",
+        "is-retry-allowed": "^1.0.0",
+        "is-stream": "^1.0.0",
+        "isurl": "^1.0.0-alpha5",
+        "lowercase-keys": "^1.0.0",
+        "p-cancelable": "^0.3.0",
+        "p-timeout": "^1.1.1",
+        "safe-buffer": "^5.0.1",
+        "timed-out": "^4.0.0",
+        "url-parse-lax": "^1.0.0",
+        "url-to-options": "^1.0.1"
+      },
+      "dependencies": {
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+        }
+      }
+    },
+    "graceful-fs": {
+      "version": "4.2.6",
+      "resolved": "https://registry.nlark.com/graceful-fs/download/graceful-fs-4.2.6.tgz",
+      "integrity": "sha1-/wQLKwhTsjw9MQJ1I3BvGIXXa+4="
+    },
+    "gzip-size": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz?cache=0&sync_timestamp=1605523115814&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgzip-size%2Fdownload%2Fgzip-size-5.1.1.tgz",
+      "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=",
+      "dev": true,
+      "requires": {
+        "duplexer": "^0.1.1",
+        "pify": "^4.0.1"
+      }
+    },
+    "handle-thing": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz",
+      "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=",
+      "dev": true
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "dev": true
+    },
+    "har-validator": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz?cache=0&sync_timestamp=1596082584903&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhar-validator%2Fdownload%2Fhar-validator-5.1.5.tgz",
+      "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.12.3",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
+      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        }
+      }
+    },
+    "has-bigints": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/has-bigints/download/has-bigints-1.0.1.tgz?cache=0&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-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "has-symbol-support-x": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
+      "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw=="
+    },
+    "has-symbols": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/has-symbols/download/has-symbols-1.0.2.tgz",
+      "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=",
+      "dev": true
+    },
+    "has-to-string-tag-x": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
+      "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
+      "requires": {
+        "has-symbol-support-x": "^1.4.1"
+      }
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "dev": true,
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "hash-base": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz",
+      "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=",
+      "dev": true,
+      "requires": {
+        "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?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
+          "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
+          "dev": true
+        }
+      }
+    },
+    "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
+    },
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz",
+      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
+    "he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
+      "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8="
+    },
+    "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.2",
+      "resolved": "https://registry.nlark.com/highlight.js/download/highlight.js-10.7.2.tgz",
+      "integrity": "sha1-iTGbhh7cZsSIVO0ebaIeqJ+Ec2A=",
+      "dev": true
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+      "dev": true,
+      "requires": {
+        "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",
+      "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=",
+      "dev": true
+    },
+    "hpack.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz",
+      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
+      }
+    },
+    "hsl-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz",
+      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+      "dev": true
+    },
+    "hsla-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz",
+      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+      "dev": true
+    },
+    "html-entities": {
+      "version": "1.4.0",
+      "resolved": "https://registry.nlark.com/html-entities/download/html-entities-1.4.0.tgz",
+      "integrity": "sha1-z70bAdKvr5rcobEK59/6uYxx0tw=",
+      "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=1618847060379&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-void-elements": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
+      "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
+    },
+    "html-webpack-plugin": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-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?cache=0&sync_timestamp=1584445207623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-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=1610159975962&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": "3.10.1",
+      "resolved": "https://registry.nlark.com/htmlparser2/download/htmlparser2-3.10.1.tgz?cache=0&sync_timestamp=1618846794076&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-3.10.1.tgz",
+      "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^1.3.1",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.1.1"
+      },
+      "dependencies": {
+        "entities": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz",
+          "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "http-cache-semantics": {
+      "version": "3.8.1",
+      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+      "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w=="
+    },
+    "http-deceiver": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz",
+      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+      "dev": true
+    },
+    "http-errors": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz",
+      "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
+      "dev": true,
+      "requires": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.1",
+        "statuses": ">= 1.5.0 < 2",
+        "toidentifier": "1.0.0"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+          "dev": true
+        }
+      }
+    },
+    "http-parser-js": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npm.taobao.org/http-parser-js/download/http-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?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy%2Fdownload%2Fhttp-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": "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"
+      }
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1600868443862&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
+    "https-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz",
+      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+      "dev": true
+    },
+    "human-signals": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz?cache=0&sync_timestamp=1584198662293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhuman-signals%2Fdownload%2Fhuman-signals-1.1.1.tgz",
+      "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M="
+    },
+    "i18next": {
+      "version": "20.6.1",
+      "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.6.1.tgz",
+      "integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==",
+      "requires": {
+        "@babel/runtime": "^7.12.0"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184264130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz",
+      "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
+      "dev": true,
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "icss-utils": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz?cache=0&sync_timestamp=1605801267950&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz",
+      "integrity": "sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.14"
+      }
+    },
+    "ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz?cache=0&sync_timestamp=1603838209136&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fieee754%2Fdownload%2Fieee754-1.2.1.tgz",
+      "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I="
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+      "dev": true
+    },
+    "ignore": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz",
+      "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+      "dev": true
+    },
+    "image-size": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz?cache=0&sync_timestamp=1618422657851&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimage-size%2Fdownload%2Fimage-size-0.5.5.tgz",
+      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+      "dev": true
+    },
+    "image-webpack-loader": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/image-webpack-loader/-/image-webpack-loader-8.0.1.tgz",
+      "integrity": "sha512-IarGZ9kUo1mdnnKsk/b+BImysNS09/KaqeKRTXNPpz02tRSU1Fpm5wdD09CqlfuPMgsb4rpuuMpwIrPbSxn30Q==",
+      "dev": true,
+      "requires": {
+        "imagemin": "^7.0.1",
+        "imagemin-gifsicle": "^7.0.0",
+        "imagemin-mozjpeg": "^9.0.0",
+        "imagemin-optipng": "^8.0.0",
+        "imagemin-pngquant": "^9.0.2",
+        "imagemin-svgo": "^9.0.0",
+        "imagemin-webp": "^6.0.0",
+        "loader-utils": "^2.0.0",
+        "object-assign": "^4.1.1",
+        "schema-utils": "^2.7.1"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
+          "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        }
+      }
+    },
+    "imagemin": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz",
+      "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==",
+      "dev": true,
+      "requires": {
+        "file-type": "^12.0.0",
+        "globby": "^10.0.0",
+        "graceful-fs": "^4.2.2",
+        "junk": "^3.1.0",
+        "make-dir": "^3.0.0",
+        "p-pipe": "^3.0.0",
+        "replace-ext": "^1.0.0"
+      },
+      "dependencies": {
+        "@nodelib/fs.stat": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+          "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+          "dev": true
+        },
+        "array-union": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+          "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+          "dev": true
+        },
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+          "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "dir-glob": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+          "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+          "dev": true,
+          "requires": {
+            "path-type": "^4.0.0"
+          }
+        },
+        "fast-glob": {
+          "version": "3.2.7",
+          "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
+          "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+          "dev": true,
+          "requires": {
+            "@nodelib/fs.stat": "^2.0.2",
+            "@nodelib/fs.walk": "^1.2.3",
+            "glob-parent": "^5.1.2",
+            "merge2": "^1.3.0",
+            "micromatch": "^4.0.4"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+          "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "globby": {
+          "version": "10.0.2",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz",
+          "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==",
+          "dev": true,
+          "requires": {
+            "@types/glob": "^7.1.1",
+            "array-union": "^2.1.0",
+            "dir-glob": "^3.0.1",
+            "fast-glob": "^3.0.3",
+            "glob": "^7.1.3",
+            "ignore": "^5.1.1",
+            "merge2": "^1.2.3",
+            "slash": "^3.0.0"
+          }
+        },
+        "ignore": {
+          "version": "5.1.9",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz",
+          "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==",
+          "dev": true
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.4",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+          "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.1",
+            "picomatch": "^2.2.3"
+          }
+        },
+        "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
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+          "dev": true
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "imagemin-gifsicle": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz",
+      "integrity": "sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "execa": "^1.0.0",
+        "gifsicle": "^5.0.0",
+        "is-gif": "^3.0.0"
+      }
+    },
+    "imagemin-mozjpeg": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-9.0.0.tgz",
+      "integrity": "sha512-TwOjTzYqCFRgROTWpVSt5UTT0JeCuzF1jswPLKALDd89+PmrJ2PdMMYeDLYZ1fs9cTovI9GJd68mRSnuVt691w==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "execa": "^4.0.0",
+        "is-jpg": "^2.0.0",
+        "mozjpeg": "^7.0.0"
+      },
+      "dependencies": {
+        "execa": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+          "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+          "dev": true,
+          "optional": 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",
+            "signal-exit": "^3.0.2",
+            "strip-final-newline": "^2.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+          "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "is-stream": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+          "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+          "dev": true,
+          "optional": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true,
+          "optional": true
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+          "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+          "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        }
+      }
+    },
+    "imagemin-optipng": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz",
+      "integrity": "sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "exec-buffer": "^3.0.0",
+        "is-png": "^2.0.0",
+        "optipng-bin": "^7.0.0"
+      }
+    },
+    "imagemin-pngquant": {
+      "version": "9.0.2",
+      "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-9.0.2.tgz",
+      "integrity": "sha512-cj//bKo8+Frd/DM8l6Pg9pws1pnDUjgb7ae++sUX1kUVdv2nrngPykhiUOgFeE0LGY/LmUbCf4egCHC4YUcZSg==",
+      "requires": {
+        "execa": "^4.0.0",
+        "is-png": "^2.0.0",
+        "is-stream": "^2.0.0",
+        "ow": "^0.17.0",
+        "pngquant-bin": "^6.0.0"
+      },
+      "dependencies": {
+        "execa": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+          "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+          "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",
+            "signal-exit": "^3.0.2",
+            "strip-final-newline": "^2.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+          "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "is-stream": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+          "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+          "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+          "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        }
+      }
+    },
+    "imagemin-svgo": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-9.0.0.tgz",
+      "integrity": "sha512-uNgXpKHd99C0WODkrJ8OO/3zW3qjgS4pW7hcuII0RcHN3tnKxDjJWcitdVC/TZyfIqSricU8WfrHn26bdSW62g==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "is-svg": "^4.2.1",
+        "svgo": "^2.1.0"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+          "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+          "dev": true,
+          "optional": true
+        },
+        "css-select": {
+          "version": "4.1.3",
+          "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
+          "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
+          "dev": true,
+          "optional": 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-tree": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+          "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "mdn-data": "2.0.14",
+            "source-map": "^0.6.1"
+          }
+        },
+        "css-what": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
+          "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
+          "dev": true,
+          "optional": true
+        },
+        "dom-serializer": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+          "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "domelementtype": "^2.0.1",
+            "domhandler": "^4.2.0",
+            "entities": "^2.0.0"
+          }
+        },
+        "domelementtype": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+          "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+          "dev": true,
+          "optional": true
+        },
+        "domhandler": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
+          "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "domelementtype": "^2.2.0"
+          }
+        },
+        "domutils": {
+          "version": "2.8.0",
+          "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+          "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "dom-serializer": "^1.0.1",
+            "domelementtype": "^2.2.0",
+            "domhandler": "^4.2.0"
+          }
+        },
+        "mdn-data": {
+          "version": "2.0.14",
+          "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+          "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+          "dev": true,
+          "optional": true
+        },
+        "nth-check": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
+          "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "boolbase": "^1.0.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true,
+          "optional": true
+        },
+        "svgo": {
+          "version": "2.8.0",
+          "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
+          "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@trysound/sax": "0.2.0",
+            "commander": "^7.2.0",
+            "css-select": "^4.1.3",
+            "css-tree": "^1.1.3",
+            "csso": "^4.2.0",
+            "picocolors": "^1.0.0",
+            "stable": "^0.1.8"
+          }
+        }
+      }
+    },
+    "imagemin-webp": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/imagemin-webp/-/imagemin-webp-6.0.0.tgz",
+      "integrity": "sha512-DmVCkI8H1csyqAExsk93LzC88gj2uKXaLLW5Ly+WYsvNx7xv5cJAlozXWIx9Z0kEQr9w98gphi5aP2b++iDH8g==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "cwebp-bin": "^5.0.0",
+        "exec-buffer": "^3.0.0",
+        "is-cwebp-readable": "^3.0.0"
+      }
+    },
+    "immer": {
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.15.tgz",
+      "integrity": "sha512-yM7jo9+hvYgvdCQdqvhCNRRio0SCXc8xDPzA25SvKWa7b1WVPjLwQs1VYU5JPXjcJPTqAa5NP5dqpORGYBQ2AA=="
+    },
+    "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=1608469485280&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.npm.taobao.org/import-from/download/import-from-2.1.0.tgz",
+      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "import-lazy": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz",
+      "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ=="
+    },
+    "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"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        }
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "dev": true
+    },
+    "indent-string": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz?cache=0&sync_timestamp=1618679442183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Findent-string%2Fdownload%2Findent-string-4.0.0.tgz",
+      "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=",
+      "dev": true
+    },
+    "indexes-of": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz",
+      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+      "dev": true
+    },
+    "infer-owner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz",
+      "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "requires": {
+        "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.npmjs.org/ini/-/ini-1.3.8.tgz",
+      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+    },
+    "inquirer": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-7.3.3.tgz?cache=0&sync_timestamp=1614296916461&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-7.3.3.tgz",
+      "integrity": "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM=",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^4.1.0",
+        "cli-cursor": "^3.1.0",
+        "cli-width": "^3.0.0",
+        "external-editor": "^3.0.3",
+        "figures": "^3.0.0",
+        "lodash": "^4.17.19",
+        "mute-stream": "0.0.8",
+        "run-async": "^2.4.0",
+        "rxjs": "^6.6.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0",
+        "through": "^2.3.6"
+      },
+      "dependencies": {
+        "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.1",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995367379&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz",
+          "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "cli-cursor": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz",
+          "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^3.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.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz",
+          "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+          "dev": true
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz",
+          "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "restore-cursor": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz",
+          "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=",
+          "dev": true,
+          "requires": {
+            "onetime": "^5.1.0",
+            "signal-exit": "^3.0.2"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618560983872&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "internal-ip": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz?cache=0&sync_timestamp=1605885653768&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz",
+      "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=",
+      "dev": true,
+      "requires": {
+        "default-gateway": "^4.2.0",
+        "ipaddr.js": "^1.9.0"
+      },
+      "dependencies": {
+        "default-gateway": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz?cache=0&sync_timestamp=1610365857779&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"
+          }
+        }
+      }
+    },
+    "into-stream": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
+      "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
+      "requires": {
+        "from2": "^2.1.1",
+        "p-is-promise": "^1.1.0"
+      }
+    },
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+      "dev": true
+    },
+    "ip-regex": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+      "dev": true
+    },
+    "ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=",
+      "dev": true
+    },
+    "is-absolute-url": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz",
+      "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+      "dev": true
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-arguments": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.1.0.tgz?cache=0&sync_timestamp=1607117383813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-arguments%2Fdownload%2Fis-arguments-1.1.0.tgz",
+      "integrity": "sha1-YjUwMd++4HzrNGVqa95Z7+yujdk=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^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=",
+      "dev": true
+    },
+    "is-bigint": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/is-bigint/download/is-bigint-1.0.2.tgz",
+      "integrity": "sha1-/7OBRCUDI1rSReqJ5Fs9v/BA7lo=",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz",
+      "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
+      "dev": true,
+      "requires": {
+        "binary-extensions": "^2.0.0"
+      }
+    },
+    "is-boolean-object": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/is-boolean-object/download/is-boolean-object-1.1.1.tgz",
+      "integrity": "sha1-PAh48DXLghIo01DS4eNnGXFqPeg=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2"
+      }
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604429388528&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+      "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+      "dev": true
+    },
+    "is-callable": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.3.tgz?cache=0&sync_timestamp=1612132911724&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.3.tgz",
+      "integrity": "sha1-ix4FALc6HXbHBIdjbzaOUZ3o244=",
+      "dev": true
+    },
+    "is-ci": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz?cache=0&sync_timestamp=1613632023079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-ci%2Fdownload%2Fis-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.4.0",
+      "resolved": "https://registry.nlark.com/is-core-module/download/is-core-module-2.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-core-module%2Fdownload%2Fis-core-module-2.4.0.tgz",
+      "integrity": "sha1-jp/I4VAnsBFBgCbpjw5vTYYwXME=",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.3"
+      }
+    },
+    "is-cwebp-readable": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-cwebp-readable/-/is-cwebp-readable-3.0.0.tgz",
+      "integrity": "sha512-bpELc7/Q1/U5MWHn4NdHI44R3jxk0h9ew9ljzabiRl70/UIjL/ZAqRMb52F5+eke/VC8yTiv4Ewryo1fPWidvA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "file-type": "^10.5.0"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "10.11.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz",
+          "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-date-object": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/is-date-object/download/is-date-object-1.0.4.tgz",
+      "integrity": "sha1-VQz8wDr62gXuo90wmBx7CVUfc+U=",
+      "dev": true
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+      "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+      "dev": true,
+      "requires": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
+      }
+    },
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+      "dev": true
+    },
+    "is-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=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-finite": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+      "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+      "dev": true,
+      "optional": 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&sync_timestamp=1618552489864&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
+    },
+    "is-gif": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz",
+      "integrity": "sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "file-type": "^10.4.0"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "10.11.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz",
+          "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "is-glob": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
+      "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-hotkey": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz",
+      "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw=="
+    },
+    "is-jpg": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz",
+      "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=",
+      "dev": true,
+      "optional": true
+    },
+    "is-natural-number": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
+      "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg="
+    },
+    "is-negative-zero": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.1.tgz?cache=0&sync_timestamp=1607125693555&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-negative-zero%2Fdownload%2Fis-negative-zero-2.0.1.tgz",
+      "integrity": "sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ=",
+      "dev": true
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-number-object": {
+      "version": "1.0.5",
+      "resolved": "https://registry.nlark.com/is-number-object/download/is-number-object-1.0.5.tgz",
+      "integrity": "sha1-bt+u7XlQz/Ga/tzp+/yp7m3Sies=",
+      "dev": true
+    },
+    "is-obj": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz",
+      "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=",
+      "dev": true
+    },
+    "is-object": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz",
+      "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA=="
+    },
+    "is-path-cwd": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz",
+      "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=",
+      "dev": true
+    },
+    "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=1620047110449&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": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz?cache=0&sync_timestamp=1618600489644&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-1.1.0.tgz",
+      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz",
+      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-png": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz",
+      "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g=="
+    },
+    "is-regex": {
+      "version": "1.1.3",
+      "resolved": "https://registry.nlark.com/is-regex/download/is-regex-1.1.3.tgz",
+      "integrity": "sha1-0Cn5r/ZEi5Prvj8z2scVEf3L758=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "has-symbols": "^1.0.2"
+      }
+    },
+    "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-retry-allowed": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
+      "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg=="
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+    },
+    "is-string": {
+      "version": "1.0.6",
+      "resolved": "https://registry.nlark.com/is-string/download/is-string-1.0.6.tgz",
+      "integrity": "sha1-P+XVmS+w2TQE8yWE1LAXmnG1Sl8=",
+      "dev": true
+    },
+    "is-svg": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.3.2.tgz",
+      "integrity": "sha512-mM90duy00JGMyjqIVHu9gNTjywdZV+8qNasX8cm/EEYZ53PHDgajvbBwNVvty5dwSAxLUD3p3bdo+7sR/UMrpw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "fast-xml-parser": "^3.19.0"
+      }
+    },
+    "is-symbol": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/is-symbol/download/is-symbol-1.0.4.tgz?cache=0&sync_timestamp=1620501174327&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-symbol%2Fdownload%2Fis-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=",
+      "dev": true
+    },
+    "is-url": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+      "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
+    },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+      "dev": true,
+      "optional": true
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz",
+      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
+      "dev": true
+    },
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+      "dev": true
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+      "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=",
+      "dev": true
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "dev": true
+    },
+    "isurl": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
+      "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
+      "requires": {
+        "has-to-string-tag-x": "^1.2.0",
+        "is-object": "^1.0.1"
+      }
+    },
+    "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-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.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618560983872&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "js-base64": {
+      "version": "2.6.4",
+      "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.6.4.tgz?cache=0&sync_timestamp=1604448575022&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-base64%2Fdownload%2Fjs-base64-2.6.4.tgz",
+      "integrity": "sha1-9OaGxd4eofhn28rT1G2WlCjfmMQ=",
+      "dev": true
+    },
+    "js-message": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npm.taobao.org/js-message/download/js-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",
+      "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=",
+      "dev": true
+    },
+    "js-yaml": {
+      "version": "3.14.1",
+      "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.1.tgz?cache=0&sync_timestamp=1618435004368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.1.tgz",
+      "integrity": "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=",
+      "dev": true,
+      "requires": {
+        "argparse": "^1.0.7",
+        "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=",
+      "dev": true
+    },
+    "jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz?cache=0&sync_timestamp=1603891198638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-2.5.2.tgz",
+      "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=",
+      "dev": true
+    },
+    "json-buffer": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+      "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
+    },
+    "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=",
+      "dev": true
+    },
+    "json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=",
+      "dev": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&sync_timestamp=1609553708276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "json3": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz",
+      "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=",
+      "dev": true
+    },
+    "json5": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.2.0.tgz",
+      "integrity": "sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM=",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.5"
+      }
+    },
+    "jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz?cache=0&sync_timestamp=1604161917513&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+      "dev": true,
+      "requires": {
+        "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=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "junk": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
+      "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
+      "dev": true
+    },
+    "keyv": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
+      "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
+      "requires": {
+        "json-buffer": "3.0.0"
+      }
+    },
+    "killable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz",
+      "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
+      "dev": true
+    },
+    "kind-of": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
+      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
+      }
+    },
+    "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.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0"
+      },
+      "dependencies": {
+        "parse-json": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "error-ex": "^1.2.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "loader-fs-cache": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz",
+      "integrity": "sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k=",
+      "dev": true,
+      "requires": {
+        "find-cache-dir": "^0.1.1",
+        "mkdirp": "^0.5.1"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-0.1.1.tgz",
+          "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "mkdirp": "^0.5.1",
+            "pkg-dir": "^1.0.0"
+          }
+        },
+        "find-up": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz",
+          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+          "dev": true,
+          "requires": {
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz",
+          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+          "dev": true,
+          "requires": {
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "pkg-dir": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz",
+          "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+          "dev": true,
+          "requires": {
+            "find-up": "^1.0.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=1610028023329&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz",
+      "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=",
+      "dev": true
+    },
+    "loader-utils": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz?cache=0&sync_timestamp=1584445207623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-1.4.0.tgz",
+      "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=",
+      "dev": true,
+      "requires": {
+        "big.js": "^5.2.2",
+        "emojis-list": "^3.0.0",
+        "json5": "^1.0.1"
+      },
+      "dependencies": {
+        "json5": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz",
+          "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        }
+      }
+    },
+    "locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz",
+      "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+      "dev": true,
+      "requires": {
+        "p-locate": "^4.1.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1613835838133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.21.tgz",
+      "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=",
+      "dev": true
+    },
+    "lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+    },
+    "lodash.clonedeep": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+      "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
+    },
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz?cache=0&sync_timestamp=1571657605147&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.debounce%2Fdownload%2Flodash.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.foreach": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+      "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM="
+    },
+    "lodash.isequal": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+      "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
+    },
+    "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.throttle": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+      "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+    },
+    "lodash.toarray": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
+      "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE="
+    },
+    "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?cache=0&sync_timestamp=1618847128438&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flog-symbols%2Fdownload%2Flog-symbols-2.2.0.tgz",
+      "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1"
+      }
+    },
+    "logalot": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz",
+      "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "figures": "^1.3.5",
+        "squeak": "^1.0.0"
+      },
+      "dependencies": {
+        "figures": {
+          "version": "1.7.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+          "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5",
+            "object-assign": "^4.1.0"
+          }
+        }
+      }
+    },
+    "loglevel": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.1.tgz?cache=0&sync_timestamp=1606312255832&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.7.1.tgz",
+      "integrity": "sha1-AF/eL15uRwaPk1/yhXPhJe9y8Zc=",
+      "dev": true
+    },
+    "longest": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+      "dev": true,
+      "optional": true
+    },
+    "loud-rejection": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
+      }
+    },
+    "lower-case": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz?cache=0&sync_timestamp=1606867304538&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flower-case%2Fdownload%2Flower-case-1.1.4.tgz",
+      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+      "dev": true
+    },
+    "lowercase-keys": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+      "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
+    },
+    "lpad-align": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz",
+      "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "get-stdin": "^4.0.1",
+        "indent-string": "^2.1.0",
+        "longest": "^1.0.0",
+        "meow": "^3.3.0"
+      },
+      "dependencies": {
+        "indent-string": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+          "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "repeating": "^2.0.0"
+          }
+        }
+      }
+    },
+    "lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz",
+      "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
+      "dev": true,
+      "requires": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "make-dir": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-3.1.0.tgz",
+      "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
+      "dev": true,
+      "requires": {
+        "semver": "^6.0.0"
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "dev": true
+    },
+    "map-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+      "dev": true,
+      "optional": true
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "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=",
+      "dev": true,
+      "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?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmdn-data%2Fdownload%2Fmdn-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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "meow": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
+      }
+    },
+    "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-options": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/merge-options/download/merge-options-1.0.1.tgz?cache=0&sync_timestamp=1606146913544&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge-options%2Fdownload%2Fmerge-options-1.0.1.tgz",
+      "integrity": "sha1-KmSyRFe+zU5NxggoMkfpTOWJqjI=",
+      "dev": true,
+      "requires": {
+        "is-plain-obj": "^1.1"
+      }
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz",
+      "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A="
+    },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz?cache=0&sync_timestamp=1591170027156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge2%2Fdownload%2Fmerge2-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=",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.nlark.com/micromatch/download/micromatch-3.1.10.tgz",
+      "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "mime": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.5.2.tgz",
+      "integrity": "sha1-bj3GzCuVEGQ4MOXxnVy3U9pe6r4=",
+      "dev": true
+    },
+    "mime-db": {
+      "version": "1.47.0",
+      "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.47.0.tgz?cache=0&sync_timestamp=1617306166016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.47.0.tgz",
+      "integrity": "sha1-jLMT5Zll08Bc+/iYkVomevRqM1w="
+    },
+    "mime-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/mime-match/-/mime-match-1.0.2.tgz",
+      "integrity": "sha1-P4fDHprxpf1IX7nbE0Qosju7e6g=",
+      "requires": {
+        "wildcard": "^1.1.0"
+      }
+    },
+    "mime-types": {
+      "version": "2.1.30",
+      "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.30.tgz?cache=0&sync_timestamp=1617340124913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.30.tgz",
+      "integrity": "sha1-bnvotMR5gl+F7WMmaV23P5MF1i0=",
+      "dev": true,
+      "requires": {
+        "mime-db": "1.47.0"
+      }
+    },
+    "mimic-fn": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz",
+      "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
+      "dev": true
+    },
+    "mimic-response": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+      "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
+    },
+    "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",
+      "integrity": "sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "normalize-url": "1.9.1",
+        "schema-utils": "^1.0.0",
+        "webpack-sources": "^1.1.0"
+      },
+      "dependencies": {
+        "normalize-url": {
+          "version": "1.9.1",
+          "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz",
+          "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+          "dev": true,
+          "requires": {
+            "object-assign": "^4.0.1",
+            "prepend-http": "^1.0.0",
+            "query-string": "^4.1.0",
+            "sort-keys": "^1.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz",
+      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+      "dev": true,
+      "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&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz",
+      "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=",
+      "dev": true
+    },
+    "minipass": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz",
+      "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz",
+          "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+          "dev": true
+        }
+      }
+    },
+    "minipass-collect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/minipass-collect/download/minipass-collect-1.0.2.tgz",
+      "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-flush": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/minipass-flush/download/minipass-flush-1.0.5.tgz",
+      "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-pipeline": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz?cache=0&sync_timestamp=1595998621838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass-pipeline%2Fdownload%2Fminipass-pipeline-1.2.4.tgz",
+      "integrity": "sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw=",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "mississippi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz",
+      "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
+      "dev": true,
+      "requires": {
+        "concat-stream": "^1.5.0",
+        "duplexify": "^3.4.2",
+        "end-of-stream": "^1.1.0",
+        "flush-write-stream": "^1.0.0",
+        "from2": "^2.1.0",
+        "parallel-transform": "^1.1.0",
+        "pump": "^3.0.0",
+        "pumpify": "^1.3.3",
+        "stream-each": "^1.1.0",
+        "through2": "^2.0.0"
+      }
+    },
+    "mitt": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/mitt/download/mitt-1.1.2.tgz",
+      "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=",
+      "dev": true
+    },
+    "mixin-deep": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz",
+      "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz",
+      "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.5"
+      }
+    },
+    "moment": {
+      "version": "2.29.1",
+      "resolved": "https://registry.npm.taobao.org/moment/download/moment-2.29.1.tgz?cache=0&sync_timestamp=1601983320283&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-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=",
+      "dev": true,
+      "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"
+      }
+    },
+    "mozjpeg": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.1.1.tgz",
+      "integrity": "sha512-iIDxWvzhWvLC9mcRJ1uSkiKaj4drF58oCqK2bITm5c2Jt6cJ8qQjSSru2PCaysG+hLIinryj8mgz5ZJzOYTv1A==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "bin-build": "^3.0.0",
+        "bin-wrapper": "^4.0.0"
+      }
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+    },
+    "multicast-dns": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npm.taobao.org/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
+    },
+    "mutation-observer": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/mutation-observer/download/mutation-observer-1.0.3.tgz",
+      "integrity": "sha1-QukiKxAbyoLlup1aes9KFMDyY9A="
+    },
+    "mute-stream": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz",
+      "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=",
+      "dev": true
+    },
+    "mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz",
+      "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "namespace-emitter": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/namespace-emitter/-/namespace-emitter-2.0.1.tgz",
+      "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g=="
+    },
+    "nan": {
+      "version": "2.14.2",
+      "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.2.tgz?cache=0&sync_timestamp=1602591675048&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.2.tgz",
+      "integrity": "sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk=",
+      "dev": true,
+      "optional": true
+    },
+    "nanoid": {
+      "version": "3.1.30",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz",
+      "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ=="
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz",
+      "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz?cache=0&sync_timestamp=1594317434347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz",
+      "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=",
+      "dev": true
+    },
+    "next-tick": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+      "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
+    },
+    "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=1614510016909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz",
+      "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y="
+    },
+    "no-case": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz",
+      "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
+      "dev": true,
+      "requires": {
+        "lower-case": "^1.1.1"
+      }
+    },
+    "node-forge": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.10.0.tgz",
+      "integrity": "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=",
+      "dev": true
+    },
+    "node-ipc": {
+      "version": "9.1.4",
+      "resolved": "https://registry.nlark.com/node-ipc/download/node-ipc-9.1.4.tgz",
+      "integrity": "sha1-Ks+WJoGv2sJgKHbZj+ZDTVTZvTw=",
+      "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=",
+      "dev": true,
+      "requires": {
+        "assert": "^1.1.1",
+        "browserify-zlib": "^0.2.0",
+        "buffer": "^4.3.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.1",
+        "events": "^3.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
+        "path-browserify": "0.0.1",
+        "process": "^0.11.10",
+        "punycode": "^1.2.4",
+        "querystring-es3": "^0.2.0",
+        "readable-stream": "^2.3.3",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.7.2",
+        "string_decoder": "^1.0.0",
+        "timers-browserify": "^2.0.4",
+        "tty-browserify": "0.0.0",
+        "url": "^0.11.0",
+        "util": "^0.11.0",
+        "vm-browserify": "^1.0.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        }
+      }
+    },
+    "node-releases": {
+      "version": "1.1.71",
+      "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.71.tgz",
+      "integrity": "sha1-yxM0sXmJaxyJ7P3UtyX7e738fbs=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1618847119601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+          "dev": true
+        }
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "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.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz",
+      "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
+      "dev": true
+    },
+    "normalize-wheel": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz",
+      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
+    },
+    "npm-conf": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
+      "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
+      "requires": {
+        "config-chain": "^1.1.11",
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+        }
+      }
+    },
+    "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=",
+      "requires": {
+        "path-key": "^2.0.0"
+      },
+      "dependencies": {
+        "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=1617971695678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz",
+          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+        }
+      }
+    },
+    "nprogress": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/nprogress/download/nprogress-0.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnprogress%2Fdownload%2Fnprogress-0.2.0.tgz",
+      "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E="
+    },
+    "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=1606860944410&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnth-check%2Fdownload%2Fnth-check-1.0.2.tgz",
+      "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=",
+      "dev": true,
+      "requires": {
+        "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
+    },
+    "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=",
+      "dev": true
+    },
+    "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=1571657171505&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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "object-hash": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npm.taobao.org/object-hash/download/object-hash-1.3.1.tgz?cache=0&sync_timestamp=1608920995865&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-hash%2Fdownload%2Fobject-hash-1.3.1.tgz",
+      "integrity": "sha1-/eRSCYqVHLFF8Dm7fUVUSd3BJt8=",
+      "dev": true
+    },
+    "object-inspect": {
+      "version": "1.10.3",
+      "resolved": "https://registry.nlark.com/object-inspect/download/object-inspect-1.10.3.tgz",
+      "integrity": "sha1-wqp9LQn1DJk3VwT3oK3yTFeC02k=",
+      "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "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=1604115104654&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.2.tgz",
+      "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
+      "dev": true,
+      "requires": {
+        "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?cache=0&sync_timestamp=1613860004199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.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=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "object.values": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/object.values/download/object.values-1.1.3.tgz?cache=0&sync_timestamp=1614057640160&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.values%2Fdownload%2Fobject.values-1.1.3.tgz",
+      "integrity": "sha1-6qix4XWJ8C9pjbCT98Yu4WmXQu4=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.0-next.2",
+        "has": "^1.0.3"
+      }
+    },
+    "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=",
+      "dev": true,
+      "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",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^1.0.0"
+      }
+    },
+    "open": {
+      "version": "6.4.0",
+      "resolved": "https://registry.nlark.com/open/download/open-6.4.0.tgz?cache=0&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=",
+      "dev": true,
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "optionator": {
+      "version": "0.8.3",
+      "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz",
+      "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=",
+      "dev": true,
+      "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"
+      }
+    },
+    "optipng-bin": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.1.tgz",
+      "integrity": "sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "bin-build": "^3.0.0",
+        "bin-wrapper": "^4.0.0"
+      }
+    },
+    "ora": {
+      "version": "3.4.0",
+      "resolved": "https://registry.nlark.com/ora/download/ora-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=1618553320591&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=",
+      "dev": true
+    },
+    "os-filter-obj": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
+      "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
+      "requires": {
+        "arch": "^2.1.0"
+      }
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+      "dev": true
+    },
+    "ow": {
+      "version": "0.17.0",
+      "resolved": "https://registry.npmjs.org/ow/-/ow-0.17.0.tgz",
+      "integrity": "sha512-i3keDzDQP5lWIe4oODyDFey1qVrq2hXKTuTH2VpqwpYtzPiKZt2ziRI4NBQmgW40AnV5Euz17OyWweCb+bNEQA==",
+      "requires": {
+        "type-fest": "^0.11.0"
+      },
+      "dependencies": {
+        "type-fest": {
+          "version": "0.11.0",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
+          "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ=="
+        }
+      }
+    },
+    "p-cancelable": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
+      "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw=="
+    },
+    "p-event": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz",
+      "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=",
+      "requires": {
+        "p-timeout": "^1.1.1"
+      }
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+    },
+    "p-is-promise": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+      "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4="
+    },
+    "p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz",
+      "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=",
+      "dev": true,
+      "requires": {
+        "p-try": "^2.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz",
+      "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+      "dev": true,
+      "requires": {
+        "p-limit": "^2.2.0"
+      }
+    },
+    "p-map": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/p-map/download/p-map-3.0.0.tgz",
+      "integrity": "sha1-1wTZr4orpoTiYA2aIVmD1BQal50=",
+      "dev": true,
+      "requires": {
+        "aggregate-error": "^3.0.0"
+      }
+    },
+    "p-map-series": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz",
+      "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=",
+      "requires": {
+        "p-reduce": "^1.0.0"
+      }
+    },
+    "p-pipe": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz",
+      "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==",
+      "dev": true
+    },
+    "p-reduce": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
+      "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo="
+    },
+    "p-retry": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/p-retry/download/p-retry-3.0.1.tgz",
+      "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=",
+      "dev": true,
+      "requires": {
+        "retry": "^0.12.0"
+      }
+    },
+    "p-timeout": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
+      "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",
+      "requires": {
+        "p-finally": "^1.0.0"
+      }
+    },
+    "p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
+      "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
+      "dev": true
+    },
+    "pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1610209123970&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz",
+      "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=",
+      "dev": true
+    },
+    "parallel-transform": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz",
+      "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=",
+      "dev": true,
+      "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",
+      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0"
+      }
+    },
+    "parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz",
+      "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=",
+      "dev": true,
+      "requires": {
+        "callsites": "^3.0.0"
+      },
+      "dependencies": {
+        "callsites": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz",
+          "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=",
+          "dev": true
+        }
+      }
+    },
+    "parse-asn1": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.6.tgz",
+      "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=",
+      "dev": true,
+      "requires": {
+        "asn1.js": "^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=1610966631829&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?cache=0&sync_timestamp=1595850861876&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-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?cache=0&sync_timestamp=1595850861876&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-6.0.1.tgz",
+          "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=",
+          "dev": true
+        }
+      }
+    },
+    "parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
+      "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=",
+      "dev": true
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "dev": true
+    },
+    "path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz",
+      "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+      "dev": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
+    },
+    "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": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971695678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz",
+      "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U="
+    },
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz",
+      "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=",
+      "dev": true
+    },
+    "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?cache=0&sync_timestamp=1611752015315&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-type%2Fdownload%2Fpath-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.nlark.com/pbkdf2/download/pbkdf2-3.1.2.tgz",
+      "integrity": "sha1-3YIqoIh1gOUvGgOdw+2hCO+uMHU=",
+      "dev": true,
+      "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"
+      }
+    },
+    "pend": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+      "dev": true
+    },
+    "picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true,
+      "optional": true
+    },
+    "picomatch": {
+      "version": "2.2.3",
+      "resolved": "https://registry.nlark.com/picomatch/download/picomatch-2.2.3.tgz",
+      "integrity": "sha1-RlVH81nMwgbTxI5Goby4m/fuYZ0=",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "pkg-dir": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz",
+      "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=",
+      "dev": true,
+      "requires": {
+        "find-up": "^4.0.0"
+      }
+    },
+    "pngquant-bin": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-6.0.1.tgz",
+      "integrity": "sha512-Q3PUyolfktf+hYio6wsg3SanQzEU/v8aICg/WpzxXcuCMRb7H2Q81okfpcEztbMvw25ILjd3a87doj2N9kvbpQ==",
+      "requires": {
+        "bin-build": "^3.0.0",
+        "bin-wrapper": "^4.0.1",
+        "execa": "^4.0.0"
+      },
+      "dependencies": {
+        "execa": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+          "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+          "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",
+            "signal-exit": "^3.0.2",
+            "strip-final-newline": "^2.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+          "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "is-stream": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+          "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+          "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+          "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        }
+      }
+    },
+    "pnp-webpack-plugin": {
+      "version": "1.6.4",
+      "resolved": "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz",
+      "integrity": "sha1-yXEaxNxIpoXauvyG+Lbdn434QUk=",
+      "dev": true,
+      "requires": {
+        "ts-pnp": "^1.1.6"
+      }
+    },
+    "portfinder": {
+      "version": "1.0.28",
+      "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz?cache=0&sync_timestamp=1596018176291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.28.tgz",
+      "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=",
+      "dev": true,
+      "requires": {
+        "async": "^2.6.2",
+        "debug": "^3.1.1",
+        "mkdirp": "^0.5.5"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.3",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz",
+          "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=",
+          "dev": true
+        }
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "postcss": {
+      "version": "7.0.35",
+      "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1620676610377&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz",
+      "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "source-map": "^0.6.1",
+        "supports-color": "^6.1.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618560983872&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
+          "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "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=1609689176591&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"
+      }
+    },
+    "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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-discard-comments": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz?cache=0&sync_timestamp=1618056302844&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-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.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz?cache=0&sync_timestamp=1618056303153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-duplicates%2Fdownload%2Fpostcss-discard-duplicates-4.0.2.tgz",
+      "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-discard-empty": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz?cache=0&sync_timestamp=1618056303643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-empty%2Fdownload%2Fpostcss-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.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz",
+      "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-load-config": {
+      "version": "2.1.2",
+      "resolved": "https://registry.nlark.com/postcss-load-config/download/postcss-load-config-2.1.2.tgz?cache=0&sync_timestamp=1618847231779&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-load-config%2Fdownload%2Fpostcss-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",
+      "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"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-merge-rules": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/postcss-merge-rules/download/postcss-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=1620752939806&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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-minify-gradients": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "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=1620752939806&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=1602588238811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-2.0.0.tgz",
+      "integrity": "sha1-gYcZoa4doyX5gyRGsBE27rSTzX4=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.5"
+      }
+    },
+    "postcss-modules-local-by-default": {
+      "version": "3.0.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=1602587624722&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"
+      }
+    },
+    "postcss-modules-scope": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz?cache=0&sync_timestamp=1602593133331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-scope%2Fdownload%2Fpostcss-modules-scope-2.2.0.tgz",
+      "integrity": "sha1-OFyuATzHdD9afXYC0Qc6iequYu4=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.6",
+        "postcss-selector-parser": "^6.0.0"
+      }
+    },
+    "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=1602586308035&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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-positions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz?cache=0&sync_timestamp=1618056304554&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-positions%2Fdownload%2Fpostcss-normalize-positions-4.0.2.tgz",
+      "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-repeat-style": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz?cache=0&sync_timestamp=1618056314160&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-repeat-style%2Fdownload%2Fpostcss-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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-unicode": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-ordered-values": {
+      "version": "4.1.2",
+      "resolved": "https://registry.nlark.com/postcss-ordered-values/download/postcss-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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-prefix-selector": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/postcss-prefix-selector/download/postcss-prefix-selector-1.9.0.tgz",
+      "integrity": "sha1-21SYArefn5H3QZyMH4bTHZdK/14=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-reduce-initial": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npm.taobao.org/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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "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=1620752939806&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-svgo": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.3.tgz?cache=0&sync_timestamp=1618056390441&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-svgo%2Fdownload%2Fpostcss-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"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "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-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
+    },
+    "posthtml": {
+      "version": "0.9.2",
+      "resolved": "https://registry.nlark.com/posthtml/download/posthtml-0.9.2.tgz",
+      "integrity": "sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=",
+      "dev": true,
+      "requires": {
+        "posthtml-parser": "^0.2.0",
+        "posthtml-render": "^1.0.5"
+      }
+    },
+    "posthtml-parser": {
+      "version": "0.2.1",
+      "resolved": "https://registry.nlark.com/posthtml-parser/download/posthtml-parser-0.2.1.tgz?cache=0&sync_timestamp=1620715680401&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fposthtml-parser%2Fdownload%2Fposthtml-parser-0.2.1.tgz",
+      "integrity": "sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=",
+      "dev": true,
+      "requires": {
+        "htmlparser2": "^3.8.3",
+        "isobject": "^2.1.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=",
+          "dev": true,
+          "requires": {
+            "isarray": "1.0.0"
+          }
+        }
+      }
+    },
+    "posthtml-rename-id": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npm.taobao.org/posthtml-rename-id/download/posthtml-rename-id-1.0.12.tgz",
+      "integrity": "sha1-z39us3FGvxr6wx5o8YxswZrmFDM=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "1.0.5"
+      }
+    },
+    "posthtml-render": {
+      "version": "1.4.0",
+      "resolved": "https://registry.nlark.com/posthtml-render/download/posthtml-render-1.4.0.tgz?cache=0&sync_timestamp=1620398920173&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fposthtml-render%2Fdownload%2Fposthtml-render-1.4.0.tgz",
+      "integrity": "sha1-QBFAcMRYgcrLkzR9rj7/U6+8/xM=",
+      "dev": true
+    },
+    "posthtml-svg-mode": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/posthtml-svg-mode/download/posthtml-svg-mode-1.0.3.tgz",
+      "integrity": "sha1-q9VU+s6BIjyrDLNn4Y5O/SpOdLA=",
+      "dev": true,
+      "requires": {
+        "merge-options": "1.0.1",
+        "posthtml": "^0.9.2",
+        "posthtml-parser": "^0.2.1",
+        "posthtml-render": "^1.0.6"
+      }
+    },
+    "preact": {
+      "version": "10.5.15",
+      "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.15.tgz",
+      "integrity": "sha512-5chK29n6QcJc3m1lVrKQSQ+V7K1Gb8HeQY6FViQ5AxCAEGu3DaHffWNDkC9+miZgsLvbvU9rxbV1qinGHMHzqA=="
+    },
+    "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=",
+      "dev": true
+    },
+    "prepend-http": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz",
+      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
+    },
+    "prettier": {
+      "version": "1.19.1",
+      "resolved": "https://registry.nlark.com/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1620594183343&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz",
+      "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
+      "dev": true,
+      "optional": true
+    },
+    "pretty-error": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.2.tgz",
+      "integrity": "sha1-von4LYGxyG7I/fvDhQRYgnJ/k7Y=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.20",
+        "renderkid": "^2.0.4"
+      }
+    },
+    "prismjs": {
+      "version": "1.25.0",
+      "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz",
+      "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg=="
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+      "dev": true
+    },
+    "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="
+    },
+    "progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz",
+      "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=",
+      "dev": true
+    },
+    "promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz",
+      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+      "dev": true
+    },
+    "promise-polyfill": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-7.1.2.tgz",
+      "integrity": "sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ=="
+    },
+    "proto-list": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+      "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk="
+    },
+    "proxy-addr": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz",
+      "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=",
+      "dev": true,
+      "requires": {
+        "forwarded": "~0.1.2",
+        "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=",
+      "dev": true
+    },
+    "q": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz",
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+      "dev": true
+    },
+    "qrcodejs2": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npm.taobao.org/qrcodejs2/download/qrcodejs2-0.0.2.tgz",
+      "integrity": "sha1-Rlr+Xjnxn6zsuTLBH3oYYQkUauE="
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.nlark.com/qs/download/qs-6.5.2.tgz",
+      "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=",
+      "dev": true
+    },
+    "query-string": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npm.taobao.org/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.npm.taobao.org/querystring/download/querystring-0.2.0.tgz?cache=0&sync_timestamp=1613399913000&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystring%2Fdownload%2Fquerystring-0.2.0.tgz",
+      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+      "dev": true
+    },
+    "querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz",
+      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+      "dev": true
+    },
+    "querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.2.0.tgz?cache=0&sync_timestamp=1597686657045&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystringify%2Fdownload%2Fquerystringify-2.2.0.tgz",
+      "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=",
+      "dev": true
+    },
+    "queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true
+    },
+    "randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
+      "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "requires": {
+        "bytes": "3.1.0",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      }
+    },
+    "raw-loader": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz",
+      "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=",
+      "dev": true
+    },
+    "read-pkg": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-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": "1.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "find-up": "^1.0.0",
+        "read-pkg": "^1.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-type": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true,
+          "optional": true
+        },
+        "read-pkg": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
+          }
+        }
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-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.5.0",
+      "resolved": "https://registry.nlark.com/readdirp/download/readdirp-3.5.0.tgz",
+      "integrity": "sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4=",
+      "dev": true,
+      "requires": {
+        "picomatch": "^2.2.1"
+      }
+    },
+    "redent": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
+      },
+      "dependencies": {
+        "indent-string": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+          "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "repeating": "^2.0.0"
+          }
+        },
+        "strip-indent": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+          "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+          "dev": true,
+          "optional": true,
+          "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=1604218439731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.2.tgz",
+      "integrity": "sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo=",
+      "dev": true
+    },
+    "regenerate-unicode-properties": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz",
+      "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=",
+      "dev": true,
+      "requires": {
+        "regenerate": "^1.4.0"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.11.1",
+      "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz",
+      "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
+    },
+    "regenerator-transform": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.5.tgz",
+      "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=",
+      "dev": true,
+      "requires": {
+        "@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=",
+      "dev": true,
+      "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=1610726090430&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"
+      }
+    },
+    "regexpp": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz",
+      "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=",
+      "dev": true
+    },
+    "regexpu-core": {
+      "version": "4.7.1",
+      "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.1.tgz?cache=0&sync_timestamp=1600413905865&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.7.1.tgz",
+      "integrity": "sha1-LepamgcjMpj78NuR+pq8TG4PitY=",
+      "dev": true,
+      "requires": {
+        "regenerate": "^1.4.0",
+        "regenerate-unicode-properties": "^8.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"
+      }
+    },
+    "regjsgen": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz",
+      "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=",
+      "dev": true
+    },
+    "regjsparser": {
+      "version": "0.6.9",
+      "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.9.tgz",
+      "integrity": "sha1-tInu98mizkNydicBFCnPgzpxg+Y=",
+      "dev": true,
+      "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=1603891198638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-0.5.0.tgz",
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+          "dev": true
+        }
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "renderkid": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/renderkid/download/renderkid-2.0.5.tgz?cache=0&sync_timestamp=1609588564953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frenderkid%2Fdownload%2Frenderkid-2.0.5.tgz",
+      "integrity": "sha1-SDsaxZxmAaswp6WWpZZcq8z90KU=",
+      "dev": true,
+      "requires": {
+        "css-select": "^2.0.2",
+        "dom-converter": "^0.2",
+        "htmlparser2": "^3.10.1",
+        "lodash": "^4.17.20",
+        "strip-ansi": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "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=1618553320591&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",
+      "integrity": "sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "repeating": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "is-finite": "^1.0.0"
+      }
+    },
+    "replace-ext": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+      "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+      "dev": true
+    },
+    "request": {
+      "version": "2.88.2",
+      "resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz",
+      "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=",
+      "dev": true,
+      "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"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "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
+    },
+    "resize-observer-polyfill": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
+    },
+    "resolve": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz?cache=0&sync_timestamp=1613054822645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.20.0.tgz",
+      "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=",
+      "dev": true,
+      "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",
+      "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-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=",
+      "dev": true
+    },
+    "responselike": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+      "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+      "requires": {
+        "lowercase-keys": "^1.0.0"
+      }
+    },
+    "restore-cursor": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-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=",
+      "dev": true
+    },
+    "retry": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz",
+      "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+      "dev": true
+    },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "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?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz",
+      "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
+    },
+    "run-async": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz",
+      "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=",
+      "dev": true
+    },
+    "run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "requires": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz",
+      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1"
+      }
+    },
+    "rxjs": {
+      "version": "6.6.7",
+      "resolved": "https://registry.nlark.com/rxjs/download/rxjs-6.6.7.tgz",
+      "integrity": "sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk=",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "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=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "sass": {
+      "version": "1.32.13",
+      "resolved": "https://registry.nlark.com/sass/download/sass-1.32.13.tgz",
+      "integrity": "sha1-jSnISeYlpBW85xYJx8+V4V907QA=",
+      "dev": true,
+      "requires": {
+        "chokidar": ">=3.0.0 <4.0.0"
+      }
+    },
+    "sass-loader": {
+      "version": "8.0.2",
+      "resolved": "https://registry.nlark.com/sass-loader/download/sass-loader-8.0.2.tgz?cache=0&sync_timestamp=1620926301236&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsass-loader%2Fdownload%2Fsass-loader-8.0.2.tgz",
+      "integrity": "sha1-3r7NjDziQ8dkVPLoKQSCFQOACQ0=",
+      "dev": true,
+      "requires": {
+        "clone-deep": "^4.0.1",
+        "loader-utils": "^1.2.3",
+        "neo-async": "^2.6.1",
+        "schema-utils": "^2.6.1",
+        "semver": "^6.3.0"
+      }
+    },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz",
+      "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
+      "dev": true
+    },
+    "schema-utils": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz",
+      "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
+      "dev": true,
+      "requires": {
+        "@types/json-schema": "^7.0.5",
+        "ajv": "^6.12.4",
+        "ajv-keywords": "^3.5.2"
+      }
+    },
+    "script-loader": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz",
+      "integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==",
+      "dev": true,
+      "requires": {
+        "raw-loader": "~0.5.1"
+      }
+    },
+    "scroll-into-view-if-needed": {
+      "version": "2.2.28",
+      "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.28.tgz",
+      "integrity": "sha512-8LuxJSuFVc92+0AdNv4QOxRL4Abeo1DgLnGNkn1XlaujPH/3cCFz3QI60r2VNu4obJJROzgnIUw5TKQkZvZI1w==",
+      "requires": {
+        "compute-scroll-into-view": "^1.0.17"
+      }
+    },
+    "seek-bzip": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
+      "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==",
+      "requires": {
+        "commander": "^2.8.1"
+      }
+    },
+    "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",
+      "integrity": "sha1-JJKc2Qb+D0S20B+yOZmnOVN6y+k=",
+      "dev": true,
+      "requires": {
+        "node-forge": "^0.10.0"
+      }
+    },
+    "semver": {
+      "version": "6.3.0",
+      "resolved": "https://registry.nlark.com/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1618847119601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+      "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+      "dev": true
+    },
+    "semver-regex": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
+      "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw=="
+    },
+    "semver-truncate": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
+      "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
+      "requires": {
+        "semver": "^5.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "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.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          },
+          "dependencies": {
+            "ms": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+              "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+              "dev": true
+            }
+          }
+        },
+        "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.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        }
+      }
+    },
+    "serialize-javascript": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-4.0.0.tgz",
+      "integrity": "sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao=",
+      "dev": true,
+      "requires": {
+        "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.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "http-errors": {
+          "version": "1.6.3",
+          "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-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
+        },
+        "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=",
+      "dev": true
+    },
+    "set-value": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/set-value/download/set-value-2.0.1.tgz",
+      "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=",
+      "dev": true
+    },
+    "setprototypeof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz",
+      "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=",
+      "dev": true
+    },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz",
+      "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "shallow-clone": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/shallow-clone/download/shallow-clone-3.0.1.tgz",
+      "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.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=",
+      "requires": {
+        "shebang-regex": "^3.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz",
+      "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI="
+    },
+    "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
+    },
+    "shvl": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz",
+      "integrity": "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw=="
+    },
+    "signal-exit": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz?cache=0&sync_timestamp=1585280715057&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsignal-exit%2Fdownload%2Fsignal-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
+        }
+      }
+    },
+    "slash": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/slash/download/slash-2.0.0.tgz",
+      "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=",
+      "dev": true
+    },
+    "slate": {
+      "version": "0.63.0",
+      "resolved": "https://registry.npmjs.org/slate/-/slate-0.63.0.tgz",
+      "integrity": "sha512-np24XIRsGbwVgKQR6DWLorTRQD7arUKiztCKsepBNiYtMxHqjR76i2nJA6pdGn6Vj9q88Afi9eYwCsfnzy2hBA==",
+      "requires": {
+        "@types/esrever": "^0.2.0",
+        "esrever": "^0.2.0",
+        "fast-deep-equal": "^3.1.3",
+        "immer": "^8.0.1",
+        "is-plain-object": "^3.0.0",
+        "tiny-warning": "^1.0.3"
+      },
+      "dependencies": {
+        "immer": {
+          "version": "8.0.4",
+          "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.4.tgz",
+          "integrity": "sha512-jMfL18P+/6P6epANRvRk6q8t+3gGhqsJ9EuJ25AXE+9bNTYtssvzeYbEd0mXRYWCmmXSIbnlpz6vd6iJlmGGGQ=="
+        },
+        "is-plain-object": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz",
+          "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g=="
+        }
+      }
+    },
+    "slate-history": {
+      "version": "0.62.0",
+      "resolved": "https://registry.npmjs.org/slate-history/-/slate-history-0.62.0.tgz",
+      "integrity": "sha512-nE3fihtHV7kUrDO3zNb+DWzQVUg59uKCZVt0r9GafZLiHB98n0X+qqtcjFHerDPDRPkHgqM8UL4wh1jhL4WzmA==",
+      "requires": {
+        "immer": "^7.0.0",
+        "is-plain-object": "^3.0.0"
+      },
+      "dependencies": {
+        "is-plain-object": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz",
+          "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g=="
+        }
+      }
+    },
+    "slice-ansi": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz?cache=0&sync_timestamp=1618555008681&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslice-ansi%2Fdownload%2Fslice-ansi-2.1.0.tgz",
+      "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.0",
+        "astral-regex": "^1.0.0",
+        "is-fullwidth-code-point": "^2.0.0"
+      },
+      "dependencies": {
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz?cache=0&sync_timestamp=1618552489864&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=",
+          "dev": true
+        }
+      }
+    },
+    "snabbdom": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.1.0.tgz",
+      "integrity": "sha512-mcmPJMMKbkkPDPeCQ5D7RzqMHlLUyjl+OxOGblsutkzDbuYijCQGBOWJInjnWZ85DtoHdElrDTjA9g85s2YQ5Q=="
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz",
+      "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
+      "dev": true,
+      "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.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "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=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "sockjs": {
+      "version": "0.3.21",
+      "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.21.tgz?cache=0&sync_timestamp=1596167301825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs%2Fdownload%2Fsockjs-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.1",
+      "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.5.1.tgz?cache=0&sync_timestamp=1616686717128&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.5.1.tgz",
+      "integrity": "sha1-JWkI9tWt+5Tau9vQLGY2LMoPnqY=",
+      "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.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.3",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz",
+          "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=",
+          "dev": true
+        }
+      }
+    },
+    "sort-keys": {
+      "version": "1.1.2",
+      "resolved": "https://registry.nlark.com/sort-keys/download/sort-keys-1.1.2.tgz",
+      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+      "requires": {
+        "is-plain-obj": "^1.0.0"
+      }
+    },
+    "sort-keys-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
+      "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
+      "requires": {
+        "sort-keys": "^1.0.0"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "dev": true
+    },
+    "source-map-resolve": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829515586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz",
+      "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=",
+      "dev": true,
+      "requires": {
+        "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?cache=0&sync_timestamp=1587719289626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz",
+      "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.1.tgz",
+      "integrity": "sha1-CvZmBadFpaL5HPG7+KevvCg97FY=",
+      "dev": true
+    },
+    "spdx-correct": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz",
+      "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.7.tgz?cache=0&sync_timestamp=1606610843748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.7.tgz",
+      "integrity": "sha1-6cGKQQ5e1+EkQqVJ+9ivp2cDjWU=",
+      "dev": true
+    },
+    "spdy": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz?cache=0&sync_timestamp=1585970491493&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.2.tgz",
+      "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.0",
+        "handle-thing": "^2.0.0",
+        "http-deceiver": "^1.2.7",
+        "select-hose": "^2.0.0",
+        "spdy-transport": "^3.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
+          "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+          "dev": true
+        }
+      }
+    },
+    "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": {
+        "debug": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
+          "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "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=",
+      "dev": true,
+      "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
+    },
+    "squeak": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz",
+      "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^1.0.0",
+        "console-stream": "^0.1.1",
+        "lpad-align": "^1.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true,
+          "optional": true
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true,
+          "optional": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "optional": 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"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "sshpk": {
+      "version": "1.16.1",
+      "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz",
+      "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=",
+      "dev": true,
+      "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"
+      }
+    },
+    "ssr-window": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz",
+      "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA=="
+    },
+    "ssri": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.2.tgz?cache=0&sync_timestamp=1617826295004&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-6.0.2.tgz",
+      "integrity": "sha1-FXk5E08gRk5zAd26PpD/qPdyisU=",
+      "dev": true,
+      "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
+    },
+    "stackframe": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz?cache=0&sync_timestamp=1590854108362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackframe%2Fdownload%2Fstackframe-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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=1609654014762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz",
+      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+      "dev": true
+    },
+    "stream-browserify": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz?cache=0&sync_timestamp=1587041194718&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-browserify%2Fdownload%2Fstream-browserify-2.0.2.tgz",
+      "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=",
+      "dev": true,
+      "requires": {
+        "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=",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "stream-http": {
+      "version": "2.8.3",
+      "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz?cache=0&sync_timestamp=1618430946341&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-http%2Fdownload%2Fstream-http-2.8.3.tgz",
+      "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "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="
+    },
+    "string-width": {
+      "version": "4.2.2",
+      "resolved": "https://registry.nlark.com/string-width/download/string-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"
+      }
+    },
+    "string.prototype.trimend": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz?cache=0&sync_timestamp=1614127461586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.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=1614127357785&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=1618553320591&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.nlark.com/ansi-regex/download/ansi-regex-5.0.0.tgz",
+          "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=",
+          "dev": true
+        }
+      }
+    },
+    "strip-bom": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "is-utf8": "^0.2.0"
+      }
+    },
+    "strip-dirs": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
+      "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+      "requires": {
+        "is-natural-number": "^4.0.1"
+      }
+    },
+    "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="
+    },
+    "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="
+    },
+    "strip-indent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/strip-indent/download/strip-indent-2.0.0.tgz?cache=0&sync_timestamp=1620053310624&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-indent%2Fdownload%2Fstrip-indent-2.0.0.tgz",
+      "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+      "dev": true
+    },
+    "strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567532500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz",
+      "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=",
+      "dev": true
+    },
+    "strip-outer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+      "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+      "requires": {
+        "escape-string-regexp": "^1.0.2"
+      }
+    },
+    "strnum": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.4.tgz",
+      "integrity": "sha512-lMzNMfDpaQOLt4B2mEbfzYS0+T7dvCXeojnlGf6f1AygvWDMcWyXYaLbyICfjVu29sErR8fnRagQfBW/N/hGgw==",
+      "dev": true,
+      "optional": true
+    },
+    "stylehacks": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.3.tgz?cache=0&sync_timestamp=1618056391120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylehacks%2Fdownload%2Fstylehacks-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=1620752939806&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": "5.5.0",
+      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1618560983872&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
+      "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+      "dev": true,
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "svg-baker": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npm.taobao.org/svg-baker/download/svg-baker-1.7.0.tgz",
+      "integrity": "sha1-g2f3jYdVUMUv5HVvcwPVxdfC6ac=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.0",
+        "clone": "^2.1.1",
+        "he": "^1.1.1",
+        "image-size": "^0.5.1",
+        "loader-utils": "^1.1.0",
+        "merge-options": "1.0.1",
+        "micromatch": "3.1.0",
+        "postcss": "^5.2.17",
+        "postcss-prefix-selector": "^1.6.0",
+        "posthtml-rename-id": "^1.0",
+        "posthtml-svg-mode": "^1.0.3",
+        "query-string": "^4.3.2",
+        "traverse": "^0.6.6"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-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=1618995367379&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"
+          },
+          "dependencies": {
+            "supports-color": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1618560983872&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
+              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+              "dev": true
+            }
+          }
+        },
+        "clone": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz",
+          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+          "dev": true
+        },
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "has-flag": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
+          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+          "dev": true
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "6.0.3",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
+              "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
+              "dev": true
+            }
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "6.0.3",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
+              "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
+              "dev": true
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "6.0.3",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
+              "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
+              "dev": true
+            }
+          }
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/micromatch/download/micromatch-3.1.0.tgz",
+          "integrity": "sha1-UQLU6vILaZfWAI46z+HESj+oFeI=",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.2.2",
+            "define-property": "^1.0.0",
+            "extend-shallow": "^2.0.1",
+            "extglob": "^2.0.2",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^5.0.2",
+            "nanomatch": "^1.2.1",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
+          }
+        },
+        "postcss": {
+          "version": "5.2.18",
+          "resolved": "https://registry.nlark.com/postcss/download/postcss-5.2.18.tgz?cache=0&sync_timestamp=1620676610377&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-5.2.18.tgz",
+          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
+          "dev": true,
+          "requires": {
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
+          }
+        },
+        "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=1618553320591&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": "3.2.3",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1618560983872&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
+          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^1.0.0"
+          }
+        }
+      }
+    },
+    "svg-baker-runtime": {
+      "version": "1.4.7",
+      "resolved": "https://registry.npm.taobao.org/svg-baker-runtime/download/svg-baker-runtime-1.4.7.tgz",
+      "integrity": "sha1-9HIGN/W2IC7vY3jYHx/q0IFfik4=",
+      "dev": true,
+      "requires": {
+        "deepmerge": "1.3.2",
+        "mitt": "1.1.2",
+        "svg-baker": "^1.7.0"
+      },
+      "dependencies": {
+        "deepmerge": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.3.2.tgz?cache=0&sync_timestamp=1572279720382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.3.2.tgz",
+          "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+          "dev": true
+        }
+      }
+    },
+    "svg-sprite-loader": {
+      "version": "5.2.1",
+      "resolved": "https://registry.nlark.com/svg-sprite-loader/download/svg-sprite-loader-5.2.1.tgz",
+      "integrity": "sha1-8MN+dmZd3996vI/269HaNc3SEtk=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.0",
+        "deepmerge": "1.3.2",
+        "domready": "1.0.8",
+        "escape-string-regexp": "1.0.5",
+        "loader-utils": "^1.1.0",
+        "svg-baker": "^1.5.0",
+        "svg-baker-runtime": "^1.4.7",
+        "url-slug": "2.0.0"
+      },
+      "dependencies": {
+        "deepmerge": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.3.2.tgz?cache=0&sync_timestamp=1572279720382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.3.2.tgz",
+          "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+          "dev": true
+        }
+      }
+    },
+    "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",
+      "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"
+      }
+    },
+    "table": {
+      "version": "5.4.6",
+      "resolved": "https://registry.nlark.com/table/download/table-5.4.6.tgz",
+      "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.10.2",
+        "lodash": "^4.17.14",
+        "slice-ansi": "^2.1.0",
+        "string-width": "^3.0.0"
+      },
+      "dependencies": {
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.nlark.com/emoji-regex/download/emoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz?cache=0&sync_timestamp=1618552489864&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=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553320591&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"
+          }
+        }
+      }
+    },
+    "tapable": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz?cache=0&sync_timestamp=1607088855476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz",
+      "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=",
+      "dev": true
+    },
+    "tar-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
+      "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+      "requires": {
+        "bl": "^1.0.0",
+        "buffer-alloc": "^1.2.0",
+        "end-of-stream": "^1.0.0",
+        "fs-constants": "^1.0.0",
+        "readable-stream": "^2.3.0",
+        "to-buffer": "^1.1.1",
+        "xtend": "^4.0.0"
+      }
+    },
+    "temp-dir": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+      "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0="
+    },
+    "tempfile": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
+      "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=",
+      "requires": {
+        "temp-dir": "^1.0.0",
+        "uuid": "^3.0.1"
+      }
+    },
+    "terser": {
+      "version": "4.8.0",
+      "resolved": "https://registry.nlark.com/terser/download/terser-4.8.0.tgz",
+      "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=",
+      "dev": true,
+      "requires": {
+        "commander": "^2.20.0",
+        "source-map": "~0.6.1",
+        "source-map-support": "~0.5.12"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "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&sync_timestamp=1620830611931&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz",
+      "integrity": "sha1-oheu+uozDnNP+sthIOwfoxLWBAs=",
+      "dev": true,
+      "requires": {
+        "cacache": "^12.0.2",
+        "find-cache-dir": "^2.1.0",
+        "is-wsl": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^4.0.0",
+        "source-map": "^0.6.1",
+        "terser": "^4.1.2",
+        "webpack-sources": "^1.4.0",
+        "worker-farm": "^1.7.0"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz",
+          "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^2.0.0",
+            "pkg-dir": "^3.0.0"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-2.1.0.tgz",
+          "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
+          "dev": true,
+          "requires": {
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1618847119601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz",
+      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+      "dev": true
+    },
+    "thenify": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npm.taobao.org/thenify/download/thenify-3.3.1.tgz",
+      "integrity": "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz",
+      "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+      "dev": true,
+      "requires": {
+        "thenify": ">= 3.1.0 < 4"
+      }
+    },
+    "thread-loader": {
+      "version": "2.1.3",
+      "resolved": "https://registry.nlark.com/thread-loader/download/thread-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"
+      }
+    },
+    "throttle-debounce": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz",
+      "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0="
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+    },
+    "through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
+      "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+      "dev": true,
+      "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
+    },
+    "timed-out": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+      "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="
+    },
+    "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=1603793688024&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftimers-browserify%2Fdownload%2Ftimers-browserify-2.0.12.tgz",
+      "integrity": "sha1-RKRcEfv0B/NPl7zNFXfGUjYbAO4=",
+      "dev": true,
+      "requires": {
+        "setimmediate": "^1.0.4"
+      }
+    },
+    "timsort": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz",
+      "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+      "dev": true
+    },
+    "tiny-warning": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+      "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+    },
+    "tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz?cache=0&sync_timestamp=1588178571895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftmp%2Fdownload%2Ftmp-0.0.33.tgz",
+      "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
+      "dev": true,
+      "requires": {
+        "os-tmpdir": "~1.0.2"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "to-buffer": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
+      "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
+    },
+    "to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz",
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "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?cache=0&sync_timestamp=1584646121003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz",
+      "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=",
+      "dev": true,
+      "requires": {
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+      }
+    },
+    "traverse": {
+      "version": "0.6.6",
+      "resolved": "https://registry.npm.taobao.org/traverse/download/traverse-0.6.6.tgz",
+      "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
+      "dev": true
+    },
+    "trim-newlines": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+      "dev": true,
+      "optional": true
+    },
+    "trim-repeated": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+      "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+      "requires": {
+        "escape-string-regexp": "^1.0.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-pnp": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz",
+      "integrity": "sha1-pQCtCEsHmPHDBxrzkeZZEshrypI=",
+      "dev": true
+    },
+    "tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1618846758811&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-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=",
+      "dev": true
+    },
+    "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?cache=0&sync_timestamp=1581364203962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+      "dev": true
+    },
+    "type": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+      "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
+    },
+    "type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz",
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "~1.1.2"
+      }
+    },
+    "type-fest": {
+      "version": "0.6.0",
+      "resolved": "https://registry.nlark.com/type-fest/download/type-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=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "uglify-js": {
+      "version": "3.4.10",
+      "resolved": "https://registry.nlark.com/uglify-js/download/uglify-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=1618847060379&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz",
+          "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "uglifyjs-webpack-plugin": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz",
+      "integrity": "sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg==",
+      "dev": true,
+      "requires": {
+        "cacache": "^12.0.2",
+        "find-cache-dir": "^2.1.0",
+        "is-wsl": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^1.7.0",
+        "source-map": "^0.6.1",
+        "uglify-js": "^3.6.0",
+        "webpack-sources": "^1.4.0",
+        "worker-farm": "^1.7.0"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+          "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^2.0.0",
+            "pkg-dir": "^3.0.0"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+          "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+          "dev": true,
+          "requires": {
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+          "dev": true
+        },
+        "serialize-javascript": {
+          "version": "1.9.1",
+          "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
+          "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "uglify-js": {
+          "version": "3.14.4",
+          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.4.tgz",
+          "integrity": "sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA==",
+          "dev": true
+        }
+      }
+    },
+    "unbox-primitive": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/unbox-primitive/download/unbox-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"
+      }
+    },
+    "unbzip2-stream": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+      "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+      "requires": {
+        "buffer": "^5.2.1",
+        "through": "^2.3.8"
+      },
+      "dependencies": {
+        "buffer": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+          "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+          "requires": {
+            "base64-js": "^1.3.1",
+            "ieee754": "^1.1.13"
+          }
+        }
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "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?cache=0&sync_timestamp=1583945910569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz",
+      "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=",
+      "dev": true
+    },
+    "unidecode": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npm.taobao.org/unidecode/download/unidecode-0.1.8.tgz",
+      "integrity": "sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "requires": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz",
+      "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=",
+      "dev": true
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+      "dev": true
+    },
+    "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.nlark.com/unset-value/download/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=",
+              "dev": true,
+              "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=",
+          "dev": true
+        }
+      }
+    },
+    "upath": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&sync_timestamp=1604768637331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz",
+      "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
+      "dev": true
+    },
+    "upper-case": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz?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=1610237624359&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz",
+      "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=",
+      "dev": true,
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "dev": true
+    },
+    "url": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz",
+      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "url-loader": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/url-loader/download/url-loader-2.3.0.tgz?cache=0&sync_timestamp=1602252594253&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-loader%2Fdownload%2Furl-loader-2.3.0.tgz",
+      "integrity": "sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.2.3",
+        "mime": "^2.4.4",
+        "schema-utils": "^2.5.0"
+      }
+    },
+    "url-parse": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/url-parse/download/url-parse-1.5.1.tgz?cache=0&sync_timestamp=1613659652440&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-parse%2Fdownload%2Furl-parse-1.5.1.tgz",
+      "integrity": "sha1-1fqYkK+KXh8nSiyYN2UQ9kJfbjs=",
+      "dev": true,
+      "requires": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "url-parse-lax": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+      "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+      "requires": {
+        "prepend-http": "^1.0.1"
+      }
+    },
+    "url-slug": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/url-slug/download/url-slug-2.0.0.tgz",
+      "integrity": "sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc=",
+      "dev": true,
+      "requires": {
+        "unidecode": "0.1.8"
+      }
+    },
+    "url-to-options": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
+      "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k="
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz",
+      "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=",
+      "dev": true
+    },
+    "util": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.11.1.tgz",
+      "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-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=1610159975962&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.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1607460052228&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
+      "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4="
+    },
+    "v8-compile-cache": {
+      "version": "2.3.0",
+      "resolved": "https://registry.nlark.com/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz",
+      "integrity": "sha1-LeGWGMZtwkfc+2+ZM4A12CRaLO4=",
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "vconsole": {
+      "version": "3.5.2",
+      "resolved": "https://registry.nlark.com/vconsole/download/vconsole-3.5.2.tgz?cache=0&sync_timestamp=1620888790364&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvconsole%2Fdownload%2Fvconsole-3.5.2.tgz",
+      "integrity": "sha1-IfWojd4avB8aq0EjRgP5LpyEvi8=",
+      "requires": {
+        "copy-text-to-clipboard": "^3.0.1",
+        "core-js": "^3.11.0",
+        "mutation-observer": "^1.0.3"
+      }
+    },
+    "vendors": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/vendors/download/vendors-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=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "vm-browserify": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz?cache=0&sync_timestamp=1572870717730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvm-browserify%2Fdownload%2Fvm-browserify-1.1.2.tgz",
+      "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=",
+      "dev": true
+    },
+    "vue": {
+      "version": "2.6.12",
+      "resolved": "https://registry.nlark.com/vue/download/vue-2.6.12.tgz",
+      "integrity": "sha1-9evU+mvShpQD4pqJau1JBEVskSM="
+    },
+    "vue-eslint-parser": {
+      "version": "7.6.0",
+      "resolved": "https://registry.nlark.com/vue-eslint-parser/download/vue-eslint-parser-7.6.0.tgz",
+      "integrity": "sha1-AeoaKTL1gf8kQzZWXXEoAfj3JWE=",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.1",
+        "eslint-scope": "^5.0.0",
+        "eslint-visitor-keys": "^1.1.0",
+        "espree": "^6.2.1",
+        "esquery": "^1.4.0",
+        "lodash": "^4.17.15"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
+          "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "eslint-scope": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1600070417656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz",
+          "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=",
+          "dev": true,
+          "requires": {
+            "esrecurse": "^4.3.0",
+            "estraverse": "^4.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+          "dev": true
+        }
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "vue-loader": {
+      "version": "15.9.7",
+      "resolved": "https://registry.nlark.com/vue-loader/download/vue-loader-15.9.7.tgz",
+      "integrity": "sha1-FbBXdcPgw4QHZ5OTws5t9nOwEEQ=",
+      "dev": true,
+      "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"
+      },
+      "dependencies": {
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+          "dev": true
+        }
+      }
+    },
+    "vue-router": {
+      "version": "3.5.1",
+      "resolved": "https://registry.nlark.com/vue-router/download/vue-router-3.5.1.tgz?cache=0&sync_timestamp=1620899536020&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-router%2Fdownload%2Fvue-router-3.5.1.tgz",
+      "integrity": "sha1-7fPPSQeVLR4Fg+B5I3Igxf9utsk="
+    },
+    "vue-style-loader": {
+      "version": "4.1.3",
+      "resolved": "https://registry.nlark.com/vue-style-loader/download/vue-style-loader-4.1.3.tgz",
+      "integrity": "sha1-bVWGOlH6dXqyTonZNxRlByqnvDU=",
+      "dev": true,
+      "requires": {
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.0.2"
+      },
+      "dependencies": {
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+          "dev": true
+        }
+      }
+    },
+    "vue-template-compiler": {
+      "version": "2.6.12",
+      "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz?cache=0&sync_timestamp=1597927453960&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-template-compiler%2Fdownload%2Fvue-template-compiler-2.6.12.tgz",
+      "integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "vue-virtual-scroll-list": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/vue-virtual-scroll-list/-/vue-virtual-scroll-list-2.3.2.tgz",
+      "integrity": "sha512-afm5bYgjJRK160KXlvs03dsPixEL/gS8sV5DKxEDRjPQKMXjIBmTMN/hMTEyazsPl+G4tXQs/msYK7p7tNVogQ=="
+    },
+    "vuex": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.6.2.tgz",
+      "integrity": "sha1-I2vAhqhww655lG8QfxbeWdWJXnE="
+    },
+    "vuex-persistedstate": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.0.0.tgz",
+      "integrity": "sha512-jDs+awbV9YD2A2F6S5zgtYq1Bjd8v0YldOK6HPv1EJZzGMse0FtZTREfXvA7zlVfq9MpmSZJNmYQVylfpZ5znQ==",
+      "requires": {
+        "deepmerge": "^4.2.2",
+        "shvl": "^2.0.3"
+      },
+      "dependencies": {
+        "deepmerge": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+          "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
+        }
+      }
+    },
+    "watchpack": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz",
+      "integrity": "sha1-EmfmxV4Lm1vkTCAjrtVDeiwmxFM=",
+      "dev": true,
+      "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=1604989085906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack-chokidar2%2Fdownload%2Fwatchpack-chokidar2-2.0.1.tgz",
+      "integrity": "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chokidar": "^2.1.8"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/anymatch/download/anymatch-2.0.0.tgz",
+          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
+              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "remove-trailing-separator": "^1.0.1"
+              }
+            }
+          }
+        },
+        "binary-extensions": {
+          "version": "1.13.1",
+          "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1610299514499&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,
+          "optional": true
+        },
+        "chokidar": {
+          "version": "2.1.8",
+          "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1610719384066&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz",
+          "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.1",
+            "braces": "^2.3.2",
+            "fsevents": "^1.2.7",
+            "glob-parent": "^3.1.0",
+            "inherits": "^2.0.3",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^4.0.0",
+            "normalize-path": "^3.0.0",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.2.1",
+            "upath": "^1.1.1"
+          }
+        },
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz",
+          "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1620073321855&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
+        "is-binary-path": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
+          "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "binary-extensions": "^1.0.0"
+          }
+        },
+        "readdirp": {
+          "version": "2.2.1",
+          "resolved": "https://registry.nlark.com/readdirp/download/readdirp-2.2.1.tgz",
+          "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "graceful-fs": "^4.1.11",
+            "micromatch": "^3.1.10",
+            "readable-stream": "^2.0.2"
+          }
+        }
+      }
+    },
+    "wbuf": {
+      "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"
+      }
+    },
+    "webpack": {
+      "version": "4.46.0",
+      "resolved": "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz?cache=0&sync_timestamp=1620663741729&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.46.0.tgz",
+      "integrity": "sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/wasm-edit": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "acorn": "^6.4.1",
+        "ajv": "^6.10.2",
+        "ajv-keywords": "^3.4.1",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^4.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": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "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=1595814928534&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&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.nlark.com/ansi-regex/download/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/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=1610299514499&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=1603921884289&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.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1610719384066&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-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",
+          "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.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
+        "debug": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
+          "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.nlark.com/emoji-regex/download/emoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+          "dev": true
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz",
+          "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1620073321855&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
+        "is-absolute-url": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-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"
+          }
+        },
+        "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&sync_timestamp=1618552489864&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=",
+          "dev": true
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+          "dev": true
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
+        "readdirp": {
+          "version": "2.2.1",
+          "resolved": "https://registry.nlark.com/readdirp/download/readdirp-2.2.1.tgz",
+          "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.11",
+            "micromatch": "^3.1.10",
+            "readable-stream": "^2.0.2"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553320591&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=1618553320591&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": "6.1.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618560983872&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
+          "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+          "dev": true,
+          "requires": {
+            "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.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553320591&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?cache=0&sync_timestamp=1620086465147&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-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.npm.taobao.org/yargs-parser/download/yargs-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.npm.taobao.org/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.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1603965333971&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz",
+      "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=",
+      "dev": true,
+      "requires": {
+        "source-list-map": "^2.0.0",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "websocket-driver": {
+      "version": "0.7.4",
+      "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.4.tgz?cache=0&sync_timestamp=1591288600527&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-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?cache=0&sync_timestamp=1591103014229&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-extensions%2Fdownload%2Fwebsocket-extensions-0.1.4.tgz",
+      "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=",
+      "dev": true
+    },
+    "which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz",
+      "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "which-boxed-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/which-boxed-primitive/download/which-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=",
+      "dev": true
+    },
+    "wildcard": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-1.1.2.tgz",
+      "integrity": "sha1-pwIEUwhNjNLv5wup02liY94XEKU="
+    },
+    "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "errno": "~0.1.7"
+      }
+    },
+    "wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-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
+        }
+      }
+    },
+    "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": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz",
+      "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=",
+      "dev": true,
+      "requires": {
+        "mkdirp": "^0.5.1"
+      }
+    },
+    "ws": {
+      "version": "6.2.1",
+      "resolved": "https://registry.nlark.com/ws/download/ws-6.2.1.tgz",
+      "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=",
+      "dev": true,
+      "requires": {
+        "async-limiter": "~1.0.0"
+      }
+    },
+    "xml-formatter": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.5.1.tgz",
+      "integrity": "sha512-qJwnz5uNMs4mc7jX3UH80taCK4BHnXX91MvByple+iOS2P1eNeifGAfPnKuteyHg8pehbhTBHPBunGOQ53nKdQ==",
+      "requires": {
+        "xml-parser-xo": "^3.1.2"
+      }
+    },
+    "xml-parser-xo": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.1.2.tgz",
+      "integrity": "sha512-Qyttmiy305unyg1ONpArT4FPDL3J+ohXWpMI1ecopClGMw53lCRHJ4FV/fVYHFU6qfEzMV0frqSlNaLo2dw15Q=="
+    },
+    "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?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.3.tgz",
+      "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8=",
+      "dev": true
+    },
+    "yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz",
+      "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=",
+      "dev": true
+    },
+    "yargs": {
+      "version": "16.2.0",
+      "resolved": "https://registry.nlark.com/yargs/download/yargs-16.2.0.tgz?cache=0&sync_timestamp=1620086465147&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-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",
+          "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=",
+          "dev": true,
+          "requires": {
+            "string-width": "^4.2.0",
+            "strip-ansi": "^6.0.0",
+            "wrap-ansi": "^7.0.0"
+          }
+        },
+        "y18n": {
+          "version": "5.0.8",
+          "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.8.tgz?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.8.tgz",
+          "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=",
+          "dev": true
+        }
+      }
+    },
+    "yargs-parser": {
+      "version": "20.2.7",
+      "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-20.2.7.tgz",
+      "integrity": "sha1-Yd+FwRPt+1p6TjbriqYO9CPLyQo=",
+      "dev": true
+    },
+    "yauzl": {
+      "version": "2.10.0",
+      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+      "requires": {
+        "buffer-crc32": "~0.2.3",
+        "fd-slicer": "~1.1.0"
+      }
+    },
+    "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.npm.taobao.org/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1606970975645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz",
+          "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+          "dev": true,
+          "requires": {
+            "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",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz",
+          "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "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
+        },
+        "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.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz",
+          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+          "dev": true
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz",
+          "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "zrender": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.3.2.tgz?cache=0&sync_timestamp=1618215776804&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fzrender%2Fdownload%2Fzrender-4.3.2.tgz",
+      "integrity": "sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY="
+    }
+  }
+}

+ 51 - 0
package.json

@@ -0,0 +1,51 @@
+{
+  "name": "ddpc",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "lint": "vue-cli-service lint",
+    "devbuild": "vue-cli-service build --mode development",
+    "prebuild": "vue-cli-service build --mode production --report"
+  },
+  "dependencies": {
+    "@wangeditor/editor": "^0.12.3",
+    "@wangeditor/editor-for-vue": "^0.6.12-1",
+    "axios": "^0.19.2",
+    "core-js": "^3.6.5",
+    "cross-env": "^7.0.3",
+    "dingtalk-design-libs": "0.0.14-alpha.3",
+    "dingtalk-jsapi": "^2.13.51",
+    "echarts": "^4.9.0",
+    "element-ui": "^2.13.2",
+    "file-saver": "^2.0.5",
+    "imagemin-pngquant": "^9.0.2",
+    "moment": "^2.29.0",
+    "nprogress": "^0.2.0",
+    "qrcodejs2": "0.0.2",
+    "vconsole": "^3.3.4",
+    "vue": "^2.6.11",
+    "vue-router": "^3.2.0",
+    "vue-virtual-scroll-list": "^2.3.2",
+    "vuex": "^3.4.0",
+    "vuex-persistedstate": "^4.0.0"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "~4.4.0",
+    "@vue/cli-plugin-eslint": "~4.4.0",
+    "@vue/cli-plugin-router": "~4.4.0",
+    "@vue/cli-plugin-vuex": "~4.4.0",
+    "@vue/cli-service": "~4.4.0",
+    "babel-eslint": "^10.1.0",
+    "eslint": "^6.7.2",
+    "eslint-plugin-vue": "^6.2.2",
+    "image-webpack-loader": "^8.0.1",
+    "sass": "^1.26.5",
+    "sass-loader": "^8.0.2",
+    "script-loader": "^0.7.2",
+    "svg-sprite-loader": "^5.2.1",
+    "uglifyjs-webpack-plugin": "^2.2.0",
+    "vue-template-compiler": "^2.6.11"
+  }
+}

BIN
public/favicon.ico


+ 20 - 0
public/index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+<!-- 	<link rel="Bookmark" type="image/x-icon" href="b/img/icon/favicon.ico" />
+	<link rel="icon" type="image/x-icon" href="b/img/icon/favicon.ico" />
+	<link rel="shortcut icon" type="image/x-icon" href="b/img/icon/favicon.ico" /> -->
+    <title>功道云积分制</title>
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+</html>

+ 19 - 0
src/App.vue

@@ -0,0 +1,19 @@
+<template>
+  <div id="app">
+    <router-view/>
+  </div>
+</template>
+<style>
+  @import "assets/css/reset.css";
+  @import "assets/css/iconfont.css";
+  /* @import "assets/css/iconfont.js"; */
+</style>
+<style lang="scss">
+	#app{
+		width: 100%;
+		height: 100%;
+	}
+	.el-image-viewer__wrapper{
+	  z-index: 9999 !important;
+	}
+</style>

+ 151 - 0
src/api/auth.js

@@ -0,0 +1,151 @@
+const TokenKey = 'A-Token'
+const UserIdKey = 'userData'
+const TypesKey = 'types'
+import Vue from 'vue'
+
+// 获取唯一标识(uid)
+export function generateUUID() {
+	var d = new Date().getTime();
+	var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+		var r = (d + Math.random() * 16) % 16 | 0;
+		d = Math.floor(d / 16);
+		return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
+	});
+	return uuid;
+};
+// 获取缓存
+export function getCache(key) {
+	return JSON.parse(localStorage.getItem(key))
+}
+// 设置缓存
+export function setCache(key, data) {
+	localStorage.setItem(key, JSON.stringify(data))
+}
+// 清除缓存
+export function removeCache(key) {
+	localStorage.removeItem(key)
+}
+
+function getClass(o) { //判断数据类型
+	return Object.prototype.toString.call(o).slice(8, -1);
+}
+
+function deepCopy(obj) { //深度拷贝对象
+	var result, oClass = getClass(obj);
+	if (oClass == "Object") result = {}; //判断传入的如果是对象,继续遍历
+	else if (oClass == "Array") result = []; //判断传入的如果是数组,继续遍历
+	else return obj; //如果是基本数据类型就直接返回
+	for (var i in obj) {
+		var copy = obj[i];
+		if (getClass(copy) == "Object" || getClass(copy) == "Array") result[i] = deepCopy(
+		copy); //递归方法 ,如果对象继续变量obj[i],下一级还是对象,就obj[i][i]
+		// else if (getClass(copy) == "Array") result[i] = deepCopy(copy); //递归方法 ,如果对象继续数组obj[i],下一级还是数组,就obj[i][i]
+		else result[i] = copy; //基本数据类型则赋值给属性
+	}
+	return result;
+}
+
+export function openError(data) {
+	if (process.env.NODE_ENV == 'production') {
+		Vue.prototype.$axios('post', '/api/e', data)
+	}
+}
+export function getUserData() {
+	return JSON.parse(localStorage.getItem(UserIdKey));
+}
+export function setUserData(data) {
+	localStorage.setItem(UserIdKey, JSON.stringify(data))
+}
+// 获取积分类型
+export function getTyps(id) {
+	if (id) {
+		var arr = JSON.parse(localStorage.getItem(TypesKey));
+		var item = arr.filter(element => {
+			return typeof(id) == 'string' ? element.code == id : element.id == id
+		});
+		return item[0]
+	} else {
+		return JSON.parse(localStorage.getItem(TypesKey));
+	}
+}
+// 获取积分类型名称
+export function getTypsName(id) {
+	return getTyps(id).name
+}
+// 判断是否创始人
+export function getIsCreator(key) {
+	let is = false;
+	getUserData().employee_detail.role_list.forEach(item => {
+		if (key == item.name) {
+			is = true;
+		}
+	})
+	return is
+}
+
+export function supremeAuthority() { //获取当前角色最高权限     判断是否为某项权限:this.$authoritys('dept_manager') 或 this.$supremeAuthority() == 'dept_manager'
+	if (getIsCreator('creator')) {
+		return 'creator'
+	} else if (getIsCreator('admin')) {
+		return 'admin'
+	} else if (getIsCreator('point_manager')) {
+		return 'point_manager'
+	} else if (getIsCreator('dept_manager')) {
+		return 'dept_manager'
+	} else if (getIsCreator('employee')) {
+		return 'employee'
+	}
+}
+export function authoritys(key) { //判断是否为某项权限:this.$authoritys('dept_manager')
+	return supremeAuthority() == key
+}
+//过滤绩效分
+function GlTypes(arr) {
+	return arr.filter(function(item) {
+		return item.code != 'JX'
+	})
+}
+export function setTyps(data) {
+	var arr = GlTypes(data);
+	localStorage.setItem(TypesKey, JSON.stringify(arr))
+}
+
+export function getToken() {
+	return localStorage.getItem(TokenKey)
+}
+
+export function setToken(token) {
+	localStorage.setItem(TokenKey, token)
+}
+
+// 防抖
+export function _debounce(fn, delay = 500) {
+	let timer = null
+	return function() {
+		let arg = arguments
+		clearTimeout(timer)
+		timer = setTimeout(() => {
+			fn.apply(this, arg)
+		}, delay)
+	}
+}
+// 节流
+export function _throttle(fn, interval = 500) {
+	var last;
+	var timer;
+	return function() {
+		var th = this;
+		var args = arguments;
+		var now = +new Date();
+		if (last && now - last < interval) {
+			clearTimeout(timer);
+			timer = setTimeout(function() { //用户最后一次点击时间间隔小于设置时间执行
+				last = now;
+				fn.apply(th, args);
+			}, interval);
+		} else {
+			last = now;
+			fn.apply(th, args);
+		}
+	}
+}

+ 108 - 0
src/api/axios.js

@@ -0,0 +1,108 @@
+import axios from 'axios'
+import {Message} from 'element-ui'
+import {
+	getToken,
+	setToken,
+	openError
+} from './auth.js'
+import qs from 'qs'
+const service = axios.create({
+	baseURL: process.env.VUE_APP_BASE_API, 
+	// baseURL:'https://ding.insys.g107.com/',
+	timeout: 20000,
+	headers: {
+		'Content-Type': 'application/x-www-form-urlencoded',
+	},
+	transformRequest: [function(data) {
+		return qs.stringify(data)
+	}]
+})
+let url='';
+let data='';
+service.interceptors.request.use(
+	config => {
+		url=config.url;
+		data=qs.parse(config.data)
+		if (getToken()) {
+			config.headers['A-Token'] = getToken()
+		}
+		return config
+	},
+	error => {
+		Promise.reject(error)
+	}
+)
+
+service.interceptors.response.use(
+	response => {
+		if (response.data.code === 1) {
+			if(response.data.data.token){
+				setToken(response.data.data.token);
+			}else if (response.data.refresh_token) {
+				if (response.data.refresh_token !== getToken()) {
+					setToken(response.data.refresh_token);
+				}
+			}
+			return response;
+		} else if (response.data.code === 401) {
+			Message({
+				message: response.data.msg,
+				type: 'error',
+			})
+			return Promise.reject(response.data.msg)
+		}else if(response.data.code === 2001){ //免登时用,2001为过期
+			if(url=='/api/ding/login'){
+				return response;
+			}else{
+				Message({
+					message: response.data.msg,
+					type: 'error',
+				})
+			return Promise.reject(response.data.msg)
+			}
+		}else{
+			Message({
+				message: response.data.msg,
+				type: 'error',
+			})
+			return Promise.reject(response.data.msg)
+		}
+	},
+	error => {
+		if(error.message=='interrupt'){
+			// Message({
+			// 	message: '请勿频繁切换页面',
+			// 	type: 'warning',
+			// })
+			return Promise.reject(error.message)
+		}else if(error.message=='Network Error'){
+			// Message({
+			// 	message: '网络异常,请检查网络是否畅通,再重新进入应用',
+			// 	type: 'error',
+			// })
+			console.log('网络异常,请检查网络是否畅通,再重新进入应用')
+			return Promise.reject(error.message)
+		}else if(error.message=='timeout of 20000ms exceeded'){
+			if(url=='/api/integral/review/a/entry'||url=='/api/integral/point/entry'){
+				let sum=0;
+				if(data){
+					sum=data.items.length*data.members.length
+				}
+				openError({sum:sum,message:'钉钉PC'})
+			}
+			Message({
+				message: '请求超时,请稍后再试',
+				type: 'error',
+			})
+			return Promise.reject(error.message)
+		}else{
+			Message({
+				message: error.message,
+				type: 'error',
+			})
+			return Promise.reject(error.message)
+		}
+	}
+)
+
+export default service

+ 101 - 0
src/api/websocket.js

@@ -0,0 +1,101 @@
+
+let wsurl='wss://' + process.env.VUE_APP_WEBSCOKET + '/ws/';
+let ws = null
+let weboscket_callback = null
+import {getToken,generateUUID } from '@/api/auth';
+import {Message} from 'element-ui'
+
+//获取 websocket 推送的数据
+let websocketonmessage = e => {
+	let data=JSON.parse(e.data)
+	if(data.type=="ping"){
+		if(ws){
+			ws.send('保持连接')
+		}
+	}
+	return weboscket_callback(data);
+}
+
+// 连接成功
+let websocketonopen = () => {
+	console.log('websocket 成功')
+}
+
+// 连接失败时重新连接
+let websocketonerror = () => {
+	Message({
+		message: '服务器繁忙,请稍后再试',
+		type: 'error',
+	})
+	weboscket_callback({type:'error',msg:'服务器繁忙,请稍后再试'})
+	// initWebSocket()
+}
+
+// 断开链接后报错
+let websocketclose = e => {
+	if(!e.wasClean){//当网络中断时处理
+		Message({
+			message: '网络连接失败,请稍后再试',
+			type: 'error',
+		})
+		weboscket_callback({type:'break',msg:'网络连接失败,请稍后再试'})
+		closewebsocket();
+	}
+}
+
+// 手动关闭 websocket
+let closewebsocket = () => {
+	if(ws){
+		console.log('websocket 关闭')
+		ws.close()
+		ws=null;
+	}
+}
+
+let initWebSocket = () => {
+	//初始化 websocket
+	ws = new WebSocket(wsurl)
+	ws.onmessage = websocketonmessage
+	ws.onopen = websocketonopen
+	ws.onerror = websocketonerror
+	ws.onclose = websocketclose
+}
+
+// 发送数据
+let sendData = (data, callback) => {
+	weboscket_callback = callback
+	//  判断 data 数据类型
+	if (typeof data == 'string') {
+		data = data
+	} else {
+		data = JSON.stringify(data)
+	}
+	if(ws){//  判断 websocket 的状态
+		if (ws.readyState === ws.OPEN) {// 已经打开,可以直接发送
+			// console.log("1")
+			ws.send(data)
+		} else if (ws.readyState === ws.CONNECTING) {// 正在开启状态中,则 1 秒后重新发送
+			// console.log("2")
+			setTimeout(() => {
+				ws.send(data)
+			}, 2000)
+		}
+	}else {
+		// 未打开,则开启后重新调用
+		initWebSocket()
+		let wsData = {
+			type: 'auth',
+			token: getToken(),
+			machine:generateUUID()
+		};
+		sendData(wsData, callback)
+		sendData(data, callback)
+	}
+}
+
+// 导出
+export {
+	initWebSocket,
+	sendData,
+	closewebsocket
+}

+ 62 - 0
src/assets/css/iconfont.css

@@ -0,0 +1,62 @@
+@font-face {
+	font-family: "iconfont";
+	/* Project id 2916418 */
+	src: url('iconfont.woff2?t=1637991685964') format('woff2'),
+		url('iconfont.woff?t=1637991685964') format('woff'),
+		url('iconfont.ttf?t=1637991685964') format('truetype');
+}
+
+.iconfont {
+	font-family: "iconfont" !important;
+	font-size: 26px;
+	font-style: normal;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+}
+.titleIcon{
+	color: #99A9BF !important;
+}
+
+.icon-shezhi_jichushezhi:before {
+	content: "\e70c";
+}
+
+.icon-shezhi_jiaose:before {
+	content: "\e70f";
+}
+
+.icon-shezhi_zidongjifen:before {
+	content: "\e710";
+}
+
+.icon-shezhi_zuzhijiagou:before {
+	content: "\e711";
+}
+
+.icon-fulizhongxin:before {
+	content: "\e652";
+}
+
+.icon-kaoqin_kaoqinyuebaobiao:before {
+	content: "\e708";
+}
+
+.icon-shezhi_jifenguize:before {
+	content: "\e70d";
+}
+
+.icon-PC_gongzuotai_ABfen:before {
+	content: "\e71d";
+}
+
+.icon-dingdingPC_shezhi1:before {
+	content: "\e725";
+}
+
+.icon-dingdingPC_tongji1:before {
+	content: "\e726";
+}
+
+.icon-shouye:before {
+	content: "\e639";
+}

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


+ 86 - 0
src/assets/css/iconfont.json

@@ -0,0 +1,86 @@
+{
+  "id": "2916418",
+  "name": "钉钉PC",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "15023955",
+      "name": "设置_基础设置",
+      "font_class": "shezhi_jichushezhi",
+      "unicode": "e70c",
+      "unicode_decimal": 59148
+    },
+    {
+      "icon_id": "15023958",
+      "name": "设置_角色",
+      "font_class": "shezhi_jiaose",
+      "unicode": "e70f",
+      "unicode_decimal": 59151
+    },
+    {
+      "icon_id": "15023959",
+      "name": "设置_自动积分",
+      "font_class": "shezhi_zidongjifen",
+      "unicode": "e710",
+      "unicode_decimal": 59152
+    },
+    {
+      "icon_id": "15023960",
+      "name": "设置_组织架构",
+      "font_class": "shezhi_zuzhijiagou",
+      "unicode": "e711",
+      "unicode_decimal": 59153
+    },
+    {
+      "icon_id": "12097436",
+      "name": "福利中心",
+      "font_class": "fulizhongxin",
+      "unicode": "e652",
+      "unicode_decimal": 58962
+    },
+    {
+      "icon_id": "15023948",
+      "name": "考勤_考勤月报表",
+      "font_class": "kaoqin_kaoqinyuebaobiao",
+      "unicode": "e708",
+      "unicode_decimal": 59144
+    },
+    {
+      "icon_id": "15023956",
+      "name": "设置_积分规则",
+      "font_class": "shezhi_jifenguize",
+      "unicode": "e70d",
+      "unicode_decimal": 59149
+    },
+    {
+      "icon_id": "16909825",
+      "name": "PC_工作台_AB分",
+      "font_class": "PC_gongzuotai_ABfen",
+      "unicode": "e71d",
+      "unicode_decimal": 59165
+    },
+    {
+      "icon_id": "17517997",
+      "name": "钉钉PC_设置",
+      "font_class": "dingdingPC_shezhi1",
+      "unicode": "e725",
+      "unicode_decimal": 59173
+    },
+    {
+      "icon_id": "17517998",
+      "name": "钉钉PC_统计",
+      "font_class": "dingdingPC_tongji1",
+      "unicode": "e726",
+      "unicode_decimal": 59174
+    },
+    {
+      "icon_id": "739117",
+      "name": "首页",
+      "font_class": "shouye",
+      "unicode": "e639",
+      "unicode_decimal": 58937
+    }
+  ]
+}

BIN
src/assets/css/iconfont.ttf


BIN
src/assets/css/iconfont.woff


BIN
src/assets/css/iconfont.woff2


+ 333 - 0
src/assets/css/reset.css

@@ -0,0 +1,333 @@
+body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
+body, button, input, select, textarea {
+	font-size:14px;
+	color: #303133;
+    font-family: "Source Sans Pro", "Helvetica Neue", Arial, sans-serif;
+	-webkit-font-smoothing: antialiased;
+	-webkit-tap-highlight-color: transparent;
+}
+h1, h2, h3, h4, h5, h6{ font-size:100%; }
+address, cite, dfn, em, var { font-style:normal; }
+code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
+small{ font-size:12px; }
+ul, ol { list-style:none; }
+a { text-decoration:none; }
+a:hover { text-decoration:underline; }
+sup { vertical-align:text-top; }
+sub{ vertical-align:text-bottom; }
+legend { color:#000; }
+fieldset, img { border:0; }
+button, input, select, textarea { font-size:100%; }
+table { border-collapse:collapse; border-spacing:0; }
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+.boxMinHeight{
+  min-height: calc(100vh - 110px);
+}
+
+.el-form-item__content{
+	line-height:36px !important;
+}
+
+/* 盒子模型 */
+.flex-box {
+  display: -webkit-box;
+  display: -moz-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+}
+
+/*盒子模型,竖向自适应,垂直排列  */
+.flex-box-v {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-flex-flow: column;
+  flex-flow: column !important;
+}
+/*flex-box与 flex-v-ce结合*/
+.flex-box-ce {
+  display: -webkit-box;
+  display: -moz-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  align-items: center;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+}
+
+/* 水平等列排版(容器左右没缝隙,子元素左右两边自适应) */
+.flex-d-center {
+  justify-content: space-between;
+  -webkit-justify-content: space-between;
+}
+
+/* 水平等列排版(子元素两边有缝隙自己适应) */
+.flex-dv-center {
+  justify-content: space-around;
+  -webkit-justify-content: space-around;
+}
+
+
+/*水平,垂直居中  */
+.flex-center-center {
+  justify-content: center;
+  -webkit-justify-content: center;
+  -moz-justify-content: center;
+  align-items: center;
+  -webkit-align-items: center;
+  -webkit-box-pack: center;
+  -webkit-box-align: center;
+  -moz-align-items: center;
+  -moz-box-pack: center;
+  -moz-box-align: center;
+}
+
+/*对view中的子元素进行居中,并且位于容器的中间位置 水平居中 */
+.flex-v-zhu,
+.flex-h-zhu {
+  justify-content: center;
+  -webkit-justify-content: center;
+  -webkit-box-pack: center;
+}
+
+/*对view中的子元素进行居中,并且位于容器的中间位置 垂直居中  */
+.flex-v-ce,
+.flex-h-ce {
+  align-items: center;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+}
+
+/*让所有弹性盒模型对象的子元素都有相同的长度,且忽略它们内部的内容:  */
+.flex-1 {
+  -webkit-box-flex: 1;
+  -moz-box-flex: 1;
+  -webkit-flex: 1;
+  -ms-flex: 1;
+  flex: 1;
+}
+
+.flex-2 {
+  -webkit-box-flex: 2;
+  box-flex: 2;
+  -moz-box-flex: 2;
+  -webkit-flex: 2;
+  -ms-flex: 2;
+  flex: 2;
+}
+
+.flex-3 {
+  -webkit-box-flex: 3;
+  box-flex: 3;
+  -moz-box-flex: 3;
+  -webkit-flex: 3;
+  -ms-flex: 3;
+  flex: 3;
+}
+
+.flex-4 {
+  -webkit-box-flex: 4;
+  box-flex: 4;
+  -moz-box-flex: 4;
+  -webkit-flex: 4;
+  -ms-flex: 4;
+  flex: 4;
+}
+
+
+.flex-5 {
+  -webkit-box-flex: 5;
+  box-flex: 5;
+  -moz-box-flex: 5;
+  -webkit-flex: 5;
+  -ms-flex: 5;
+  flex: 5;
+}
+
+/* 水平反方向 */
+.flex-direction-row-reverse {
+  flex-direction: row-reverse;
+  -webkit-flex-direction: row-reverse;
+}
+
+/*超出部分用....表示的公用样式  */
+.font-flex-word {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+/* 内容超出部分自动换行 */
+.flex-d-wrap {
+  flex-wrap: wrap;
+}
+
+/* 内容超出部分不换行 */
+.flex-no-wrap {
+  flex-wrap: nowrap;
+}
+
+/* 从右边开始排列 */
+.flex-box-end {
+  display: -webkit-box;
+  display: -moz-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  justify-content: flex-end;
+}
+
+/* 字体颜色 */
+.blue {
+	color: #26A2FF!important;
+}
+
+.red {
+	color: #F56C6C!important;
+}
+
+.yellow {
+	color: #E6A23C!important;
+}
+
+.green {
+	color: #67C23A!important;
+}
+
+.fontColorB {
+	color: #777777 !important;
+}
+.fontColorZ {
+	color: #303133!important;
+}
+
+.fontColorF {
+	color: #606266 !important;
+}
+
+.fontColorT {
+	color: #C0C4CC!important;
+}
+
+/* 整体布局样式 */
+.all{
+	background-color: #fff;
+	border-radius: 5px;
+	min-height:calc(100vh - 120px);
+	min-width: 800px;
+	position: relative;
+}
+.terr-left {
+	width: 200px;
+	box-sizing: border-box;
+	padding: 20px 10px;
+	max-height: 700px;
+	overflow: auto;
+}
+.terr-left::-webkit-scrollbar {
+	width: 3px;
+	height: 3px;
+	background-color: #fff;
+}
+.terr-left::-webkit-scrollbar-thumb {
+	background-color: #D9D9D9;
+}
+.terr-right{
+	padding: 20px;
+	min-width: 600px;
+	box-sizing: border-box;
+}
+.border-right:after {
+	content: ' ';
+	position: absolute;
+	top: 0;
+	left: 200px;
+	bottom: 0;
+	width: 1px;
+	background: #ebeef5;
+}
+.border-right {
+	/* position: relative; */
+}
+.padding-20{
+	padding: 20px;
+}
+.margin-bottom{
+	margin-bottom: 20px;
+}
+.diy-tip {
+	margin-bottom: 10px !important;
+	background: #f0f9eb !important;
+	color: #67c23a !important;
+	border: 1px solid #67c23a !important;
+	padding:16px !important;
+	min-width: 800px;
+	border-radius: 4px;
+}
+.diy-tip p{
+	color: #67c23a !important;
+}
+/* 分页样式 */
+.pagination{
+	padding: 20px 0;
+	text-align: center;
+}
+
+
+/* EL UI 重置 */
+
+.notifyBox{
+	width: auto !important;
+}
+
+/* 级联选择器长度限制样式 */
+.el-cascader-menu .el-cascader-menu__wrap .el-scrollbar__view li.el-cascader-node {
+  height: auto;
+  max-width: 500px;
+}
+.el-cascader-menu .el-cascader-menu__wrap .el-scrollbar__view li.el-cascader-node .el-cascader-node__label {
+  white-space: initial;
+  overflow: initial;
+  text-overflow: initial;
+}
+/* // 滚动条样式 */
+.scroll-bar{
+  scroll-behavior: smooth
+}
+.scroll-bar::-webkit-scrollbar {
+  width: 6px;
+  height: 6px;
+}
+
+/*外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果*/
+.scroll-bar::-webkit-scrollbar-track {
+  width: 6px;
+  background-color: #fff0;
+  -webkit-border-radius: 2em;
+  -moz-border-radius: 2em;
+  border-radius: 2em;
+
+}
+
+/*滚动条的设置*/
+.scroll-bar::-webkit-scrollbar-thumb {
+  background-color: #fff0;
+  background-clip: padding-box;
+  -webkit-border-radius: 2em;
+  -moz-border-radius: 2em;
+  border-radius: 2em;
+}
+/*滚动条移上去的背景*/
+.scroll-bar:hover::-webkit-scrollbar-thumb {
+  background-color: rgba(144, 147, 153, 0.3);
+  height: 20px;
+}

BIN
src/assets/image/APP2.png


BIN
src/assets/image/a_apply.png


BIN
src/assets/image/app1.png


BIN
src/assets/image/code.png


BIN
src/assets/image/entry_list.png


BIN
src/assets/image/init.gif


BIN
src/assets/image/kq1.png


BIN
src/assets/image/kq2.png


BIN
src/assets/image/logo.png


BIN
src/assets/image/my_publish.png


BIN
src/assets/image/nodata.png


BIN
src/assets/image/nodata_default.png


BIN
src/assets/image/noperson_default.png


BIN
src/assets/image/one.png


BIN
src/assets/image/pc.png


BIN
src/assets/image/performance.png


BIN
src/assets/image/prizeBuckle.png


BIN
src/assets/image/rules_mould.png


BIN
src/assets/image/rules_mould1.png


BIN
src/assets/image/statistics_NO1.png


BIN
src/assets/image/statistics_NO2.png


BIN
src/assets/image/statistics_NO3.png


BIN
src/assets/image/task.png


BIN
src/assets/image/task_hall.png


BIN
src/assets/image/two.png


BIN
src/assets/image/tz.png


BIN
src/assets/image/wn.png


BIN
src/assets/image/zq.png


+ 754 - 0
src/components/EmployeeSelector.vue

@@ -0,0 +1,754 @@
+<template>
+	<div>
+		<div class="employee_selector_box">
+			<el-row :gutter="10">
+				<el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box one">
+					<div class="search-box">
+						<div class="search flex-box" style="margin-bottom: 7px;"><el-input v-model="keyword" placeholder="请输入姓名" clearable></el-input></div>
+						<div class="search flex-box" v-if="can_select_dept">
+							<el-cascader
+								v-model="dept_id"
+								ref="dept"
+								:options="dept_list"
+								:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+						</div>
+					</div>
+					<div class="flex-box-end" style="padding: 10px;border-bottom: 1px solid #f1f1f1;height: 40px;box-sizing: border-box;">
+						<el-checkbox v-if="isChecKedAll && multi" v-model="checked" @change="checkedChange" :indeterminate="indeterminate">全选</el-checkbox>
+					</div>
+					<el-scrollbar :style="{ height: can_select_dept ? '310px' : '350px' }" :native="false" v-loading="table_loading">
+						<div class="choose_left">
+							<div class="persons_box" v-if="list.length > 0">
+								<div class="employee_cell_a"  v-for="(item, index) in list" :key="index">
+									<div class="employee_cell flex-box flex-v-ce" v-show="can_select_employee" @click.prevent.stop="select_employee(item)">
+										<div class="employee_checkbox"><el-checkbox v-model="item.checked"></el-checkbox></div>
+										<img :src="item.img_url" width="30" height="30" class="imgUrl" v-if="item.img_url">
+										<div class="imgUrl" v-else style="background: #238DFA;color: #fff;">{{item.name.substring(item.name.length-2)}}</div>
+										<div class="employee_name">{{ item.name }}</div>
+									</div>
+								</div>
+							</div>
+							<div v-else class="fontColorF" style="text-align: center;margin-top: 50px;">暂无可选人员</div>
+						</div>
+					</el-scrollbar>
+				</el-col>
+				<el-col :xs="2" :sm="2" :md="2" :lg="2" :xl="2" class="col-line"><span style="opacity: 0;">空</span></el-col>
+				<el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box">
+					<div class="option-box flex-box flex-v-ce">
+						<div class="fontColorF flex-1" v-show="multi">已选择{{ employee_selected_list.length }}个员工</div>
+						<el-button type="type" @click="clear_data()">清空</el-button>
+					</div>
+					<el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" style="height: 390px;">
+						<div class="choose_right">
+							<div class="employee_cell flex-box flex-v-ce" v-for="(item, index) in dept_selected_list" :key="index">
+								<div class="employee_name">{{ item.dept_name }}</div>
+								<div class="employee_delete"><el-button type="default" size="mini" @click="dept_cancel(item)" icon="el-icon-close" circle></el-button></div>
+							</div>
+							<div class="flex-box-ce employee_cell2" v-for="(item, index) in employee_selected_list" :key="index">
+								<div class="flex-box-ce flex-1">
+									<img :src="item.img_url" width="30" height="30" style="margin-right: 8px;" class="imgUrl" v-if="item.img_url">
+									<div class="imgUrl" v-else style="background: #238DFA;color: #fff;margin-right: 8px;">{{item.name.substring(item.name.length-2)}}</div>
+									<div class="userName font-flex-word">{{ item.name }}</div>
+								</div>
+								<i class="el-icon-error deleteUser" v-if="!item.is_creator || !createDimness" @click="employee_cancel(item, true)"></i>
+							</div>
+						</div>
+					</el-scrollbar>
+				</el-col>
+			</el-row>
+		</div>
+	</div>
+</template>
+
+<script>
+// import Item  from './Item'
+// import VirtualList from 'vue-virtual-scroll-list'
+export default {
+	props: {
+		can_select_dept: {
+			//指定是否能选择部门
+			type: Boolean,
+			default: true
+		},
+		can_select_employee: {
+			//指定是否能选择员工
+			type: Boolean,
+			default: true
+		},
+		selected: {
+			//已经选择的员工和部门
+			type: Object,
+			default: () => {
+				return {
+					employee: [],
+					dept: []
+				};
+			}
+		},
+		multi: {
+			//指定员工是否能多选
+			type: Boolean,
+			default: true
+		},
+		dept_multi: {
+			//指定部门是否能多选
+			type: Boolean,
+			default: true
+		},
+		employee_list: {
+			//指定显示的员工列表,注意:传值后组件的员工数据将不是统一向服务器获取的,而是指定的员工列表,格式是:[{id: 1, name: “张三”, img_url: “”}]
+			type: Array,
+			default: () => {
+				return [];
+			}
+		},
+		close_clear_data: {
+			//关闭时是否清空选择的数据
+			type: Boolean,
+			default: true
+		},
+		max: {
+			//当multi为true时,用来限制选择人数,0不生效
+			type: Number,
+			default: 0
+		},
+		user_no_select: {
+			//是否能选择创始人
+			type: Boolean,
+			default: true
+		},
+		isChecKedAll: {
+			//是否能全人员
+			type: Boolean,
+			default: true
+		},
+		my_no_select: {
+			//当前设置人的id,过滤某位人员,一般为自己
+			type: Number,
+			default: 0
+		},
+		isCreatorSelect: {
+			//当employee_list为空时,依然显示空值而不是显示人员列表
+			type: Boolean,
+			default: false
+		},
+		use_Administrator_list: {
+			//未指定员工并请求人员接口时,保留管理员,过滤员工
+			type: Boolean,
+			default: false
+		},
+		createDimness: {
+			//组织架构设置上级专用-不清除创始人
+			type: Boolean,
+			default: false
+		}
+	},
+	name: 'EmployeeSelector',
+	data() {
+		let selected = JSON.parse(JSON.stringify(this.selected));
+		let user_no_select = JSON.parse(JSON.stringify(this.user_no_select));
+		return {
+			table_loading: false,
+			employee_selected_list: selected.employee,
+			dept_selected_list: selected.dept,
+			employee_selected: [],
+			dept_selected: [],
+			com_height: '100%',
+			list: [], //人员列表
+			dept_name: '', //部门名称
+			dept_id: 0, //部门ID
+			pid: 0, //部门ID实传
+			dept_list: [], //部门列表
+			dept_list_arr: [], //收集的部门
+			keyword: '', //搜索值
+			checked: false, //是否全选
+			indeterminate: false,
+			not_user: user_no_select,
+			all_list: [],
+			searchBox: [], //用于搜索的全部人员
+		};
+	},
+	watch: {
+		dept_id(val) {
+			if (val.length > 1) {
+				this.pid = val[val.length - 1];
+			} else {
+				this.pid = val[0];
+			}
+			this.$nextTick(() => {
+				this.$refs.dept.dropDownVisible = false;
+				this.get_user_list();
+				this.checked = false;
+			});
+		},
+		selected(val) {
+			let selected = JSON.parse(JSON.stringify(val));
+			this.employee_selected = [];
+			this.dept_selected = [];
+			this.employee_selected_list = selected.employee;
+			this.dept_selected_list = selected.dept;
+			for (let i in selected.employee) {
+				this.employee_selected.push(selected.employee[i].id);
+			}
+			for (let i in selected.dept) {
+				this.dept_selected.push(selected.dept[i].dept_id);
+			}
+		},
+		//搜索
+		keyword(val) {
+			this.list = this.searchBox.filter(item => item.name.includes(this.keyword));
+			if (!val) {
+			  this.checked = false;
+			}
+		}
+	},
+	methods: {
+		//全选择
+		checkedChange(val) {
+			if (val) {
+				this.$nextTick(() => {
+				  let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list)); //获取选择的人员
+				  
+				  let employeeSelectedIds = [],total = 0;
+				  employeeSelectedList.forEach(element => {
+				    employeeSelectedIds.push(element.id);
+				  });
+				  for (let i in this.list) {
+				    this.$set(this.list[i], 'checked', true);
+				    if (!employeeSelectedIds.includes(this.list[i].id)) {
+				      //去除已经选择的人员
+				      this.employee_selected_list.push(this.list[i]);
+				    }
+				  }
+				});
+				
+				// for (let i in this.list) {
+				// 	this.$set(this.list[i], 'checked', true);
+				// }
+				// this.$nextTick(() => {
+				// 	let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list));
+				// 	let employeeSelectedIds = [],total = 0;
+				// 	employeeSelectedList.forEach(element => {
+				// 		employeeSelectedIds.push(element.id);
+				// 	});
+				// 	for (const i in this.list) {
+				// 		if (employeeSelectedIds.includes(this.list[i].id)) {
+				// 			total += 1;
+				// 		} else {
+				// 			this.employee_selected_list.push(this.list[i]);
+				// 		}
+				// 	}
+				// 	this.list.length == total ? (this.indeterminate = true) : (this.indeterminate = false);
+				// });
+			} else {
+				this.clear_data();
+			}
+		},
+		//添加或移除已添加的员工
+		employee_cancel(item) {
+			this.employee_selected_list.map((arr, index) => {
+				if (arr.id == item.id) {
+					this.employee_selected_list.splice(index, 1);
+				}
+			});
+			this.list.map((arr, index) => {
+				if (arr.id == item.id) {
+					this.$set(arr, 'checked', false);
+				}
+			});
+		},
+		//获取部门
+		get_dept_list() {
+			this.$axios('get', '/api/department/tree').then(res => {
+				this.dept_list = this.getTreeData(res.data.data.list);
+			});
+		},
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i]._child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i]._child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i]._child);
+				}
+			}
+			return data;
+		},
+		//选择部门
+		dept_cancel(item) {
+			this.dept_selected.splice(this.dept_selected.indexOf(item.id), 1);
+			let delete_index = -1;
+			for (let i in this.dept_selected_list) {
+				if (this.dept_selected.indexOf(this.dept_selected_list[i].id) < 0) {
+					delete_index = i;
+				}
+			}
+			if (delete_index >= 0) {
+				this.dept_selected_list.splice(delete_index, 1);
+				for (let i in this.dept_list) {
+					if (this.dept_list[i].dept_id == item.id) {
+						this.$set(this.dept_list[i], 'checked', false);
+					}
+				}
+			}
+		},
+		//选择员工
+		select_employee(item) {
+			if (item.checked) {
+				item.checked = false;
+				this.employee_cancel(item);
+			} else {
+				if (!this.multi) {
+					this.employee_selected = [];
+					this.employee_selected_list = [];
+					for (let i in this.list) {
+						this.$set(this.list[i], 'checked', false);
+					}
+				}
+				if (this.max > 0 && this.employee_selected_list.length == this.max && this.multi) {
+					this.$message.error('最多只能选择' + this.max + '人');
+					return false;
+				}
+				this.employee_selected.push(item.id);
+				this.employee_selected_list.push({
+					id: item.id,
+					name: item.name,
+					img_url: item.img_url
+				});
+				item.checked = true;
+			}
+		},
+
+		clear_data() {
+			this.employee_selected = [];
+			if(this.createDimness){
+				this.employee_selected_list = this.employee_selected_list.filter(x => x.is_creator);
+			}else{
+				this.employee_selected_list = [];
+			}
+			this.dept_selected = [];
+			this.dept_selected_list = [];
+			this.checked = false;
+			for (let i in this.list) {
+				this.$set(this.list[i], 'checked', false);
+			}
+			for (let i in this.dept_list) {
+				this.$set(this.dept_list[i], 'checked', false);
+			}
+		},
+
+		close() {
+			if (this.close_clear_data) {
+				this.employee_selected = [];
+				this.employee_selected_list = [];
+				this.dept_selected = [];
+				this.dept_selected_list = [];
+				for (let i in this.list) {
+					this.$set(this.list[i], 'checked', false);
+				}
+				for (let i in this.dept_list) {
+					this.$set(this.dept_list[i], 'checked', false);
+				}
+			}
+		},
+		confirm() {
+			this.$emit('confirm', {
+				employee: this.employee_selected_list,
+				dept: this.dept_selected_list
+			});
+			this.close();
+		},
+		filtration() {
+			//获取员工列表,限制已禁用的员工
+			this.$axios('get', '/api/employee/index', { dept_id: this.pid, page: 0, page_size: 3000,is_official:1 })
+				.then(res => {
+					if (res.data.code == 1) {
+						let list = res.data.data.list;
+						let data = [];
+						// list.forEach((item, index) => {
+						// 	if (item.is_official == 1) {
+						// 		data.push(item);
+						// 	}
+						// });
+						this.userdatars(list);
+					} else {
+						this.userdatars();
+					}
+				})
+				.catch(() => {
+					this.userdatars();
+				});
+		},
+		userdatars(userlist) {
+			var employee_selected_list = this.employee_selected_list;
+			let list = this.employee_list;
+			if (userlist) {
+				list = [...userlist].filter(x => [...list].some(y => y.id === x.id));
+				employee_selected_list=[...userlist].filter(x => [...employee_selected_list].some(y => y.id === x.id));
+			}
+			list.map(item => {
+				item['checked'] = false;
+				for (var i in employee_selected_list) {
+					//判断传进来的员工是否是员工集合里的,是就设为已点击状态
+					if (employee_selected_list[i].id == item.id) {
+						item['checked'] = true;
+					}
+				}
+			});
+			this.employee_selected_list = employee_selected_list;
+			this.list = list;
+			this.searchBox=list;
+			this.table_loading = false;
+		},
+		//获取员工详情
+		get_user_list() {
+			this.table_loading = true;
+			var that = this;
+			var employee_selected_list = this.employee_selected_list;
+			if (this.employee_list.length > 0 || this.isCreatorSelect) {
+				this.filtration();
+				return false;
+			}
+			this.list = [];
+			this.$axios('get', '/api/employee/index', { dept_id: this.pid, keywords: this.keyword, page: 0, page_size: 3000,is_official:1 })
+				.then(res => {
+					var employee = res.data.data.list || [];
+					if (this.use_Administrator_list) {
+						//使用管理员列表
+						employee = this.useAdministratorList(employee);
+					}
+					var userAll = [];
+					employee.forEach((item, i) => {
+						if (!this.not_user && item.is_creator == 1) {
+							//过滤创始人
+							return null;
+						} else if (this.my_no_select == item.id) {
+							//过滤掉当前设置人
+							return null;
+						} else if (item.id) {
+							userAll.push(item);
+						}
+						// 前端先隐藏过滤未开启的人员的功能
+						// } else if (item.is_official == 1) {
+						// 	userAll.push(item);
+						// }
+					});
+					userAll.map(item => {
+						item['checked'] = false;
+						for (var i in employee_selected_list) {
+							//判断传进来的员工是否是员工集合里的,是就设为已点击状态
+							if (employee_selected_list[i].id == item.id) {
+								item['checked'] = true;
+							}
+						}
+					});
+					// employee_selected_list=[...employee].filter(x => [...employee_selected_list].some(y => y.id === x.id));
+					// that.employee_selected_list = employee_selected_list;
+					that.list = userAll;
+					this.searchBox=userAll;
+				})
+				.finally(() => {
+					that.table_loading = false;
+			});
+		},
+		useAdministratorList(list) {
+			//过滤掉普通员工,返回管理员
+			let arr = [];
+			list.forEach((item, i) => {
+				if (
+					item.employee_detail.role_list.findIndex(
+						value => value.name == 'dept_manager' || value.name == 'creator' || value.name == 'point_manager' || value.name == 'admin'
+					) >= 0
+				) {
+					arr.push(item);
+				}
+			});
+			return arr;
+		}
+	},
+	created() {
+		this.checked = false;
+		setTimeout(() => {
+			this.get_user_list();
+			if (this.can_select_dept) {
+				this.get_dept_list();
+			}
+		}, 200);
+	}
+};
+</script>
+
+<style scoped>
+.deleteUser{
+	font-size: 16px;
+	padding: 8px;
+	color: #777777;
+	cursor: pointer;
+}
+.deleteUser:hover{
+	color: #F56C6C;
+}
+.userName{
+	width: 170px;
+}	
+.employee_selector_box {
+	width: 600px;
+	padding: 20px;
+	box-sizing: border-box;
+	margin: 0 auto;
+}
+
+/* 搜索框 */
+.employee_selector_box .search {
+	margin: 0 auto;
+	width: 80%;
+}
+
+/* 左边框 */
+.employee_selector_box .choose_left {
+	padding: 8px 10px;
+}
+
+.employee_selector_box .choose_left .employee_cell {
+	border-bottom: 1px #f1f1f1 solid;
+}
+
+
+.employee_selector_box .choose_left .employee_checkbox {
+	padding-left: 8px;
+}
+
+.employee_selector_box .choose_left .employee_img_url {
+	padding-left: 8px;
+}
+
+.employee_selector_box .choose_left .employee_name {
+	padding-left: 8px;
+}
+
+/* .employee_selector_box ::v-deep .el-scrollbar__thumb {
+	width: 2px;
+	margin: 15px 0 0 6px;
+	background: #409eff;
+} */
+
+/* 右边距 */
+.employee_selector_box .option-box {
+	padding: 14px;
+}
+
+.employee_selector_box .choose_right {
+	padding: 8px 10px;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button {
+	transform: scale(0.5);
+	background: #c0c4cc;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button ::v-deep .el-icon-close {
+	color: #fff;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button:active {
+	background: #409eff;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button:active ::v-deep .el-icon-close {
+	color: #fff;
+}
+
+.employee_selector_box .choose_right .employee_cell .employee_name {
+	padding-left: 8px;
+}
+
+.employee_selector_box .choose_right .employee_cell .employee_img_url {
+	padding-left: 8px;
+}
+
+/* 右边距 */
+.employee_cell2{
+	padding: 8px 0;
+	height: 50px;
+	box-sizing: border-box;
+	border-bottom: 1px #f1f1f1 solid;
+}
+.employee_selector_box ::v-deep .employee_cell {
+	padding: 8px 0;
+	height: 50px;
+	box-sizing: border-box;
+}
+
+.employee_selector_box ::v-deep .employee_cell:hover {
+	background: #ecf5ff;
+}
+
+.employee_cell {
+	display: -webkit-inline-box;
+	cursor: pointer;
+	width: 100%;
+	color: #606266;
+	padding: 8px 0;
+	background-color: transparent;
+	border-bottom: 1px #f1f1f1 solid;
+}
+
+
+.employee_cell .employee_img_url {
+	display: table-cell;
+	vertical-align: middle;
+	width: 30px;
+	padding-left: 0px;
+}
+
+.employee_cell .employee_img_url img {
+	width: 24px;
+	height: 24px;
+	border-radius: 50%;
+}
+
+.employee_cell .employee_checkbox {
+	display: table-cell;
+	vertical-align: middle;
+	width: 30px;
+	text-align: center;
+}
+
+.employee_cell .employee_name {
+	display: table-cell;
+	vertical-align: middle;
+	color: #606266;
+}
+
+.employee_delete {
+	display: table-cell;
+	text-align: right;
+	padding-right: 0px;
+}
+
+.employee_cell_a {
+	display: block;
+}
+
+.employee_cell_a:hover {
+	background-color: #ecf5ff;
+	border-radius: 4px;
+}
+
+.dept_child_cell {
+	display: table-cell;
+	vertical-align: middle;
+}
+
+.dept_child_cell span {
+	float: right;
+	padding-right: 8px;
+}
+
+.dept_child_cell span:hover {
+	color: #1c1c1c;
+}
+
+.dept_child_cell span:active {
+	color: #1c1c1c;
+}
+
+.scroller-box {
+	height: 440px;
+	padding: 0px !important;
+	background-color: #fdfdfd;
+	border: 1px solid #eee;
+	border-radius: 4px;
+	overflow: hidden;
+}
+/* .scroller-box.one{
+    height: 440px;
+  } */
+
+.col-line {
+	position: relative;
+	height: 400px;
+}
+
+.col-line:before {
+	content: ' ';
+	width: 1px;
+	height: 400px;
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: 50%;
+	background-color: #eee;
+}
+
+.search-box {
+	background-color: #fff;
+	padding: 10px 5px;
+	border-bottom: 1px solid #eee;
+}
+
+.option-box {
+	padding: 5px;
+	background-color: #fff;
+	border-bottom: 1px solid #eee;
+	margin: 0 -5px;
+}
+
+.child_btn {
+	color: #409eff;
+}
+.dept_path {
+	margin: 10px 0;
+	display: block;
+	white-space: nowrap;
+	overflow: auto;
+}
+
+/*滚动条的宽度*/
+
+.dept_path::-webkit-scrollbar {
+	width: 5px;
+	height: 5px;
+}
+
+/*外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果*/
+
+.dept_path::-webkit-scrollbar-track {
+	width: 6px;
+	background-color: #fff0;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+
+/*滚动条的设置*/
+
+.dept_path::-webkit-scrollbar-thumb {
+	background-color: #fff0;
+	background-clip: padding-box;
+	min-height: 28px;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+/*滚动条移上去的背景*/
+
+.dept_path:hover::-webkit-scrollbar-thumb {
+	background-color: rgba(144, 147, 153, 0.3);
+}
+.imgUrl{
+	border-radius: 50%;
+	height: 30px;
+	width: 30px;
+	box-sizing: border-box;
+	text-align: center;
+	line-height: 30px;
+	font-size: 0.6rem;
+}
+</style>

+ 86 - 0
src/components/Steps.vue

@@ -0,0 +1,86 @@
+<template>
+  <div>
+    <p class="row_title">
+      审批
+      <span class="row_tips fontColorB">多人审批时,以最后一人为准</span>
+    </p>
+    <div class="examine_steps">
+      <el-steps direction="vertical" :space="50">
+        <el-step v-for="(item, index) in process" :key="index" style="margin-bottom: 5px;">
+          <template slot="icon">
+            <userImage width="36px" height="36px" :img_url="item.img_url" :user_name="item.name"></userImage>
+          </template>
+          <template slot="title">
+            <div>
+              <div class="flex-box-ce" style="color: #303133;font-size:14px;margin-top:-2px;">
+                <div class="flex-1">
+                  {{ item.name }}
+                  <span style="margin: 0 5px;">
+                    <span v-if="item.remark == '待审核'" style="color:#E6A23C;font-size:13px">待审批</span>
+                    <span v-else-if="item.remark == '审核通过'" style="color:#67C23A;font-size:13px">审批通过</span>
+                    <span v-else-if="item.remark == '审核驳回'" style="color:#F56C6C;font-size:13px">审批驳回</span>
+                    <span v-else>{{ item.remark }}</span>
+                  </span>
+                  <strong style="font-weight: 500;">
+                    <span class="red point" v-show="item.review_point > 0">+{{ item.review_point }}</span>
+                    <span class="green point" v-show="item.review_point < 0">{{ item.review_point }}</span>
+                  </strong>
+                </div>
+                <span class="fontColorF" style="font-size:12px;">{{ item.time }}</span>
+              </div>
+            </div>
+          </template>
+          <template slot="description" style="">
+            <div class="fontColorB" style="margin: 5px 0;">{{ item.review_remark }}</div>
+          </template>
+        </el-step>
+      </el-steps>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'Steps',
+  props: {
+    process: {
+      type: Array,
+      default: () => {
+        return [];
+      }
+    }
+  },
+  data() {
+    return {};
+  },
+  methods: {}
+};
+</script>
+
+<style scoped="scoped" lang="scss">
+.row_title {
+  position: relative;
+  margin: 0 0 20px 0;
+  padding-top: 12px;
+  font-size: 16px;
+  color: #303133;
+  line-height: 22px;
+}
+.row_title:before {
+  position: absolute;
+  top: 0;
+  content: ' ';
+  width: 100%;
+  border-top: 1px #f8f8f8 solid;
+}
+.el-row {
+  margin-bottom: 10px;
+  font-size: 14px;
+  .el-col-4 {
+    color: #606266;
+  }
+}
+.row_tips{
+	font-size: 12px;
+}
+</style>

+ 268 - 0
src/components/Suggest.vue

@@ -0,0 +1,268 @@
+<template>
+	<el-dialog title="添加公告" :visible.sync="visible_" :close-on-click-modal="false" :before-close="close_before" append-to-body width="640px" top="5%">
+		<el-form ref="dialogData" label-width="100px" class="form">
+			<el-form-item label="公告标题" :rules="[{ required: true, message: '请输入公告标题', trigger: 'blur' }]">
+				<el-input type="text" v-model="params.name" placeholder="请输入公告标题" maxlength="30" show-word-limit></el-input>
+			</el-form-item>
+			<div style="border: 1px solid #ccc;margin-bottom: 20px;" v-if="visible_">
+				<!-- 工具栏 -->
+				<Toolbar style="border-bottom: 1px solid #ccc" :editorId="editorId" :defaultConfig="toolbarConfig"/>
+				<!-- 编辑器 -->
+				<Editor style="height: 300px" :editorId="editorId" :defaultConfig="editorConfig" :defaultContent="getDefaultContent" @onChange="onChange" />
+			</div>
+			<el-form-item label="图片">
+				<uploadOss
+					:headers="Xtoken"
+					:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
+					:show-file-list="true"
+					:file-list="img_fileList"
+					:on-success="handleFilesSuccess"
+					:on-preview="onFilePreView"
+					:before-upload="beforeUpload"
+					:on-remove="onFileRemove"
+					:limit="1"
+					:multiple="true"
+				>
+					<el-button type="primary" size="small">点击上传</el-button>
+					(最多选择1张)
+				</uploadOss>
+			</el-form-item>
+		</el-form>
+		<span slot="footer" class="dialog-footer">
+			<el-button @click="close">取 消</el-button>
+			<el-button type="primary" @click="confirm">确 定</el-button>
+		</span>
+	</el-dialog>
+</template>
+
+<script>
+import uploadOss from '@/components/upload';
+import { Editor, Toolbar, getEditor, removeEditor, createEditor } from '@wangeditor/editor-for-vue';
+import cloneDeep from 'lodash.clonedeep';
+import { getToken } from '@/api/auth';
+export default {
+	name: 'Suggest',
+	components: { uploadOss, Editor, Toolbar },
+	props: {
+		isAdd: {
+			type: Boolean,
+			default: true
+		},
+		visible: {
+			// 是否显示组件
+			type: Boolean,
+			default: false
+		},
+		detaliData:{
+			type: Object,
+			default:()=>{
+				return {}
+			}
+		}
+	},
+	data() {
+		return {
+			Xtoken: { 'X-Token': getToken() },
+			visible_: false,
+			// 建议
+			img_fileList: [], // 图片附件
+			save_loading: false,
+			params: {
+				name: '',
+				html: '',
+				content: '',
+				file_list: [],
+				// tag: ['福利']
+			},
+
+			// 富文本
+			editorId: 'wangEditor-1', // 定义一个编辑器 id ,要求:全局唯一且不变。重要!!!
+			defaultContent: [], // 编辑器的默认内容,只在初始化时使用
+			latestContent: [], // 用于存储编辑器最新的内容,onChange 时修改
+			toolbarConfig: {
+				mode: 'simple',
+				toolbarKeys: [
+					'headerSelect', // 分割线
+					'|',
+					'bold',
+					'italic',
+					'underline',
+					'through',
+					'color',
+					'bgColor',
+					'indent',
+					'justifyLeft',
+					'justifyRight',
+					'justifyCenter',
+					'justifyJustify',
+					'bulletedList',
+					'numberedList',
+					'clearStyle'
+				]
+			},
+			editorConfig: {
+				placeholder: '请输入内容...'
+			}
+		};
+	},
+	computed: {
+		// <!-- 注意,这里使用 computed 的结果 -->
+		getDefaultContent() {
+			return cloneDeep(this.defaultContent); // 深拷贝,重要!!!
+		}
+	},
+	watch: {
+		visible(val) {
+			if(!this.isAdd&&val){
+				let detaliData=this.detaliData;
+				if(detaliData.content.content){
+					this.defaultContent=JSON.parse(detaliData.content.content);
+					if(detaliData.file_list){
+						this.img_fileList=[{name:'图片',url:detaliData.file_list}]
+						this.params.file_list=[detaliData.file_list]
+					}
+					
+				}
+				this.params.name=detaliData.name
+			}
+			this.visible_ = JSON.parse(JSON.stringify(val));
+		}
+	},
+	methods: {
+		onChange(editor) {
+			this.params.content = editor.children;
+			this.params.html = editor.getHtml();
+		},
+		// 图片上传
+		beforeUpload(file) {
+			const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
+			const isLt2M = file.size / 1024 / 1024 < 2;
+			if (!isJPG) {
+				this.$message.error('上传图片只能是 jpeg|png|jpg 格式!');
+			}
+			if (!isLt2M) {
+				this.$message.error('上传图片大小不能超过 2MB!');
+			}
+			return isJPG && isLt2M;
+		},
+		onFilePreView(file) {
+			window.open(file.url, '_blank');
+		},
+		onFileRemove(file, fileList) {
+			this.img_fileList = fileList;
+			let imgs = [];
+			fileList.forEach((element, index) => {
+				imgs.push(element.url);
+			});
+			this.params.file_list = imgs;
+		},
+		handleFilesSuccess(response, file, fileList) {
+			this.img_fileList = fileList;
+			let imgs = [];
+			fileList.forEach((element, index) => {
+				imgs.push(element.url);
+			});
+			this.params.file_list = imgs;
+		},
+
+		// 确定
+		confirm() {
+			if (!this.params.name) {
+				this.$message.error('请填写标题');
+				return false;
+			}
+			this.params.content=JSON.stringify(this.params.content)
+			if(!this.isAdd){
+				this.params.id=this.detaliData.id;
+				this.$axios('post','/api/information/update',this.params).then(res => {
+						this.$message.success('发布成功');
+						this.$parent.noticeList();
+						this.close();
+				})
+			}else{
+				this.$axios('post','/api/information/create',this.params).then(res => {
+						this.$message.success('发布成功');
+						this.$parent.noticeList();
+						this.close();
+				})
+			}
+		},
+		close_before(done) {
+			this.close();
+			done();
+		},
+		close() {
+			this.img_fileList=[];
+			this.defaultContent=[];
+			this.params={
+				name: '',
+				html: '',
+				content: '',
+				file_list: [],
+			};
+			this.beforeDestroys();
+			this.$emit('update:visible', false);
+		},
+		beforeDestroys() {
+			const editor = getEditor(this.editorId);
+			if (editor == null) return;
+			editor.destroy(); // 组件销毁时,及时销毁编辑器 ,重要!!!
+			removeEditor(this.editorId);
+		}
+	},
+};
+</script>
+<style src="@wangeditor/editor/dist/css/style.css"></style>
+<style scoped="scoped" lang="scss">
+/* 表格 */
+table {
+	border-collapse: collapse;
+}
+table th,
+table td {
+	border: 1px solid #ccc;
+	min-width: 50px;
+	height: 20px;
+	text-align: left;
+}
+table th {
+	background-color: #f1f1f1;
+	text-align: center;
+}
+
+/* 代码块 */
+pre > code {
+	display: block;
+	border: 1px solid hsl(0, 0%, 91%);
+	border-radius: 4px 4px;
+	text-indent: 0;
+	background-color: #fafafa;
+	padding: 10px;
+	font-size: 14px;
+}
+
+/* 引用 */
+blockquote {
+	display: block;
+	border-left: 8px solid #d0e5f2;
+	padding: 10px 10px;
+	margin: 10px 0;
+	background-color: #f1f1f1;
+}
+
+/* 列表 */
+ul,
+ol {
+	margin: 10px 0 10px 20px;
+}
+
+/* 分割线 */
+hr {
+	display: block;
+	width: 90%;
+	margin: 20px auto;
+	border: 0;
+	height: 1px;
+	background-color: #ccc;
+}
+</style>

+ 43 - 0
src/components/SvgIcon/index.vue

@@ -0,0 +1,43 @@
+<template>
+  <svg :class="svgClass" aria-hidden="true" v-on="$listeners">
+    <use :xlink:href="iconName" />
+  </svg>
+</template>
+
+<script>
+export default {
+  name: 'SvgIcon',
+  props: {
+    iconClass: {
+      type: String,
+      required: true
+    },
+    className: {
+      type: String,
+      default: ''
+    }
+  },
+  computed: {
+    iconName() {
+      return `#icon-${this.iconClass}`
+    },
+    svgClass() {
+      if (this.className) {
+        return 'svg-icon ' + this.className
+      } else {
+        return 'svg-icon'
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+.svg-icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>

+ 97 - 0
src/components/UserImage.vue

@@ -0,0 +1,97 @@
+<template>
+  <div style="box-sizing: border-box;">
+    <img v-if="imgUrl" class="logo_img" :src="imgUrl" :width="width" :height="height" />
+    <div v-else class="user_name_div" :style="{
+	   width: width,
+	   height: height,
+	   lineHeight: height, 
+	   fontSize: fontSize + 'rem'}">
+	   {{name}}
+	 </div>
+  </div>
+</template>
+<script>
+  export default {
+    name: 'userImage',
+    props: {
+      width: {
+        type: String,
+        default: '0.8rem'
+      },
+      height: {
+        type: String,
+        default: '0.8rem'
+      },
+      id:{
+        type: Number,
+        default: 0
+      },
+      img_url: {
+        type: String,
+        default: ''
+      },
+      user_name: {
+        type: String,
+        default: ''
+      },
+      fontSize:{
+        type: String,
+        default: '0.8'
+      }
+    },
+    // 数据
+    data(){
+      return {
+        imgUrl: "",
+        name: "",
+		employeeMap:this.$getCache("userList")
+      }
+    },
+	watch:{
+		id: function(val) {
+			this.name_no()
+		},
+		img_url: function(val) {
+			this.name_no()
+		},
+		user_name: function(val) {
+			this.name_no()
+		},
+	},
+	// 组件挂载完成
+	mounted() {
+	  this.name_no()
+	},
+    // 方法
+    methods:{
+      name_no(){
+		 this.imgUrl=this.img_url
+		 this.name=this.user_name
+		let pattern = new RegExp("^[\u4E00-\u9FA5]+");
+		if(this.name.length > 2){
+		  if(pattern.test(this.name)){
+		    this.name = this.name.substring(this.name.length-2,this.name.length)
+		  }else{
+		    this.name = this.name.substring(0,2)
+		  }
+		}  
+        if(!this.imgUrl&&this.id&&this.employeeMap){
+          this.imgUrl=this.employeeMap[this.id]? this.employeeMap[this.id].img_url:""
+        }
+      }
+    },
+  }
+</script>
+<style scoped>
+  .user_name_div{
+    border-radius: 50%;
+    background: #238dfa;
+    text-align: center;
+    color: #fff;
+    margin: 0 auto;
+	box-sizing: border-box;
+  }
+  .logo_img{
+    border-radius: 50%;
+  }
+</style>

+ 110 - 0
src/components/VirtualList.vue

@@ -0,0 +1,110 @@
+<template>
+  <div ref="list" class="infinite-list-container" @scroll="scrollEvent($event)">
+    <div class="infinite-list-phantom" :style="{ height: listHeight + 'px' }"></div>
+    <div class="infinite-list" :style="{ transform: getTransform }">
+      <div ref="items" class="infinite-list-item"  v-for="item in visibleData"  :key="item.id"
+	   :style="{ height: itemSize + 'px',lineHeight: itemSize + 'px' }"
+      >{{ item.value }}</div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name:'VirtualList',
+  props: {
+    //所有列表数据
+    listData:{
+      type:Array,
+      default:()=>[]
+    },
+    //每项高度
+    itemSize: {
+      type: Number,
+      default:200
+    }
+  },
+  data() {
+    return {
+      //可视区域高度
+      screenHeight:0,
+      //偏移量
+      startOffset:0,
+      //起始索引
+      start:0,
+      //结束索引
+      end:null,
+    };
+  },
+  computed:{
+    //列表总高度
+    listHeight(){
+      return this.listData.length * this.itemSize;
+    },
+    //可显示的列表项数
+    visibleCount(){
+	  //  Math.ceil() 方法可对一个数进行向上取整。
+      return Math.ceil(this.screenHeight / this.itemSize)
+    },
+    //偏移量对应的style
+    getTransform(){
+      return `translate3d(0,${this.startOffset}px,0)`;
+    },
+    //获取真实显示列表数据
+    visibleData(){
+      return this.listData.slice(this.start, Math.min(this.end,this.listData.length));
+    }
+  },
+  mounted() {
+	 //可视区域高度 
+    this.screenHeight = this.$el.clientHeight;
+	
+    this.start = 0;
+    this.end = this.start + this.visibleCount;
+  },
+  methods: {
+    scrollEvent() {
+      //当前滚动位置
+      let scrollTop = this.$refs.list.scrollTop;
+      //此时的开始索引
+	  // Math.floor方法可对一个数进行下舍入。
+      this.start = Math.floor(scrollTop / this.itemSize);
+      //此时的结束索引
+      this.end = this.start + this.visibleCount;
+      //此时的偏移量
+      this.startOffset = scrollTop - (scrollTop % this.itemSize);
+    }
+  }
+};
+</script>
+<style scoped>
+.infinite-list-container {
+  height: 100%;
+  overflow: auto;
+  position: relative;
+  -webkit-overflow-scrolling: touch;
+}
+
+.infinite-list-phantom {
+  position: absolute;
+  left: 0;
+  top: 0;
+  right: 0;
+  z-index: -1;
+}
+
+.infinite-list {
+  left: 0;
+  right: 0;
+  top: 0;
+  position: absolute;
+  text-align: center;
+}
+
+.infinite-list-item {
+  padding: 10px;
+  color: #555;
+  box-sizing: border-box;
+  border-bottom: 1px solid #999;
+}
+</style>

+ 819 - 0
src/components/applicationIntegrationPopup.vue

@@ -0,0 +1,819 @@
+<template>
+	<div>
+		<!-- 奖扣ab分弹窗 -->
+		<el-dialog :title="title" :visible.sync="visible" :close-on-click-modal="false" :before-close="closeDialog2" width="600px">
+			<div>
+				<el-form :model="dialogData" ref="dialogData" label-width="80px" v-loading="loading">
+					<div v-for="(item, index) in dialogData.items" :key="index" @click="itemIndex = index">
+						<div style="overflow: hidden;" class="flex-box flex-v-ce">
+							<span style="line-height: 36px;" class="flex-1">申请明细({{ index + 1 }})</span>
+							<el-button type="text" v-show="index > 0 || dialogData.items.length > 1" @click="delItem(index)">删除</el-button>
+						</div>
+						<el-form-item label="录入对象" :prop="'items.' + index + '.employeeName'" :rules="[{ required: true, message: '请选择录入对象', trigger: 'change' }]">
+							<el-row>
+								<el-col :span="18">
+									<el-input auto-complete="off" v-model="item.employeeName" placeholder="请选择录入对象"></el-input>
+									<div @click="item.show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+								</el-col>
+							</el-row>
+
+							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_employee_selector" append-to-body :before-close="handleClose">
+								<EmployeeSelector
+									v-if="item.show_employee_selector"
+									ref="employee"
+									:multi="false"
+									:user_no_select="false"
+									:selected="item.employee_selected"
+									@confirm="employee_confirm"
+								/>
+								<span slot="footer" class="dialog-footer">
+									<el-button @click="item.show_employee_selector = false">取 消</el-button>
+									<el-button type="primary" @click="submitMembers('employee')">确 定</el-button>
+								</span>
+							</el-dialog>
+						</el-form-item>
+						<el-form-item label="指定规则"><el-switch v-model="item.rule_switch" @change="switchChange(index, item.rule_switch)" :disabled="ruleOnoff"></el-switch></el-form-item>
+						<el-form-item
+							label="选择规则"
+							v-if="item.rule_switch"
+							:prop="'items.' + index + '.rule_item_list_value'"
+							:rules="[{ required: true, message: '请选择规则', trigger: 'change' }]"
+						>
+							<el-cascader
+								v-model="item.rule_item_list_value"
+								ref="ruleItem"
+								:popper-class="'itemClass'"
+								:options="rule_item_list"
+								@change="ruleItemChange"
+								:show-all-levels="false"
+								filterable
+								clearable
+								:props="{ children: 'child', label: 'name', value: 'id' }"
+							></el-cascader>
+						</el-form-item>
+
+						<el-form-item v-if="item.rule_switch && item.rule_id">
+							<div style="line-height: 24px;" v-show="item.rule_item_details.range_type == 1">
+								{{ item.rule_item_details.min_point }}
+								<span class="blue">{{ $getTypsName(item.rule_item_details.pt_id) }}</span>
+							</div>
+							<div style="line-height: 24px;" v-show="item.rule_item_details.range_type == 2">
+								{{ item.rule_item_details.min_point }} ~ {{ item.rule_item_details.max_point }}
+								<span class="blue">{{ $getTypsName(item.rule_item_details.pt_id) }}</span>
+							</div>
+							<div style="line-height: 24px;">{{ item.rule_item_details.name }}</div>
+						</el-form-item>
+
+						<el-form-item label="发生时间" :prop="'items.' + index + '.event_time'" :rules="[{ required: true, message: '请选择时间', trigger: 'blur' }]">
+							<el-row>
+								<el-col :span="18">
+									<el-date-picker
+										v-model="item.event_time"
+										:picker-options="pickerBeginDateBefore"
+										type="date"
+										placeholder="请选择时间"
+										value-format="yyyy-MM-dd"
+									></el-date-picker>
+								</el-col>
+							</el-row>
+						</el-form-item>
+
+						<el-form-item
+							label="事件内容"
+							:prop="'items.' + index + '.remark'"
+							:rules="[{ required: true, message: '请输入事件内容', trigger: 'blur' }, { min: 3, max: 100, message: '长度在 3 到 100 个字符', trigger: 'blur' }]"
+						>
+							<el-row>
+								<el-col :span="18"><el-input type="textarea" rows="3" placeholder="请输入事件内容" style="width: 100%;" v-model="item.remark"></el-input></el-col>
+							</el-row>
+						</el-form-item>
+
+						<el-form-item label="图片" label-width="100px">
+							<uploadOss
+								:headers="Xtoken"
+								class="avatar-uploader"
+								:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
+								:show-file-list="true"
+								:file-list="item.fileList"
+								:on-success="handleFilesSuccess"
+								:on-preview="onFilePreView"
+								:before-upload="beforeUpload"
+								:on-remove="onFileRemove"
+								:limit="3"
+								:multiple="true"
+								ref="clearPicture"
+							>
+								<el-button size="small" type="primary">点击上传</el-button>
+								(最多选择3张)
+							</uploadOss>
+						</el-form-item>
+
+						<el-form-item
+							v-loading.lock="fullscreenLoading"
+							label="审批人"
+							:prop="'items.' + index + '.approvalName'"
+							:rules="[{ required: true, message: '请选择审批人', trigger: 'blur' }]"
+						>
+							<el-row>
+								<el-col :span="18">
+									<el-input auto-complete="off" v-model="item.approvalName" placeholder="请选择审批人"></el-input>
+									<div @click="approval_selected_null(item)" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+								</el-col>
+							</el-row>
+							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_approval_selector" append-to-body :before-close="handleClose">
+								<EmployeeSelector
+									:can_select_employee="true"
+									v-if="item.show_approval_selector"
+									ref="approval"
+									:multi="false"
+									:employee_list="item.approval_employee_list"
+									:user_no_select="false"
+									:isCreatorSelect="true"
+									:selected="item.approval_selected"
+									@confirm="approval_confirm"
+								/>
+								<span slot="footer" class="dialog-footer">
+									<el-button @click="item.show_approval_selector = false">取 消</el-button>
+									<el-button type="primary" @click="submitApproval('approval')">确 定</el-button>
+								</span>
+							</el-dialog>
+						</el-form-item>
+					</div>
+					<el-form-item style="margin-bottom: 0;"><div>如需录入多条,请点击“增加一条”</div></el-form-item>
+					<el-form-item style="margin-bottom: 0;"><el-button type="primary" plain @click="addItem">+ 增加一条</el-button></el-form-item>
+					<el-form-item style="text-align: right; margin-bottom: 0;">
+						<el-button @click="closeDialog2('dialogData')">取 消</el-button>
+						<el-button :disabled="btn_loading" :loading="btn_loading" type="primary" @click="subData('dialogData')">确 认</el-button>
+					</el-form-item>
+				</el-form>
+			</div>
+		</el-dialog>
+
+		<el-dialog :title="'提交结果'" :visible.sync="error_list_show" :before-close="closeDialog2" :append-to-body="true" width="700px">
+			<el-table :data="error_list">
+				<el-table-column prop="target" label="员工"></el-table-column>
+				<el-table-column prop="status" label="处理状态">
+					<template slot-scope="scope">
+						<span :style="'color:' + (scope.row.status == 0 ? '#f70000' : '#47bf47')">{{ scope.row.status == 0 ? '申请失败' : '申请成功' }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="remark" label="备注信息"></el-table-column>
+			</el-table>
+		</el-dialog>
+		
+		<el-dialog title="提交结果" :visible.sync="isResult"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+			<div class="" v-if="!isShowError">
+				<div style="text-align: center;margin-bottom: 10px;" class="red" v-if="isShowError2">{{errorMsg}}</div>
+				<el-progress :text-inside="true" :stroke-width="24" :percentage="percentage"></el-progress>
+				<div style="margin-top: 20px;border: 1px solid #f1f1f1;">
+					<div class="flex-box-ce results" style="font-weight: 600;">
+						<div  style="border-right: 1px solid #f1f1f1;width: 50px;">序号</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">申请内容</div>
+						<!-- <div class="flex-1" style="border-right: 1px solid #f1f1f1;">积分</div> -->
+						<div class="flex-2" >处理结果</div>
+					</div>
+					<div class="flex-box-ce results" v-for="(item, index) in results" :key="index">
+						<div  style="border-right: 1px solid #f1f1f1;width: 50px;">{{results.length-index}}</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.target }}</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.remark }}</div>
+<!-- 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
+						    {{ item.point>0? '+'+item.point:item.point }} 
+							<span>{{ item.task.msg.pt_id==3? 'B分':'A分' }}</span>
+						</div> -->
+						<div class="flex-2 green" v-if="item.status == 1">{{ item.msg }}</div>
+						<div class="flex-2 red" v-else>{{ item.msg }}</div>
+					</div>
+				</div>
+				<span slot="footer">
+					<div class="flex-box-end" style="margin-top: 20px;" v-show="isShowError2&&results.length!=resultList.length"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length==resultList.length">
+						<el-button type="primary" @click="isResult = false" size="small">确 定</el-button>
+					</div>
+				</span>
+			</div>
+			<div v-else>
+				<div style="text-align: center;" class="red">{{errorMsg}}</div>
+				<span slot="footer">
+					<div class="flex-box-end" style="margin-top: 20px;"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+				</span>
+			</div>
+		</el-dialog>
+		
+		<!-- 缓存的奖扣 -->
+		<el-dialog title="网络中断申请列表" :visible.sync="isShowBreak"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+			<div>
+				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;" class="scroll-bar">
+					<div class="flex-box-ce results" style="font-weight: 600;">
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">分类</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">规则</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">事件内容</div>
+						<!-- <div class="flex-1" style="border-right: 1px solid #f1f1f1;">积分</div> -->
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">递交人员</div>
+					</div>
+					<div class="flex-box-ce results" v-for="(item, index) in breakList" :key="index">
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.name }}</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
+							<span v-if="item.rule_name">{{ item.rule_name }}</span>
+							<span v-else>--</span>
+						</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
+							<span v-if="item.item_name">{{ item.item_name }}</span>
+							<span v-else>--</span>
+						</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.remark }}</div>
+<!-- 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.point }} 
+							<span>{{ item.pt_id==3? 'B分':'A分' }}</span>
+						</div> -->
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.reviewer_name }}</div>
+					</div>
+				</div>
+				<span slot="footer">
+					<div class="flex-box-end" style="margin-top: 20px;">
+						<el-button type="primary" @click="colseBreak()" size="small">取 消</el-button>
+						<el-button type="primary" @click="submitBreak()" size="small">再次提交</el-button>
+					</div>
+				</span>
+			</div>
+		</el-dialog>
+	
+	</div>
+</template>
+
+<script>
+import moment from 'moment';
+import EmployeeSelector from '@/components/EmployeeSelector';
+import uploadOss from '@/components/upload';
+export default {
+	name: 'applicationIntegration',
+	// 数据
+	model: {
+		prop: 'list',
+		event: 'value'
+	},
+	props: {
+		title: {
+			type: String,
+			default: ''
+		},
+		visible: {
+			type: Boolean,
+			default: false
+		},
+		isBreak: { //是否打开缓存的未完成奖扣
+			type: Boolean,
+			default: false
+		},
+		integralType: {
+			type: Number,
+			default: 0
+		},
+		ruleOnoff: {
+			type: Boolean,
+			default: false
+			//true:选择规则; false:选择分类
+		}
+	},
+	data() {
+		var getUserData = this.$getUserData();
+		return {
+			pickerBeginDateBefore: {
+				disabledDate(time) {
+					return time.getTime() > Date.now();
+				}
+			},
+			error_list: [], //错误信息数组
+			error_list_show: false, //错误信息弹窗
+			Xtoken: { 'X-Token': this.$getToken() },
+			loading: false,
+			dialogData: {
+				items: [
+					{
+						rule_switch: true,
+						rule_id: '',
+						item_id: '',
+						remark: '',
+						event_time: moment().format('YYYY-MM-DD'),
+
+						// 录入对象
+						employee_id: getUserData.id,
+						employeeName: getUserData.name,
+						employee_selected: { dept: [], employee: [{ id: getUserData.id, name: getUserData.name }] },
+						show_employee_selector: false,
+
+						// 审批人信息
+						reviewer_id: '',
+						approvalName: '',
+						approval_selected: { dept: [], employee: [] },
+						approval_employee_list: [], //当前选中人的 上级
+						show_approval_selector: false,
+
+						// 附件
+						fileList: [],
+						files: [],
+						// 规则分类 与 规则细则 名称
+						rule_list_value: null,
+						rule_item_list_value: null,
+						rule_item_details: { range_type: '' }
+					}
+				]
+			},
+			// 规则分类
+			rule_list: [],
+			// 规则细则
+			rule_item_list: [],
+			flatteningIntegralRules: null,
+			user_info: null,
+			btn_loading: false,
+			itemIndex: 0,
+			fullscreenLoading: false, //选择审批人时需要,获取录入对象的上级
+			LocalValObj: { id: '', name: '' } ,//当前录入的审批人缓存
+			
+			// 长连接结果
+			results: [], //提交的返回结果集合
+			isResult: false,
+			percentage: 0,
+			resultList:[],//要发送数据的集合
+			resultIndex:0,
+			isShowError:false,
+			isShowError2:false,
+			errorMsg:'服务器繁忙,请稍后再试',
+			breakList:[],
+			isShowBreak:false,
+		};
+	},
+	components: { EmployeeSelector, uploadOss },
+	async mounted() {
+		this.user_info = this.$getUserData();
+		var reviewerObj = await this.getLocalVal(this.user_info.id);
+		var res = reviewerObj ? reviewerObj : { id: '', name: '' };
+		this.LocalValObj = res;
+		this.getRuleItemData();
+		// 初始化审批人
+		if (this.LocalValObj.id) {
+			this.dialogData.items[0].approval_selected.employee = [this.LocalValObj];
+			this.dialogData.items[0].reviewer_id = this.LocalValObj.id;
+			this.dialogData.items[0].approvalName = this.LocalValObj.name;
+		}
+		if(this.isBreak){
+			let data=this.$getCache('apply_list');
+			data.forEach(item=>{
+				item.name=this.$getCache('userList')[item.employee_id]?this.$getCache('userList')[item.employee_id].name:'--';
+				item.reviewer_name=this.$getCache('userList')[item.reviewer_id]?this.$getCache('userList')[item.reviewer_id].name:'--';
+			})
+			this.breakList=data;
+			this.isShowBreak=true;
+		}
+	},
+	watch:{
+		isResult(val){
+			if(!val){
+				this.isShowError=false;
+				this.isShowBreak = false;
+				this.errorMsg='服务器繁忙,请稍后再试';
+				this.$refs['dialogData'].resetFields();
+				this.closeDialog();
+				this.closeDialog2();
+				this.$socketApi.closewebsocket();
+			}
+		}
+	},
+	methods: {
+		// 关闭缓存弹窗
+		colseBreak(){
+			this.isShowBreak = false;
+			this.breakList=[];
+			this.$removeCache('apply_list');
+			this.closeDialog();
+			this.closeDialog2();
+		},
+		// 提交缓存申请
+		submitBreak(){
+			this.$removeCache('apply_list');
+			this.resultList=JSON.parse(JSON.stringify(this.breakList));
+			this.resultIndex=0;
+			this.percentage=0;
+			this.results=[];
+			this.isResult=true;
+			this.opneWebSocket()
+		},
+		
+		//获取缓存起来的审批人
+		getLocalVal(id) {
+			return new Promise((resolve, reject) =>{
+				let obj;
+				this.$axios('get', '/api/employee/info', { id: id }).then(res =>{
+					if(res.data.code == 1){
+						let data = res.data.data;
+						if(data.employee_detail.superior_list && data.employee_detail.superior_id != 0){
+							obj = data.employee_detail.superior_list.filter(x => x.id == data.employee_detail.superior_id)[0];
+							if(obj.id == this.user_info.id){
+								obj = this.$getCache(id)
+							}
+						}else{
+							obj = this.$getCache(id);
+						}
+					}
+				}).finally(_ =>{
+					resolve(obj)
+				})
+			})
+		},
+		submitMembers(name) {
+			this.$refs[name][0].confirm(); //调用组件的confirm();
+		},
+		submitApproval(name) {
+			this.$refs[name][0].confirm(); //调用组件的confirm();
+		},
+		//关闭
+		handleClose(done) {
+			done();
+		},
+		// 附件上传
+		beforeUpload(file) {
+			const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
+			const isLt2M = file.size / 1024 / 1024 < 1;
+			if (!isJPG) {
+				this.$message.error('上传头像图片只能是 JPEG,PNG,JPG 格式!');
+			}
+			if (!isLt2M) {
+				this.$message.error('上传头像图片大小不能超过 2MB!');
+			}
+			return isJPG && isLt2M;
+		},
+		onFilePreView(file) {
+			window.open(file.response.url, '_blank');
+		},
+		onFileRemove(file, fileList) {
+			this.dialogData.items[this.itemIndex].fileList = fileList;
+			this.dialogData.items[this.itemIndex].files = [];
+			fileList.forEach((element, index) => {
+				this.dialogData.items[this.itemIndex].files.push(element.url);
+			});
+		},
+		handleFilesSuccess(response, file, fileList) {
+			this.dialogData.items[this.itemIndex].fileList = fileList;
+			this.dialogData.items[this.itemIndex].files = [];
+			fileList.forEach((element, index) => {
+				this.dialogData.items[this.itemIndex].files.push(element.url);
+			});
+		},
+
+		// 选择审批人前提
+		approval_selected_null(item) {
+			if (!item.employee_id) {
+				this.$message.error('请先选择录入对象');
+			} else {
+				this.fullscreenLoading = true;
+				this.getEmployeeList(item.employee_id, function(res) {
+					if (res.length > 0) {
+						item.approval_employee_list = res;
+						item.show_approval_selector = true;
+					} else {
+						this.$message.error('您没有审批人,请联系管理员');
+					}
+				});
+			}
+		},
+		//获取人员(上级人员)
+		getEmployeeList(userIdArr, callBack) {
+			this.$axios('get', 'api/employee/superior', { employee_id: userIdArr, filter_applyor: 1 })
+				.then(res => {
+					callBack(res.data.data.list);
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
+		// 获取规则信息
+		getRuleData() {
+			let data = {
+				cycle_type: '1'
+			};
+			this.integralType === 1 ? (data.pt_id = '1') : this.integralType === 2 ? (data.pt_id = '2') : (data.pt_id = '3');
+			this.$axios('get', '/api/integral/rule/trees', data).then(res => {
+				if (res.data.code == 1) {
+					const resultData = res.data.data;
+					this.rule_list = resultData.rule_tree;
+				}
+				this.rule_list = this.getTreeData(this.rule_list);
+			});
+		},
+		// 获取规则细则
+		getRuleItemData() {
+			let data = { cycle_type: '1' };
+			this.loading = true;
+			this.$axios('get', '/api/integral/rule/trees', data, 'v2').then(res => {
+				if (res.data.code == 1) {
+					const resultData = res.data.data;
+					this.rule_item_list = resultData.tree;
+					this.flatteningIntegralRules = this.getItemDetail(this.rule_item_list);
+					this.loading = false;
+				}
+			});
+		},
+		// 规则细则变化关闭down
+		ruleItemChange(value) {
+			const item = this.dialogData.items[this.itemIndex];
+			if(value.length>0){
+				let ruleItemDetail = null;
+				this.flatteningIntegralRules.forEach(element => {
+					if (element.id == value[value.length - 1]) {
+						ruleItemDetail = { ...element };
+					}
+				});
+				item.rule_item_details = ruleItemDetail;
+				item.remark = ruleItemDetail.name;
+				item.rule_id = ruleItemDetail.pid;
+				item.pt_id = ruleItemDetail.pt_id;
+				item.item_id = value[value.length - 1];
+				item.item_name = ruleItemDetail.name;
+				this.$refs.ruleItem.dropDownVisible = false;
+			}else{
+				item.rule_id = '';
+				item.pt_id="";
+				item.item_id = '';
+				item.remark =  '';
+				item.item_name =  '';
+				item.rule_item_list_value = '';
+				item.rule_item_details = { range_type: '' };
+			}	
+		},
+		// 递归判断列表,把最后的child设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i].child.length < 1) {
+					// child若为空数组,则将child设为undefined
+					data[i].child = undefined;
+				} else {
+					// child若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i].child);
+				}
+			}
+			return data;
+		},
+		// 选择对象
+		async employee_confirm(data) {
+			const item = this.dialogData.items[this.itemIndex];
+			item.employeeName = '';
+			item.employee_selected = { dept: [], employee: [] };
+			item.employee_id = '';
+
+			if (data.employee !== null && data.employee.length != 0) {
+				item.employeeName = data.employee[0].name;
+				item.employee_selected.employee = [{ name: data.employee[0].name, id: data.employee[0].id, img_url: data.employee[0].img_url }];
+				item.employee_id = data.employee[0].id;
+
+				var reviewerObj = await this.getLocalVal(data.employee[0].id);
+				var revieObj = reviewerObj ? reviewerObj : { id: '', name: '' };
+				// 清空审批人数据
+				if (revieObj.id) {
+					item.approval_selected = { dept: [], employee: [revieObj] };
+				} else {
+					item.approval_selected = { dept: [], employee: [] };
+				}
+				item.reviewer_id = revieObj.id;
+				item.approvalName = revieObj.name;
+				item.approval_employee_list = []; //当前选中人的 上级
+			}
+			item.show_employee_selector = false;
+		},
+
+		getItemDetail(arr) {
+			let result = [];
+			for (const item of arr) {
+				var res = JSON.parse(JSON.stringify(item)); // 先克隆一份数据作为第一层级的填充
+				delete res['child'];
+				result.push(res);
+				if (item.child instanceof Array && item.child.length > 0) {
+					// 如果当前child为数组并且长度大于0,才可进入getItemDetail()方法
+					result = result.concat(this.getItemDetail(item.child));
+				}
+			}
+			return result;
+		},
+		// 加一条
+		addItem() {
+			// if(this.dialogData.items.length==10){
+			// 	this.$message({
+			// 		type:"warning",
+			// 		message: '一次只能添加10条申请'
+			// 	});
+			// 	return false
+			// }
+			this.dialogData.items.push({
+				rule_switch: true,
+				rule_id: '',
+				item_id: '',
+				remark: '',
+				event_time: moment().format('YYYY-MM-DD'),
+
+				// 录入对象
+				employee_id: this.user_info.id,
+				employeeName: this.user_info.name,
+				employee_selected: { dept: [], employee: [{ id: this.user_info.id, img_url: this.user_info.img_url, name: this.user_info.name }] },
+				show_employee_selector: false,
+
+				// 审批人信息
+				reviewer_id: this.LocalValObj.id,
+				approvalName: this.LocalValObj.name,
+				approval_selected: { dept: [], employee: this.LocalValObj.id ? [this.LocalValObj] : [] },
+				approval_employee_list: [], //当前选中人的 上级
+				show_approval_selector: false,
+
+				// 附件
+				fileList: [],
+				files: [],
+				// 规则分类 与 规则细则 名称
+				rule_list_value: null,
+				rule_item_list_value: null,
+				rule_item_details: { range_type: '' }
+			});
+		},
+		closeDialog(formName) {
+			this.dialogData.items = [
+				{
+					rule_switch: true,
+					rule_id: '',
+					item_id: '',
+					remark: '',
+					event_time: moment().format('YYYY-MM-DD'),
+
+					// 录入对象
+					employee_id: this.user_info.id,
+					employeeName: this.user_info.name,
+					employee_selected: { dept: [], employee: [{ id: this.user_info.id, img_url: this.user_info.img_url, name: this.user_info.name }] },
+					show_employee_selector: false,
+
+					// 审批人信息
+					reviewer_id: '',
+					approvalName: '',
+					approval_employee_list: [], //当前选中人的 上级
+					approval_selected: { dept: [], employee: [] },
+					show_approval_selector: false,
+
+					// 附件
+					fileList: [],
+					files: [],
+					// 规则分类 与 规则细则 名称
+					rule_list_value: null,
+					rule_item_list_value: null,
+					rule_item_details: { range_type: '' }
+				}
+			];
+		},
+		delItem(index) {
+			this.$confirm('你确定要删除奖扣明细' + parseInt(index + 1) + '吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.dialogData.items.splice(index, 1);
+				this.$message({
+					type: 'success',
+					message: '删除成功!'
+				});
+			});
+		},
+		subData(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					this.save();
+				}
+			});
+		},
+		closeDialog2(){
+			this.$emit('update:visible', false);
+		},
+		// 提交数据
+		save() {
+			let data = { items: [] };
+			this.dialogData.items.forEach(element => {
+				data.items.push({
+					rule_id: element.rule_id || 0,
+					employee_id: element.employee_id,
+					item_id: element.item_id || 0,
+					item_name: element.item_name,
+					remark: element.remark,
+					event_time: element.event_time,
+					pt_id: element.pt_id,
+					reviewer_id: element.reviewer_id || 0,
+					approvalName: element.approvalName,
+					files: element.files
+				});
+			});
+			this.webSocket(data);
+			// 走长连接处理
+			return false;
+			this.btn_loading = true;
+			this.$axios('post', '/api/integral/review/apply', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.closeDialog();
+						this.error_list = res.data.data.list;
+						this.error_list_show = true;
+					}
+				})
+				.finally(() => {
+					this.btn_loading = false;
+					data.items.forEach(element => {
+						this.$setCache(element.employee_id,{ id: element.reviewer_id, name: element.approvalName });
+					});
+				});
+		},
+		webSocket(data){
+			data.items.forEach(item=>{
+				item.type='point_apply';
+				this.$setCache(item.employee_id,{ id: item.reviewer_id, name: item.approvalName });
+			})
+			this.resultList=data.items;
+			this.resultIndex=0;
+			this.percentage=0;
+			this.results=[];
+			this.isResult=true;
+			this.opneWebSocket()
+		},
+		opneWebSocket() {
+			let wsData=this.resultList;
+			if(wsData[this.resultIndex]){
+				this.$socketApi.sendData(wsData[this.resultIndex],this.onmessageWS)
+			}else{
+				console.log(this.results)
+			}
+			
+		},
+		onmessageWS(e){
+			if(e.type=='point_apply'){
+				this.results.push(e.result);
+				this.resultIndex++;
+				this.opneWebSocket();
+				// 进度条
+				let lng = this.resultList.length;
+				this.percentage += Math.floor(100 / lng);
+				if (lng == this.results.length) {
+					this.percentage = 100;
+				}
+			}
+			// 中途断开
+			if(e.type=='break'){
+				let wsData=this.resultList;
+				this.errorMsg=e.msg
+				this.$setCache('apply_list',wsData.slice(this.resultIndex,wsData.length));
+				this.isShowError2 = true;
+			}
+			// 连接不上
+			if(e.type=='error'){
+				this.errorMsg=e.msg
+				this.isShowError = true;
+			}
+		},
+		// 当switch 改变了
+		switchChange(index, value) {
+			this.itemIndex = index;
+			const item = this.dialogData.items[this.itemIndex];
+			if (!value) {
+				item.rule_id = '';
+				item.item_id = '';
+				item.rule_item_list_value = '';
+				item.remark =  '';
+				item.rule_item_details = { range_type: '' };
+			} else {
+				item.rule_id = '';
+				item.rule_list_value = '';
+			}
+		},
+		// 选择审核人
+		approval_confirm(data) {
+			const item = this.dialogData.items[this.itemIndex];
+			item.approvalName = '';
+			item.approval_selected = { dept: [], employee: [] };
+			item.reviewer_id = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				item.approvalName = data.employee[0].name;
+				item.approval_selected.employee = [{ name: data.employee[0].name, id: data.employee[0].id, img_url: data.employee[0].img_url }];
+				item.reviewer_id = data.employee[0].id;
+			}
+			item.show_approval_selector = false;
+		}
+	}
+};
+</script>
+<style lang="scss">
+.itemClass .el-cascader-menu .el-cascader-menu__wrap li.el-cascader-node {
+	height: auto;
+	max-width: 500px;
+	.el-cascader-node__label {
+		white-space: initial;
+		overflow: initial;
+		text-overflow: initial;
+	}
+}
+.results {
+	border-bottom: 1px solid #f1f1f1;
+	text-align: center;
+}
+.results div {
+	padding: 10px;
+}
+</style>

+ 954 - 0
src/components/bonusPointsPopup.vue

@@ -0,0 +1,954 @@
+<template>
+	<div>
+		<!-- 奖扣ab分弹窗 -->
+		<el-dialog :title="title" :visible.sync="visible" top="3%" :close-on-click-modal="false" :before-close="closePopup" width="600px">
+			<div>
+				<el-form :model="dialogData" ref="dialogData" label-width="80px" v-loading="loading">
+					<el-form-item label="录入对象" prop="members" :rules="[{ required: true, message: '请选择录入对象', trigger: 'change' }]">
+						<el-row>
+							<el-col :span="18">
+								<el-input auto-complete="off" v-model="employeeName" placeholder="请选择录入对象"></el-input>
+								<div @click="noPersonnelListTips" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+								<slot></slot>
+							</el-col>
+						</el-row>
+					</el-form-item>
+					<div v-for="(item, index) in dialogData.items" :key="index" @click.stop="itemIndex = index">
+						<div style="overflow: hidden;">
+							<span style="line-height: 36px;">录入明细({{ index + 1 }})</span>
+							<el-button type="text" class="fr" v-show="index > 0 || dialogData.items.length > 1" @click="delItem(index)">删除</el-button>
+						</div>
+						<el-form-item label="指定规则">
+							<el-switch :disabled="ruleOnoff" @change="switchChange(index, item.rule_switch)" v-model="item.rule_switch"></el-switch>
+						</el-form-item>
+						<el-form-item
+							class="test_cascader_id"
+							label="选择分类"
+							v-if="!item.rule_switch"
+							:prop="'items.' + index + '.rule_list_value'"
+							:rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]"
+						>
+							<el-cascader
+								v-model="item.rule_list_value"
+								:ref="'ruleCascader'+index"
+								:popper-class="'ruleClass'"
+								filterable
+								clearable
+								:options="rule_list"
+								@change="ruleChange"
+								:props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"
+							></el-cascader>
+						</el-form-item>
+
+						<el-form-item
+							label="选择规则"
+							v-if="item.rule_switch"
+							:prop="'items.' + index + '.rule_item_list_value'"
+							:rules="[{ required: true, message: '请选择规则', trigger: 'blur' }]"
+						>
+							<el-cascader
+								v-model="item.rule_item_list_value"
+								ref="ruleItem"
+								:popper-class="'itemClass'"
+								filterable
+								clearable
+								:options="rule_item_list"
+								@change="ruleItemChange"
+								:show-all-levels="false"
+								:props="{ children: 'child', label: 'name', value: 'id' }"
+							></el-cascader>
+						</el-form-item>
+
+						<el-form-item>
+							<div style="line-height: 24px;" v-show="item.rule_item_details.range_type == 1">
+								{{ item.rule_item_details.min_point }}
+								<span class="blue">{{ $getTypsName(ptid) }}</span>
+							</div>
+							<div style="line-height: 24px;" v-show="item.rule_item_details.range_type == 2">
+								{{ item.rule_item_details.min_point }} ~ {{ item.rule_item_details.max_point }}
+								<span class="blue">{{ $getTypsName(ptid) }}</span>
+							</div>
+							<div style="line-height: 24px;">{{ item.rule_item_details.name }}</div>
+						</el-form-item>
+						<el-form-item label="积分" :prop="'items.' + index + '.point'" :rules="[{ required: true, message: '请输入分值', trigger: 'blur' }]">
+							<el-input-number v-if="item.rule_item_details.range_type == 2" :min="item.min" :max="item.max" v-model.number="item.point"></el-input-number>
+							<el-input-number v-else :disabled="item.rule_item_details.range_type == 1" v-model.number="item.point"></el-input-number>
+						</el-form-item>
+
+						<el-form-item label="发生时间" :prop="'items.' + index + '.event_time'" :rules="[{ required: true, message: '请选择时间', trigger: 'blur' }]">
+							<el-row>
+								<el-col :span="18">
+									<el-date-picker
+										v-model="item.event_time"
+										:picker-options="pickerBeginDateBefore"
+										type="date"
+										placeholder="请选择时间"
+										value-format="yyyy-MM-dd"
+									></el-date-picker>
+								</el-col>
+							</el-row>
+						</el-form-item>
+
+						<el-form-item
+							label="事件内容"
+							:prop="'items.' + index + '.remark'"
+							:rules="[{ required: true, message: '请输入事件内容', trigger: 'blur' }, { min: 2, max: 100, message: '长度在 3 到 100 个字符', trigger: 'blur' }]"
+						>
+							<el-row>
+								<el-col :span="18"><el-input type="textarea" rows="3" placeholder="请输入事件内容" style="width: 100%;" v-model="item.remark"></el-input></el-col>
+							</el-row>
+						</el-form-item>
+
+						<el-form-item label="图片">
+							<upload
+								:headers="Xtoken"
+								class="avatar-uploader"
+								:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
+								:show-file-list="true"
+								:file-list="item.fileList"
+								:on-success="handleFilesSuccess"
+								:on-preview="onFilePreView"
+								:before-upload="beforeUpload"
+								:on-remove="onFileRemove"
+								:limit="3"
+								:multiple="true"
+								ref="clearPicture"
+							>
+								<el-button size="small" type="primary">点击上传</el-button>
+								(最多选择3张)
+							</upload>
+						</el-form-item>
+						<el-form-item label="递交审批" v-if="$getUserData().is_creator == 0">
+							<el-row>
+								<el-col :span="18">
+									<el-input auto-complete="off" v-model="item.approvalName" placeholder="请选择审批人"></el-input>
+									<div @click="item.show_approval_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+								</el-col>
+							</el-row>
+							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_approval_selector" append-to-body :before-close="handleClose">
+								<EmployeeSelector
+									v-if="item.show_approval_selector"
+									ref="superior"
+									:multi="false"
+									:isCreatorSelect="true"
+									:user_no_select="false"
+									:employee_list="superior_list"
+									:selected="item.approval_selected"
+									@confirm="approval_confirm"
+								/>
+								<span slot="footer" class="dialog-footer">
+									<el-button @click="item.show_approval_selector = false">取 消</el-button>
+									<el-button type="primary" @click="submitEmployee('superior')">确 定</el-button>
+								</span>
+							</el-dialog>
+						</el-form-item>
+					</div>
+					<el-form-item style="margin-bottom: 0;"><div>如需录入多条,请点击“增加一条”</div></el-form-item>
+					<el-form-item style="margin-bottom: 0;"><el-button type="primary" plain @click="addItem">+ 增加一条</el-button></el-form-item>
+					<el-form-item style="text-align: right; margin-bottom: 0;">
+						<el-button @click="closeDialog('dialogData')" :disabled="btn_loading">取 消</el-button>
+						<el-button type="primary" @click="subData('dialogData')" :disabled="btn_loading" :loading="btn_loading">确 认</el-button>
+					</el-form-item>
+				</el-form>
+			</div>
+			<el-dialog title="选择人员" width="640px" :visible.sync="show_employee_selector" append-to-body :before-close="handleClose">
+				<EmployeeSelector
+					v-if="show_employee_selector"
+					ref="members"
+					:isChecKedAll="false"
+					:isCreatorSelect="true"
+					:user_no_select="false"
+					:max="30"
+					:employee_list="manage_scope"
+					:selected="employee_selected"
+					@confirm="move_employee_confirm"
+				/>
+				<span slot="footer" class="dialog-footer">
+					<el-button @click="show_employee_selector = false">取 消</el-button>
+					<el-button type="primary" @click="submitMembers()">确 定</el-button>
+				</span>
+			</el-dialog>
+		</el-dialog>
+
+		<el-dialog :title="'提交结果'" :visible.sync="error_list_show" :append-to-body="true" width="700px">
+			<el-table :data="error_list">
+				<el-table-column prop="target" label="员工"></el-table-column>
+				<el-table-column prop="point" label="积分">
+					<template slot-scope="scope">
+						<span>
+							{{ scope.row.point }}
+							<span>{{ integralType == 2 ? 'A分' : 'B分' }}</span>
+						</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="status" label="处理状态">
+					<template slot-scope="scope">
+						<span :style="'color:' + (scope.row.status == 0 ? '#f70000' : '#47bf47')">{{ scope.row.msg }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="remark" label="备注信息"></el-table-column>
+			</el-table>
+		</el-dialog>
+	
+		<el-dialog title="提交结果" :visible.sync="isResult"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+			<div v-if="!isShowError">
+				<div style="text-align: center;margin-bottom: 10px;" class="red" v-if="isShowError2">{{errorMsg}}</div>
+				<el-progress :text-inside="true" :stroke-width="24" :percentage="percentage"></el-progress>
+				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;" class="scroll-bar">
+					<div class="flex-box-ce results" style="font-weight: 600;">
+						<div style="border-right: 1px solid #f1f1f1;width: 50px;">序号</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">事件内容</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">积分</div>
+						<div class="flex-2" >处理结果</div>
+					</div>
+					<div class="flex-box-ce results" v-for="(item, index) in results" :key="index">
+						<div style="border-right: 1px solid #f1f1f1;width: 50px;">{{results.length-index}}</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.target }}</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.task.msg.remark }}</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
+							{{ item.point>0? '+'+item.point:item.point }} 
+							<span>{{ item.task.msg.pt_id==3? 'B分':'A分' }}</span>
+						</div>
+						<div class="flex-2" v-if="item.status == 1">
+							<span v-if="item.msg=='奖扣成功'" class="green">{{ item.msg }}</span>
+							<span v-else class="blue">{{ item.msg }}</span>	
+						</div>
+						<div class="flex-2 red" v-else>{{ item.msg }}</div>
+					</div>
+				</div>
+				<span slot="footer">
+					<div class="flex-box-end" style="margin-top: 20px;" v-show="isShowError2&&results.length!=resultList.length"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length==resultList.length"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+				</span>
+			</div>
+			<div v-else>
+				<div style="text-align: center;" class="red">{{errorMsg}}</div>
+				<span slot="footer">
+					<div class="flex-box-end" style="margin-top: 20px;"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+				</span>
+			</div>
+		</el-dialog>
+		<!-- 缓存的奖扣 -->
+		<el-dialog title="网络中断奖扣列表" :visible.sync="isShowBreak"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+			<div>
+				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;" class="scroll-bar">
+					<div class="flex-box-ce results" style="font-weight: 600;">
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">分类</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">规则</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">事件内容</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">积分</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">递交人员</div>
+					</div>
+					<div class="flex-box-ce results" v-for="(item, index) in breakList" :key="index">
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.name }}</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
+							<span v-if="item.rule_name">{{ item.rule_name }}</span>
+							<span v-else>--</span>
+						</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
+							<span v-if="item.item_name">{{ item.item_name }}</span>
+							<span v-else>--</span>
+						</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.remark }}</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.point }} 
+							<span>{{ item.pt_id==3? 'B分':'A分' }}</span>
+						</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.reviewer_name }}</div>
+					</div>
+				</div>
+				<span slot="footer">
+					<div class="flex-box-end" style="margin-top: 20px;">
+						<el-button type="primary" @click="colseBreak()" size="small">取 消</el-button>
+						<el-button type="primary" @click="submitBreak()" size="small">再次提交</el-button>
+					</div>
+				</span>
+			</div>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import moment from 'moment';
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import upload from '@/components/upload';
+export default {
+	name: 'bonusPointsForm',
+	// 数据
+	model: {
+		prop: 'list',
+		event: 'value'
+	},
+	props: {
+		title: {
+			type: String,
+			default: ''
+		},
+		visible: {
+			type: Boolean,
+			default: false
+		},
+		isBreak: { //是否打开缓存的未完成奖扣
+			type: Boolean,
+			default: false
+		},
+		refresh: {
+			type: String,
+			default: ''
+		},
+		integralType: {
+			type: Number,
+			default: 0
+			// 1 是绩效分 , 2 是A分 , 3 是B分
+		},
+		ruleOnoff: {
+			type: Boolean,
+			default: false
+			//true:选择规则; false:选择分类
+		}
+	},
+	data() {
+		return {
+			pickerBeginDateBefore: {
+				disabledDate(time) {
+					return time.getTime() > Date.now();
+				}
+			},
+			Xtoken: { 'X-Token': this.$getToken() },
+			btn_loading: false,
+			loading: false,
+			dialogData: {
+				members: [],
+				items: [
+					{
+						rule_switch: true,
+						rule_id: '',
+						item_id: '',
+						point: '0',
+						remark: '',
+						event_time: moment().format('YYYY-MM-DD'),
+						approval: '',
+						approval_not_select: [],
+						pt_id: this.integralType,
+						// 积分填写限制
+						pointShow: 1,
+						max: 0,
+						min: 0,
+
+						// 审批人信息
+						reviewer_id: '',
+						approvalName: '',
+						approval_not_select: [],
+						approval_selected: { dept: [], employee: [] },
+						show_approval_selector: false,
+
+						// 附件
+						fileList: [],
+						files: [],
+						// 规则分类 与 规则细则 名称
+						rule_list_value: null,
+						rule_item_list_value: null,
+						// 规则细则详情
+						rule_item_details: { range_type: '' }
+					}
+				]
+			},
+			// 录入对象名称
+			employeeName: '',
+			employee_not_select: [],
+			employee_selected: { dept: [], employee: [] },
+			manage_scope: [], //下属人员
+			superior_list: [], //上级人员
+			show_employee_selector: false,
+			// 规则分类
+			rule_list: [],
+			// 规则细则
+			rule_item_list: [],
+			flatteningIntegralRules: null,
+			ptid: 0,
+			itemIndex: 0,
+
+			// 错误提示
+			error_list: [], //错误信息数组
+			error_list_show: false ,//错误信息弹窗
+			
+			// 长连接结果
+			results: [], //提交的返回结果集合
+			isResult: false,
+			percentage: 0,
+			resultList:[],//要发送数据的集合
+			resultIndex:0,
+			isShowError:false,
+			isShowError2:false,
+			errorMsg:'服务器繁忙,请稍后再试',
+			breakList:[],
+			isShowBreak:false,
+		};
+	},
+	components: { EmployeeSelector, upload },
+	watch: {
+		isBreak(){
+			let data=this.$getCache('award_punish').obj;
+			data.forEach(item=>{
+				item.name=this.$getCache('userList')[item.employee_id]?this.$getCache('userList')[item.employee_id].name:'--';
+				item.reviewer_name=this.$getCache('userList')[item.reviewer_id]?this.$getCache('userList')[item.reviewer_id].name:'--';
+			})
+			this.breakList=data;
+			this.isShowBreak=true;
+		},
+		integralType(val) {
+			this.dialogData.items[0].pt_id = val;
+			this.ptid = val;
+			this.getRuleData();
+			this.getRuleItemData();
+		},
+		'dialogData.members'(val) {
+			if (val.length == 0) {
+				this.employeeName = '';
+				this.employee_selected = { dept: [], employee: [] };
+			}
+		},
+		isResult(val){
+			if(!val){
+				this.isShowError = false;
+				this.isShowBreak = false;
+				this.$refs['dialogData'].resetFields();
+				this.$emit('update:refresh',this.$moment().format().valueOf());
+				this.closePopup();
+				this.errorMsg='服务器繁忙,请稍后再试';
+				this.$socketApi.closewebsocket();
+			}
+		},
+	},
+	mounted() {
+		var that = this;
+		this.getUserDetail(function(data) {
+			that.manage_scope = data.manage_scope;
+			that.superior_list = data.superior_list;
+		});
+	},
+	methods: {
+		// 关闭缓存弹窗
+		colseBreak(){
+			this.isShowBreak = false;
+			this.breakList=[];
+			this.$removeCache('award_punish');
+			this.$emit('update:refresh',this.$moment().format().valueOf());
+			this.closePopup();
+		},
+		// 提交缓存奖扣
+		submitBreak(){
+			this.$removeCache('award_punish');
+			this.resultList=JSON.parse(JSON.stringify(this.breakList));
+			this.resultIndex=0;
+			this.percentage=0;
+			this.results=[];
+			this.isResult=true;
+			this.opneWebSocket()
+		},
+		getUserDetail(func) {
+			this.$axios('get', '/api/employee/detail').then(res => {
+				this.$setUserData(res.data.data.user);
+				func(res.data.data.user.employee_detail);
+			});
+		},
+		submitEmployee(name) {
+			this.$refs[name][0].confirm(); //调用组件的confirm();
+		},
+		submitMembers() {
+			this.$refs.members.confirm(); //调用组件的confirm();
+		},
+		//关闭
+		handleClose(done) {
+			done();
+		},
+		// 附件上传
+		beforeUpload(file) {
+			const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
+			const isLt2M = file.size / 1024 / 1024 < 1;
+			if (!isJPG) {
+				this.$message.error('上传头像图片只能是 JPEG,PNG,JPG 格式!');
+			}
+			if (!isLt2M) {
+				this.$message.error('上传头像图片大小不能超过 2MB!');
+			}
+			return isJPG && isLt2M;
+		},
+		onFilePreView(file) {
+			if (file.response) {
+				window.open(file.response.url, '_blank');
+			}
+		},
+		onFileRemove(file, fileList) {
+			this.dialogData.items[this.itemIndex].fileList = fileList;
+			this.dialogData.items[this.itemIndex].files = [];
+			fileList.forEach((element, index) => {
+				this.dialogData.items[this.itemIndex].files.push(element.url);
+			});
+		},
+		handleFilesSuccess(response, file, fileList) {
+			this.dialogData.items[this.itemIndex].fileList = fileList;
+			this.dialogData.items[this.itemIndex].files = [];
+			fileList.forEach((element, index) => {
+				this.dialogData.items[this.itemIndex].files.push(element.url);
+			});
+		},
+
+		// 没有人员提示
+		noPersonnelListTips() {
+			this.show_employee_selector = true;
+		},
+		// 当switch 改变了
+		switchChange(index, value) {
+			this.itemIndex = index;
+			const item = this.dialogData.items[this.itemIndex];
+			if (!value) {
+				item.remark = '';
+				item.rule_id = '';
+				item.item_id = '';
+				item.rule_item_list_value = '';
+				item.rule_item_details = { range_type: '' };
+				item.max = 0;
+				item.min = 0;
+				item.point = '0';
+			} else {
+				item.rule_id = '';
+				item.rule_list_value = '';
+			}
+		},
+		// 选择录入对象
+		move_employee_confirm(data) {
+			this.employee_selected = { dept: [], employee: [] };
+			this.employeeName = '';
+			this.dialogData.members = [];
+			if (data.employee !== null && data.employee.length != 0) {
+				let nameArr = [];
+				data.employee.forEach(element => {
+					this.employeeName += element.name + ',';
+					this.employee_selected = data;
+					this.dialogData.members.push(element.id);
+				});
+			}
+			this.show_employee_selector = false;
+		},
+		// 获取规则类型
+		getRuleData() {
+			let data = { cycle_type: '1', pt_id: this.integralType };
+			this.$axios('get', '/api/integral/rule/trees', data).then(res => {
+				if (res.data.code == 1) {
+					this.rule_list = this.getTreeData(res.data.data.rule_tree);
+				}
+			});
+		},
+
+		// 获取规则细则
+		getRuleItemData() {
+			let data = { cycle_type: '1', pt_id: this.integralType };
+			this.$axios('get', '/api/integral/rule/trees', data, 'v2').then(res => {
+				if (res.data.code == 1) {
+					const resultData = res.data.data;
+					this.rule_item_list = resultData.tree;
+					this.flatteningIntegralRules = this.getItemDetail(this.rule_item_list);
+					this.loading = false;
+				}
+			});
+		},
+
+		// 规则细则变化关闭down
+		ruleItemChange(value) {
+			const item = this.dialogData.items[this.itemIndex];
+			if (value.length > 0) {
+				let ruleItemDetails = null;
+				this.flatteningIntegralRules.forEach(element => {
+					if (element.id == value[value.length - 1]) {
+						ruleItemDetails = { ...element };
+					}
+				});
+				item.rule_item_details = ruleItemDetails;
+				item.remark = ruleItemDetails.name;
+				item.rule_id = ruleItemDetails.pid;
+				item.item_id = value[value.length - 1];
+				item.max = ruleItemDetails.max_point * 1;
+				item.min = ruleItemDetails.min_point * 1;
+				item.point = ruleItemDetails.min_point;
+			} else {
+				item.remark = '';
+				item.rule_id = '';
+				item.item_id = '';
+				item.rule_item_list_value = '';
+				item.rule_item_details = { range_type: '' };
+				item.max = 0;
+				item.min = 0;
+				item.point = '0';
+			}
+		},
+		// 规则分类变化关闭dewn
+		ruleChange(value) {
+			const item = this.dialogData.items[this.itemIndex];
+			if (value.length > 0) {
+				const user_info = this.$getUserData();
+				let ruleCascader='ruleCascader'+this.itemIndex;
+				user_info.point_config.point_limit.forEach(element => {
+					if (this.ptid == this.integralType) {
+						item.max = element.point * 1;
+						item.min = element.point * -1;
+					}
+				});
+				this.$refs.[ruleCascader][0].dropDownVisible = false;
+				item.rule_id = value[value.length - 1];
+				item.rule_name = this.$refs.[ruleCascader][0].getCheckedNodes()[0].label;
+			} else {
+				item.rule_id = '';
+				item.rule_list_value = '';
+				item.rule_name='';
+			}
+		},
+		// 递归判断列表,把最后的child设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i].child.length < 1) {
+					// child若为空数组,则将child设为undefined
+					data[i].child = undefined;
+				} else {
+					// child若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i].child);
+				}
+			}
+			return data;
+		},
+
+		getItemDetail(arr) {
+			let result = [];
+			for (const item of arr) {
+				var res = JSON.parse(JSON.stringify(item)); // 先克隆一份数据作为第一层级的填充
+				delete res['child'];
+				result.push(res);
+				if (item.child instanceof Array && item.child.length > 0) {
+					// 如果当前child为数组并且长度大于0,才可进入getItemDetail()方法
+					result = result.concat(this.getItemDetail(item.child));
+				}
+			}
+			return result;
+		},
+		// 加一条
+		addItem() {
+			if (this.dialogData.items.length == 10) {
+				this.$message({
+					type: 'warning',
+					message: '一次只能添加10条奖扣'
+				});
+				return false;
+			}
+			this.dialogData.items.push({
+				rule_switch: true,
+				rule_id: '',
+				item_id: '',
+				point: '0',
+				remark: '',
+				event_time: moment().format('YYYY-MM-DD'),
+				approval: '',
+				approval_not_select: [],
+				pt_id: this.integralType,
+
+				// 积分填写限制
+				pointShow: 1,
+				max: 0,
+				min: 0,
+
+				// 审批人信息
+				reviewer_id: '',
+				approvalName: '',
+				approval_not_select: [],
+				approval_selected: { dept: [], employee: [] },
+				show_approval_selector: false,
+
+				// 附件
+				fileList: [],
+				files: [],
+
+				// 规则分类 与 规则细则 名称
+				rule_list_value: null,
+				rule_item_list_value: null,
+
+				// 规则细则详情
+				rule_item_details: { range_type: '' }
+			});
+		},
+		closeDialog(formName) {
+			this.dialogData.items.forEach(element => {
+				element.rule_item_details = { range_type: '' };
+			});
+			this.$refs[formName].resetFields();
+			this.closePopup();
+		},
+		delItem(index) {
+			this.$confirm('你确定要删除奖扣明细' + parseInt(index + 1) + '吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.dialogData.items.splice(index, 1);
+				this.$message({
+					type: 'success',
+					message: '删除成功!'
+				});
+			});
+		},
+		subData(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					this.save();
+				}
+			});
+		},
+		// 提交数据
+		save() {
+			let data = {
+				members: this.dialogData.members,
+				items: []
+			};
+			const user_info = this.$getUserData();
+			const index = user_info.point_config.point_limit.findIndex(o => o.pt_id === this.integralType);
+			let employeePointLimitMin = null;
+			let employeePointLimitMax = null;
+			user_info.point_config.point_limit.forEach(element => {
+				if (this.ptid == this.integralType) {
+					employeePointLimitMax = element.point * 1;
+					employeePointLimitMin = element.point * 1;
+				}
+			});
+			const ruleLimitCheck = user_info.site_config.rule_limit_check;
+			let maxPointPermission = 0;
+			let creator = user_info.employee_detail.role_list.findIndex(item => item.name == 'creator') >= 0;
+			if (user_info.point_config.point_limit.length > 0) {
+				maxPointPermission = parseInt(user_info.point_config.point_limit[index].point);
+			} else {
+				if (creator) {
+					maxPointPermission = -1;
+				}
+			}
+			try {
+				if (index < 0 || user_info.is_creator === 1) {
+					this.dialogData.items.forEach((element, i) => {
+						data.items.push({
+							rule_id: element.rule_id || 0,
+							item_id: element.item_id || 0,
+							point: element.point,
+							remark: element.remark,
+							event_time: element.event_time,
+							pt_id: this.ptid,
+							rule_name:element.rule_name,
+							item_name:element.rule_item_details.name,
+							reviewer_id: element.reviewer_id || 0,
+							files: element.files
+						});
+					});
+				} else {
+					this.dialogData.items.forEach((element, index) => {
+						!element.reviewer_id ? (element.reviewer_id = 0) : '';
+						!element.item_id ? (element.item_id = 0) : '';
+						if (
+							(element.reviewer_id && element.point !== 0 && element.rule_id > 0) ||
+							(element.reviewer_id <= 0 &&
+								element.item_id > 0 &&
+								ruleLimitCheck &&
+								element.point !== 0 &&
+								element.point <= maxPointPermission &&
+								Math.abs(element.point) <= maxPointPermission) ||
+							(element.reviewer_id <= 0 && !ruleLimitCheck && this.integralType == 3 && element.rule_id > 0) ||
+							(element.reviewer_id <= 0 &&
+								element.item_id >= 0 &&
+								element.point !== 0 &&
+								element.point <= maxPointPermission &&
+								Math.abs(element.point) <= maxPointPermission &&
+								element.rule_id > 0)
+						) {
+							data.items.push({
+								rule_id: element.rule_id || 0,
+								item_id: element.item_id || 0,
+								point: element.point,
+								remark: element.remark,
+								event_time: element.event_time,
+								pt_id: this.ptid,
+								reviewer_id: element.reviewer_id || 0,
+								files: element.files,
+								rule_name:element.rule_name,
+								item_name:element.rule_item_details.name,
+							});
+						} else {
+							this.$message.error('第' + (index + 1) + '条输入积分分值超出权限,请选择审批人递交');
+							throw new Error();
+						}
+					});
+				}
+			} catch (e) {
+				this.btn_loading = false;
+				return false;
+			}
+			this.webSocket(data);
+			// 走长连接处理
+			return false
+			this.btn_loading = true;
+			this.$axios('post', this.integralType === 1 ? '' : this.integralType === 2 ? '/api/integral/review/a/entry' : '/api/integral/point/entry', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						var is = true,msg;
+						if (this.integralType == '3') {
+							res.data.data.list.forEach(item => {
+								if (item.status != 1) {
+									is = false;
+									msg = item.msg;
+								}
+							});
+						} else {
+							res.data.data.list.forEach(item => {
+								if (item.status != 1) {
+									is = false;
+									msg = item.rule_item;
+								}
+							});
+						}
+						if (is) {
+							this.dialogData.items.forEach(element => {
+								element.rule_item_details = { range_type: '' };
+							});
+							this.$refs['dialogData'].resetFields();
+							this.$emit('update:visible', false);
+							this.$emit('update:refresh',this.$moment().format().valueOf());
+							this.closePopup();
+							this.error_list = res.data.data.list;
+							this.error_list_show = true;
+						}
+					}
+				})
+				.finally(e => {
+					this.btn_loading = false;
+				});
+		},
+		webSocket(data){
+			let {members,items}=data;
+			let arr=[];
+			members.forEach(item=>{
+				items.forEach(item2=>{
+					item2.type = this.integralType === 2?'pea':'peb';
+					item2.employee_id=item;
+					arr.push(JSON.parse(JSON.stringify(item2)))
+				})
+			})
+			this.resultList=arr;
+			this.resultIndex=0;
+			this.percentage=0;
+			this.results=[];
+			this.isResult=true;
+			this.opneWebSocket()
+		},
+		opneWebSocket() {
+			let wsData=this.resultList;
+			if(wsData[this.resultIndex]&&!this.isShowError){
+				this.$socketApi.sendData(wsData[this.resultIndex],this.onmessageWS)
+			}
+		},
+		onmessageWS(e){
+			if(e.type=='peb'||e.type=='pea'){
+				this.results.unshift(e.result);
+				this.resultIndex++;
+				this.opneWebSocket();
+				// 进度条
+				let lng = this.resultList.length;
+				this.percentage += Math.floor(100 / lng);
+				if (lng == this.results.length) {
+					this.percentage = 100;
+				}
+			}
+			// 中途断开
+			if(e.type=='break'){
+				let wsData=this.resultList;
+				this.errorMsg=e.msg
+				let data={
+					type:this.integralType,
+					obj:wsData.slice(this.resultIndex,wsData.length)
+				}
+				this.$setCache('award_punish',data);
+				this.isShowError2 = true;
+			}
+			// 连接不上
+			if(e.type=='error'){
+				this.errorMsg=e.msg
+				this.isShowError = true;
+			}
+			
+		},
+		// 选择审核人
+		approval_confirm(data) {
+			const item = this.dialogData.items[this.itemIndex];
+			item.approvalName = '';
+			item.approval_selected.employee = { dept: [], employee: [] };
+			item.reviewer_id = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				item.approvalName = data.employee[0].name;
+				item.approval_selected.employee = [{ name: data.employee[0].name, id: data.employee[0].id, img_url: data.employee[0].img_url }];
+				item.reviewer_id = data.employee[0].id;
+			}
+			item.reviewer_id ? (item.pointShow = 3) : '';
+			item.show_approval_selector = false;
+		},
+		// 关闭弹窗
+		closePopup() {
+			//关闭重置窗口状态
+			this.dialogData.items = [
+				{
+					rule_switch: true,
+					rule_id: '',
+					item_id: '',
+					point: '0',
+					remark: '',
+					event_time: moment().format('YYYY-MM-DD'),
+					approval: '',
+					approval_not_select: [],
+					pt_id: this.integralType,
+					// 积分填写限制
+					pointShow: 1,
+					max: 0,
+					min: 0,
+					// 审批人信息
+					reviewer_id: '',
+					approvalName: '',
+					approval_not_select: [],
+					approval_selected: { dept: [], employee: [] },
+					show_approval_selector: false,
+					// 附件
+					fileList: [],
+					files: [],
+					// 规则分类 与 规则细则 名称
+					rule_list_value: null,
+					rule_item_list_value: null,
+					// 规则细则详情
+					rule_item_details: { range_type: '' }
+				}
+			];
+			this.$nextTick(() => {
+				this.$emit('update:visible', false);
+			});
+		}
+	}
+};
+</script>
+<style lang="scss">
+.itemClass .el-cascader-menu .el-cascader-menu__wrap .el-scrollbar__view li.el-cascader-node {
+	height: auto;
+	max-width: 500px;
+	.el-cascader-node__label {
+		white-space: initial;
+		overflow: initial;
+		text-overflow: initial;
+	}
+}
+.results {
+	border-bottom: 1px solid #f1f1f1;
+	text-align: center;
+}
+.results div {
+	padding: 10px;
+}
+</style>

+ 777 - 0
src/components/examinePopup.vue

@@ -0,0 +1,777 @@
+<template>
+	<div>
+		<el-drawer :title="title" :visible.sync="show" :with-header="false" :size="'600px'" :before-close="closeDetail" direction="rtl">
+			<div class="drawer_title">审批详情</div>
+			<div v-loading="detail_loading" style="height: 100%;">
+				<div class="detail_popup" v-if="detail_info !== null">
+					<el-row :gutter="10" style="padding-bottom:20px;border-bottom:1px #f8f8f8 solid;position: relative;">
+						<el-col :span="24">
+							<template>
+								<userImage class="fl" :user_name="detail_info.employee_name" :img_url="detail_info.employee_img" width="50px" height="50px"></userImage>
+							</template>
+							<template>
+								<div class="flex-box flex-v-ce">
+									<span style="line-height:50px; margin-left:10px;margin-right:10px;">{{ detail_info.employee_name }}</span>
+									<span class="point" v-if="detail_info.status == 1">
+										<span class="red" v-if="detail_info.review_point > 0">+{{ detail_info.review_point }}</span>
+										<span v-else class="green">{{ detail_info.review_point }}</span>
+										<span style="margin-left: 5px;">{{ $getTypsName(detail_info.pt_id) }}</span>
+									</span>
+									<div style="margin-left: 5px;">
+										<span v-if="detail_info.status == 1" class="green">审批通过</span>
+										<span v-else-if="detail_info.status == 2" class="red">审批驳回</span>
+										<span v-else-if="detail_info.status == 0" class="yellow">待审批</span>
+										<span v-else></span>
+									</div>
+								</div>
+							</template>
+						</el-col>
+					</el-row>
+					<el-row :gutter="10" v-if="detail_info.pt_id">
+						<el-col :span="4">积分类型</el-col>
+						<el-col :span="20" class="blue">{{ detail_info.pt_id == 3 ? 'B分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 1 ? '绩效分' : '' }}</el-col>
+					</el-row>
+					<el-row :gutter="10" v-for="(item, index) in detail_info.detail" :key="index">
+						<el-col :span="4">{{ item.key }}</el-col>
+						<el-col :span="20" v-if="item.key == '附件' || item.key == '完成附件' || item.key == '工作附件'">
+							<el-image
+								v-for="(items, indexs) in item.value"
+								:key="indexs"
+								style="width: 100px; height: 100px;margin:2px;"
+								:src="items"
+								:preview-src-list="item.value"
+							></el-image>
+						</el-col>
+						<el-col :span="20" v-else>{{ item.value }}</el-col>
+					</el-row>
+					<el-row :gutter="10" v-if="detail_info.files != null && detail_info.files > 0">
+						<el-col :span="4">图片</el-col>
+						<el-col :span="20"><el-image style="width: 100px; height: 100px" :src="detail_info.files[0]" :preview-src-list="detail_info.files"></el-image></el-col>
+					</el-row>
+
+					<div v-show="detail_info.item_name != ''">
+						<p class="row_title">
+							规则依据 &nbsp;
+							<span class="row_tips" style="font-size:12px;color:#909399">此事件打分参考以下积分规则</span>
+						</p>
+						<el-row>
+							<el-col :span="4">事件分类</el-col>
+							<el-col :span="20">{{ detail_info.rule_name }}</el-col>
+						</el-row>
+						<el-row>
+							<el-col :span="4">积分规则</el-col>
+							<el-col :span="20">{{ detail_info.item_name }}</el-col>
+						</el-row>
+						<el-row>
+							<el-col :span="4">规则积分</el-col>
+							<el-col :span="20">
+								<template v-if="detail_info.item_range_type == 1">
+									<span v-if="detail_info.item_max_point > 0">+</span>
+									{{ detail_info.item_max_point }}{{ detail_info.pt_id == 3 ? 'B分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 1 ? '绩效分' : '' }}
+								</template>
+								<template v-else>
+									{{ detail_info.item_min_point }}~{{ detail_info.item_max_point
+									}}{{ detail_info.pt_id == 3 ? 'B分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 1 ? '绩效分' : '' }}
+								</template>
+							</el-col>
+						</el-row>
+					</div>
+
+					<div v-show="detail_info.process"><Steps :process="detail_info.process"></Steps></div>
+				</div>
+
+				<div class="detailBut">
+					<div style="text-align: right;padding-top:20px" v-if="detail_info.status == 0 && detail_info.reviewer_id == $getUserData().id">
+						<el-button v-if="detail_info.pt_id == 1" @click="closeDetail">取消</el-button>
+						<el-button v-else @click="rejectBtn">驳回</el-button>
+						<el-button type="primary" @click="adoptBtn">通过</el-button>
+					</div>
+					<div style="text-align: right;padding-top:20px" v-if="detail_info.can_refuse == '1'">
+						<span style="color:#909399;font-size:12px;padding-right:20px">撤回后需重新审批</span>
+						<el-button type="primary" @click="revokeApproval">撤回审批</el-button>
+					</div>
+				</div>
+			</div>
+		</el-drawer>
+
+		<el-dialog title="	" :visible.sync="rejectShow" :before-close="rejectClose" width="520px">
+			<el-form :model="rejectForm" ref="rejectForm" label-width="80px" v-loading="rejectLoading">
+				<el-form-item
+					label="审批意见"
+					prop="remark"
+					:rules="[{ required: true, message: '请输入审批意见', trigger: 'blur' }, { min: 3, max: 50, message: '长度在 3 到 50 个字符', trigger: 'blur' }]"
+				>
+					<el-input type="textarea" :rows="4" v-model="rejectForm.remark" placeholder="请输入审批意见(限50字)"></el-input>
+				</el-form-item>
+				<el-form-item style="text-align: right; margin-bottom: 0">
+					<el-button @click="cancelReject('rejectForm')">取消</el-button>
+					<el-button type="primary" @click="confirmReject('rejectForm')">确认驳回</el-button>
+				</el-form-item>
+			</el-form>
+		</el-dialog>
+
+		<el-dialog title="审批通过" :visible.sync="adoptShow" width="571px" :before-close="adoptClose">
+			<el-form :model="adoptForm" ref="adoptForm" label-width="80px" v-loading="determinedBy">
+				<template v-if="detail_info.source_type != 4">
+					<el-form-item label="指定规则" v-if="!detail_info.rule_id && !detail_info.item_id"><el-switch v-model="adoptForm.ruleOrItem"></el-switch></el-form-item>
+					<el-form-item
+						label="分类"
+						v-show="(detail_info.rule_id && !detail_info.item_id) || !adoptForm.ruleOrItem"
+						prop="rule_id"
+						:rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]"
+					>
+						<el-cascader
+							:disabled="guol(detail_info)"
+							class="date-picker-width"
+							v-model="adoptForm.rule_id"
+							:options="ruleTrees"
+							:props="{ value: 'id', label: 'name', children: 'child' }"
+							@change="ruleChange"
+							ref="rule"
+							clearable
+							filterable
+							change-on-select
+							placeholder="请选择规则分类"
+						></el-cascader>
+					</el-form-item>
+					<el-form-item label="规则内容" v-if="(detail_info.rule_id && detail_info.item_name) || (detail_info.item_id && detail_info.item_name)">
+						<span>{{ detail_info.item_name }}</span>
+					</el-form-item>
+					<el-form-item
+						label="规则"
+						v-show="(detail_info.rule_id && detail_info.item) || adoptForm.ruleOrItem"
+						prop="item_id"
+						:rules="[{ required: true, message: '请选择规则细则', trigger: 'blur' }]"
+					>
+						<el-cascader
+							:disabled="guol(detail_info)"
+							:popper-class="'itemClass'"
+							v-model="adoptForm.item_id"
+							:options="item_list"
+							:props="{ value: 'id', label: 'name', children: 'child' }"
+							ref="ruleItem"
+							clearable
+							filterable
+							:show-all-levels="false"
+							@change="cascaderItemIdChange"
+							placeholder="请选择规则细则"
+						></el-cascader>
+					</el-form-item>
+				</template>
+				<el-form-item label="规则积分" v-show="detail_info.item_id">
+					{{
+						detail_info.item_range_type == 1
+							? detail_info.item_min_point
+							: detail_info.item_range_type == -1
+							? detail_info.item_min_point
+							: detail_info.item_min_point + '~' + detail_info.item_max_point
+					}}{{ detail_info.pt_id == 3 ? 'B分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 1 ? '绩效分' : '' }}
+				</el-form-item>
+
+				<el-form-item label="" v-if="rangeType.rule_rangeType_pt_id == 2 || rangeType.rule_rangeType_pt_id == 3">
+					<div style="line-height: 24px;">
+						{{ rangeType.rule_min_point == rangeType.rule_max_point ? rangeType.rule_min_point : rangeType.rule_min_point + '~' + rangeType.rule_max_point }}
+						<span class="blue" style="margin-left: 5px;">{{ rangeType.rule_rangeType_pt_id == 3 ? 'B分' : 'A分' }}</span>
+					</div>
+					<div style="line-height: 24px;">{{ rangeType.rule_rangeType_name }}</div>
+				</el-form-item>
+				<el-form-item label="审批积分">
+					<el-col :span="10">
+						<el-input-number
+							v-if="detail_info.item_range_type == 2"
+							:min="detail_info.item_min_point"
+							:max="detail_info.item_max_point"
+							v-model="adoptForm.point"
+							type="number"
+						></el-input-number>
+						<el-input-number
+							v-else-if="detail_info.item_range_type == 1"
+							:disabled="detail_info.item_range_type == 1"
+							v-model="adoptForm.point"
+							placeholder="请输入分值"
+						></el-input-number>
+						<div v-else>
+							<el-input-number
+								v-if="rangeType.rule_range_type == 2"
+								:disabled="forbiddenInputNum"
+								:min="rangeType.rule_min_point"
+								:max="rangeType.rule_max_point"
+								v-model="adoptForm.point"
+								placeholder="请输入分值"
+							></el-input-number>
+							<el-input-number v-else :disabled="forbiddenInputNum" v-model="adoptForm.point" placeholder="请输入分值"></el-input-number>
+						</div>
+					</el-col>
+				</el-form-item>
+				<el-form-item
+					v-if="detail_info.source_type == 4"
+					label="审批意见"
+					prop="remark"
+					:rules="[{ required: true, message: '请输入审批意见', trigger: 'blur' }, { max: 100, message: '长度不能超过 100 个字符', trigger: 'blur' }]"
+				>
+					<el-input :rows="4" type="textarea" v-model="adoptForm.remark" placeholder="说点什么(限100字)"></el-input>
+				</el-form-item>
+				<div style="padding-left: 80px">奖票用于优秀表现和重要事项的表彰</div>
+				<el-form-item label="发放奖票"><el-switch v-model="adoptForm.switch"></el-switch></el-form-item>
+				<el-form-item label="递交审批" v-if="$getUserData().is_creator == 0">
+					<el-row>
+						<el-col :span="18">
+							<el-input auto-complete="off" v-model="manager" placeholder="请选择上级递交审批"></el-input>
+							<div @click="show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+						</el-col>
+					</el-row>
+
+					<el-dialog title="选择人员" width="640px" :visible.sync="show_employee_selector" append-to-body :before-close="handleClose">
+						<EmployeeSelector
+							:can_select_employee="true"
+							v-if="show_employee_selector"
+							ref="approval"
+							:multi="false"
+							:employee_list="employee_lists"
+							:isCreatorSelect="true"
+							:user_no_select="false"
+							:selected="manager_selected"
+							@confirm="employee_confirm"
+						/>
+						<span slot="footer" class="dialog-footer">
+							<el-button @click="show_employee_selector = false">取 消</el-button>
+							<el-button type="primary" @click="submitApproval('approval')">确 定</el-button>
+						</span>
+					</el-dialog>
+				</el-form-item>
+				<el-form-item v-if="detail_info.source_type != 4" label="审批意见" prop="remark" :rules="[{ max: 100, message: '长度不能超过 100 个字符', trigger: 'blur' }]">
+					<el-input :rows="4" type="textarea" v-model="adoptForm.remark" placeholder="说点什么(限100字)"></el-input>
+				</el-form-item>
+
+				<el-form-item>
+					<el-button @click="adoptClose">取 消</el-button>
+					<el-button type="primary" @click="submitAdopt('adoptForm')">确定通过</el-button>
+				</el-form-item>
+			</el-form>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import EmployeeSelector from '@/components/EmployeeSelector';
+import Steps from '@/components/Steps';
+export default {
+	name: 'examinePopup',
+	data() {
+		return {
+			employee_lists: [],
+			itemParticulars: false,
+			rangeType: {
+				rule_range_type: 0,
+				rule_min_point: 0,
+				rule_max_point: 0,
+				rule_rangeType_pt_id: 0,
+				rule_rangeType_name: ''
+			},
+			itemMaxPoint: 1,
+			forbiddenInputNum: false,
+			determinedBy: false, //确定通过loading
+			rejectLoading: false, //驳回loading
+			detail_id: null,
+			detail_loading: false,
+			detailShow: false,
+			detail_info: {
+				rule_id: ''
+			},
+			rejectShow: false,
+			adoptShow: false,
+			rejectForm: {
+				remark: ''
+			},
+			adoptForm: {
+				ruleOrItem: false,
+				rule_id: null,
+				item_id: 0,
+				showPoint: null,
+				point: null,
+				switch: false,
+				remark: ''
+			},
+			// 规则 or 细则
+			ruleTrees: null,
+			item_list: null,
+			// 奖扣积分数组
+			awardPointsArray: [{ name: '奖分', value: 1 }, { name: '扣分', value: 2 }],
+			awardPoints: 1,
+
+			// 下一个审批人
+			manager: '',
+			employee_not_select: [],
+			manager_selected: { dept: [], employee: [] },
+			show_employee_selector: false,
+			flatteningIntegralRules: {}
+		};
+	},
+	props: {
+		id: {
+			type: Number,
+			default: 0
+		},
+		show: {
+			type: Boolean,
+			default: false
+		},
+		title: {
+			type: String,
+			default: ''
+		}
+	},
+	watch: {
+		id(val) {
+			this.detail_id = val;
+		},
+		show(val) {
+			if (val) {
+				this.detail_info = { rule_id: '' };
+				this.getDetail();
+			}
+		},
+		'adoptForm.ruleOrItem'(val) {
+			if (val) {
+				this.adoptForm.rule_id = 0;
+			} else {
+				this.rangeType = {
+					rule_range_type: 0,
+					rule_min_point: 0,
+					rule_max_point: 0,
+					rule_rangeType_pt_id: 0,
+					rule_rangeType_name: ''
+				};
+				this.forbiddenInputNum = false;
+				this.adoptForm.item_id = 0;
+			}
+		}
+	},
+	components: { EmployeeSelector, Steps },
+	mounted() {
+		this.getRuleItem();
+		this.getRuleItemTree();
+		this.employee_lists = this.$getUserData().employee_detail.superior_list;
+	},
+	methods: {
+		guol(data) {
+			if (data.rule_id || data.item_id) {
+				return true;
+			} else {
+				return false;
+			}
+		},
+		submitApproval(name) {
+			this.$refs[name].confirm(); //调用组件的confirm();
+		},
+		//关闭
+		handleClose(done) {
+			done();
+		},
+		cascaderItemIdChange(val) {
+			if (val.length > 0) {
+				let datas = null;
+				this.flatteningIntegralRules.forEach(element => {
+					if (element.id == val[val.length - 1]) {
+						datas = { ...element };
+					}
+				});
+				console.log(datas);
+				// return
+				// let datas = this.$refs['ruleItem'].getCheckedNodes()[0].data;
+				if (datas.range_type == 1) {
+					this.forbiddenInputNum = true;
+				} else {
+					this.forbiddenInputNum = false;
+				}
+				this.rangeType.rule_range_type = datas.range_type;
+				this.rangeType.rule_min_point = datas.min_point;
+				this.rangeType.rule_max_point = datas.max_point;
+				this.rangeType.rule_rangeType_pt_id = datas.pt_id;
+				this.rangeType.rule_rangeType_name = datas.name;
+				this.adoptForm.point = datas.min_point;
+				this.adoptForm.rule_id = datas.rule_id;
+			} else {
+				this.rangeType = {
+					rule_range_type: 0,
+					rule_min_point: 0,
+					rule_max_point: 0,
+					rule_rangeType_pt_id: 0,
+					rule_rangeType_name: ''
+				};
+				this.adoptForm.point = '';
+				this.forbiddenInputNum = false;
+				this.adoptForm.item_id = 0;
+			}
+		},
+		//审批撤销
+		revokeApproval() {
+			this.$confirm('确定要撤回此项吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.detail_loading = true;
+				this.$axios('post', '/api/integral/review/destroy', { review_id: this.detail_id })
+					.then(res => {
+						if (res.data.code == 1) {
+							this.$message.success(res.data.msg);
+							this.closeDetail(); //关闭抽屉
+							this.$parent.getSpList(); //刷新列表
+						}
+					})
+					.finally(() => {
+						this.detail_loading = false;
+					});
+			});
+		},
+		// 选择规则分类关闭down
+		ruleChange(val) {
+			if (val.length == 0) {
+				this.adoptForm.rule_id = 0;
+			} else {
+				this.adoptForm.rule_id = val[val.length - 1];
+			}
+			this.$nextTick(() => {
+				this.$refs.rule.dropDownVisible = false;
+			});
+		},
+		// 选择规则细则
+		itemChange(val) {
+			if (val.length == 0) {
+				this.adoptForm.item_id = 0;
+			} else {
+				this.adoptForm.item_id = val[val.length - 1];
+			}
+			this.$nextTick(() => {
+				this.$refs.ruleItem.dropDownVisible = false;
+			});
+		},
+		getItemDetail(arr) {
+			let result = [];
+			for (const item of arr) {
+				var res = JSON.parse(JSON.stringify(item)); // 先克隆一份数据作为第一层级的填充
+				delete res['child'];
+				result.push(res);
+				if (item.child instanceof Array && item.child.length > 0) {
+					// 如果当前child为数组并且长度大于0,才可进入getItemDetail()方法
+					result = result.concat(this.getItemDetail(item.child));
+				}
+			}
+			return result;
+		},
+		// 获取规则细则树
+		getRuleItemTree() {
+			let self = this;
+			let params = {
+				pt_id: this.detail_info.pt_id,
+				cycle_type: '1'
+			};
+			this.$axios('get', '/api/integral/rule/trees', params, 'v2').then(res => {
+				if (res.data.code == 1) {
+					self.item_list = res.data.data.tree;
+					this.flatteningIntegralRules = this.getItemDetail(self.item_list);
+				} else {
+					self.$message.error(res.data.data.msg);
+				}
+			});
+		},
+		// 获取规则分类规则细则信息
+		getRuleItem() {
+			let self = this;
+			let params = {
+				cycle_type: 1
+			};
+			this.$axios('get', '/api/integral/rule/trees', params).then(res => {
+				if (res.data.code == 1) {
+					self.ruleTrees = this.getTreeData(res.data.data.rule_tree);
+				} else {
+					self.$message.error(res.data.data.msg);
+				}
+			});
+		},
+		// 打开详情
+		getDetail() {
+			let self = this;
+			let params = {
+				review_id: self.detail_id
+			};
+			self.detailShow = true;
+			self.detail_loading = true;
+			this.$axios('get', '/api/integral/review', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.detail_info = res.data.data;
+						self.detail_info.rule_id ? (self.adoptForm.rule_id = self.detail_info.rule_id) : '';
+						if (res.data.data.item_id) {
+							self.adoptForm.item_id = self.detail_info.item_id;
+							self.adoptForm.showPoint = self.detail_info.point;
+							self.detail_info.point > 0 ? (self.awardPoints = 1) : (self.awardPoints = 2);
+							// self.adoptForm.point = Math.abs(self.detail_info.point);
+							self.adoptForm.point = self.detail_info.point;
+						}
+					}
+				})
+				.finally(e => {
+					self.detail_loading = false;
+				});
+		},
+		// 关闭抽屉
+		closeDetail() {
+			this.$emit('update:show', false);
+		},
+		// 驳回按钮
+		rejectBtn() {
+			this.rejectShow = true;
+		},
+		// 关闭驳回弹窗
+		rejectClose() {
+			this.rejectShow = false;
+			this.$refs['rejectForm'].resetFields();
+		},
+		// 确定驳回
+		confirmReject(formName) {
+			let self = this;
+			self.$refs[formName].validate(valid => {
+				if (valid) {
+					let data = {
+						review_id: self.detail_id,
+						action: 'refuse',
+						ticket_count: '0',
+						remark: self.rejectForm.remark
+					};
+					this.rejectLoading = true;
+					this.$axios('post', '/api/integral/review', data)
+						.then(res => {
+							if (res.data.code == 1) {
+								self.rejectShow = false;
+								self.detail_info.status = 2;
+								self.$message.success(res.data.msg);
+								self.rejectClose(); //关闭驳回弹窗
+								self.closeDetail(); //关闭抽屉
+								self.$parent.getSpList(); //刷新列表
+							}
+						})
+						.finally(e => {
+							setTimeout(() => {
+								//延迟关闭,防止重复点击
+								self.rejectLoading = false;
+							}, 200);
+						});
+				}
+			});
+		},
+		// 取消驳回
+		cancelReject(formName) {
+			this.rejectShow = false;
+			this.$refs[formName].resetFields();
+		},
+		// 通过按钮
+		adoptBtn() {
+			// if (this.detail_info.item_range_type == 1) {
+			// 	this.adoptForm.point = Math.abs(this.detail_info.point);
+			// } else {
+			// 	this.adoptForm.point = this.detail_info.point;
+			// }
+			this.adoptForm.point = this.detail_info.point;
+			this.detail_info.point > 0 ? (this.awardPoints = 1) : (this.awardPoints = 2);
+			this.adoptForm.rule_id = this.detail_info.rule_id;
+			this.adoptForm.item_id = this.detail_info.item_id;
+			if (this.detail_info.rule_id == 0 && this.detail_info.item_id == 0 && this.detail_info.pt_id != 1) {
+				//没有  规则分类 与 规则细则 与 不是绩效任务时,才请求规则细则(减少请求)
+				this.getRuleItemTree();
+			}
+			this.adoptShow = true;
+
+			this.rangeType = {
+				rule_range_type: 0,
+				rule_min_point: 0,
+				rule_max_point: 0,
+				rule_rangeType_pt_id: 0,
+				rule_rangeType_name: ''
+			};
+		},
+		// 递归判断列表,把最后的child设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i].child.length < 1) {
+					// child若为空数组,则将child设为undefined
+					data[i].child = undefined;
+				} else {
+					// child若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i].child);
+				}
+			}
+			return data;
+		},
+		// 下一个审批人
+		employee_confirm(data) {
+			this.manager_selected = { dept: [], employee: [] };
+			this.adoptForm.reviewer_id = '';
+			this.manager = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				this.manager_selected.employee = data.employee;
+				this.adoptForm.reviewer_id = data.employee[0].id;
+				this.manager = data.employee[0].name;
+			}
+			this.show_employee_selector = false;
+		},
+		// 关闭通过弹窗
+		adoptClose() {
+			this.adoptForm.rule_id = 0;
+			this.adoptForm.item_id = 0;
+			this.forbiddenInputNum = false;
+			this.adoptForm.reviewer_id = 0;
+			this.adoptShow = false;
+			this.manager = ''; //清空递交审批
+			this.manager_selected = { dept: [], employee: [] }; //清空递交审批
+			this.adoptForm.remark = '';
+			this.adoptForm.switch = false;
+		},
+		// 确定通过
+		submitAdopt(formName) {
+			let self = this;
+			self.$refs[formName].validate(valid => {
+				if (valid) {
+					let data = {
+						review_id: self.detail_id,
+						action: 'complete',
+						rule_id: self.adoptForm.rule_id,
+						item_id: 0,
+						point: self.adoptForm.point,
+						reviewer_id: '',
+						remark: self.adoptForm.remark,
+						ticket_count: 0
+					};
+					self.adoptForm.item_id ? (data.item_id = self.adoptForm.item_id) : (data.item_id = 0);
+					self.adoptForm.reviewer_id ? (data.reviewer_id = self.adoptForm.reviewer_id) : (data.reviewer_id = 0);
+					self.adoptForm.switch ? (data.ticket_count = 1) : (data.ticket_count = 0);
+					if (this.detail_info.item_range_type == 1) {
+						data.point = self.adoptForm.point;
+						// 	if (self.awardPoints === 1) {
+						// 		data.point = self.adoptForm.point;
+						// 	} else {
+						// 		data.point = self.adoptForm.point * -1;
+						// 	}
+					}
+
+					if (data.rule_id == '' || data.rule_id == null) {
+						data.rule_id = 0;
+					}
+					if (this.detail_info.item_range_type == -1) {
+						let itemID = '';
+						for (let i in data.item_id) {
+							itemID = data.item_id[i];
+						}
+						data.item_id = itemID;
+					}
+					if (data.item_id == '' || data.item_id == null) {
+						data.item_id = 0;
+					}
+					if (self.adoptForm.ruleOrItem) {
+						if (data.item_id == 0) {
+							self.$message.error('请选择所属规则');
+							return;
+						}
+					} else {
+						if (data.rule_id == 0) {
+							self.$message.error('请选择所属分类');
+							return;
+						}
+					}
+					if (data.point == 0 || !data.point) {
+						self.$message.error('积分不能为0或空');
+						return;
+					}
+					this.determinedBy = true;
+					this.$axios('post', '/api/integral/review', data)
+						.then(res => {
+							if (res.data.code == 1) {
+								self.adoptShow = false;
+								self.detail_info.status = 2;
+								self.$message.success(res.data.msg);
+								self.adoptClose(); //关闭通过弹窗
+								self.closeDetail(); //关闭抽屉
+								self.$parent.getSpList(); //刷新列表
+							}
+						})
+						.finally(e => {
+							setTimeout(() => {
+								//预防重复点击
+								this.determinedBy = false;
+							}, 200);
+						});
+				}
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped="scoped">
+label {
+	font-weight: 700;
+}
+.fl {
+	float: left;
+}
+.itemClass .el-cascader-menu .el-cascader-menu__wrap li.el-cascader-node {
+	height: auto;
+	max-width: 500px;
+	.el-cascader-node__label {
+		white-space: initial;
+		overflow: initial;
+		text-overflow: initial;
+	}
+}
+
+.detailBut {
+	border-top: 1px solid rgb(248, 248, 248);
+	width: 100%;
+	position: absolute;
+	bottom: 0px;
+	right: 0;
+	padding: 0 20px 10px 0;
+	z-index: 1;
+	background-color: #fff;
+}
+.detail_popup {
+	padding: 20px;
+	overflow-y: auto;
+	overflow-x: hidden !important;
+	height: calc(100vh - 184px);
+	padding-bottom: 30px;
+	.row_title {
+		position: relative;
+		margin: 0 0 20px 0;
+		padding-top: 12px;
+		font-size: 16px;
+		color: #303133;
+		line-height: 22px;
+	}
+	.row_title:before {
+		position: absolute;
+		top: 0;
+		content: ' ';
+		width: 100%;
+		border-top: 1px #f8f8f8 solid;
+	}
+	.el-row {
+		margin-bottom: 10px;
+		font-size: 14px;
+		.el-col-4 {
+			color: #606266;
+		}
+	}
+}
+.drawer_title {
+	font-size: 18px;
+	padding: 20px;
+	border-bottom: 1px #efefef solid;
+}
+.examine_steps {
+	.el-step {
+		flex-basis: auto !important;
+	}
+}
+</style>

+ 54 - 0
src/components/noData.vue

@@ -0,0 +1,54 @@
+<template>
+    <div class="flex-box-v flex-v-zhu">
+      <img src="../assets/image/nodata.png"  :style="{ width: imgW, height: imgH }" style="margin: 30px auto;">
+      <div class="fontColorF"  style="text-align: center;line-height: 28px;" v-if="!isSolt">{{content}}</div>
+      <slot></slot>
+    </div>
+</template>
+<!-- content:为提示内容  -->
+<!-- imgUrl:为空值显示图片  -->
+<!-- isSolt:是否显示自定义内容  -->
+<script>
+  export default {
+    name:'noData',
+    props:{
+      content:{
+        type:String,
+        default:'暂无数据'
+      },
+      isSolt:{
+        type:Boolean,
+        default:false
+      },
+	  imgW:{
+	     type:String,
+	     default:'266px'
+	  },
+	  imgH:{
+	     type:String,
+	     default:'182px'
+	  },
+    },
+    data(){
+      return{
+
+      }
+    },
+    methods:{
+
+    }
+  }
+</script>
+
+<style scoped="scoped">
+  .green{
+     color: #67c23a;
+  }
+  .blue{
+    color:#26a2ff;
+    cursor: pointer;
+  }
+  .fontColorF{
+    color:#909399;
+  }
+</style>

+ 163 - 0
src/components/publics/workpoints.vue

@@ -0,0 +1,163 @@
+<template>
+  <div class="all">
+    <div class="initialPoint">
+      <div class="initia_title">{{initia_head.initial_suername}}</div>
+      <div class="initia_title_1">{{initia_head.initial_suertext}}</div>
+      <div v-for="(v,i) in initia_arr" :key="i">
+        <el-form  :model="v.initia_input"  ref="v.initia_input"  :label-width="initia_head.initial_width"  class="demo-ruleForm">
+		  <el-form-item  style="margin: 20px 0 0 0" v-if="v.type=='switch'">
+				  <template slot="label">
+					<span :style="'width:'+initia_head.initial_left">{{v.initialName}}</span>
+					<el-tooltip placement="top">
+					  <div slot="content" v-html="v.initial_text"></div>
+					  <span class="initia_mark" v-show="v.initia_mark">?</span>
+					</el-tooltip>
+				  </template>
+				<el-switch v-model="v.initia_input.age" :active-value="is" :inactive-value="no" @change="changeAge"></el-switch>
+		  </el-form-item>
+		  <div v-else-if="v.type=='object'" style="padding: 20px 0px;margin-left: 160px;">
+			<div style="margin-bottom: 10px;">全勤加分需同时满足以下条件</div>
+			<div style="padding-left: 23px;">1、当月无旷工</div>
+			<div style="margin: 15px 0;">
+				<div><el-checkbox v-model="v.absent_holiday.enable" :true-label="1" :false-label="0">2、当月未提交以下请假
+					<el-tooltip placement="top" content="填写的请假名称必须与钉钉考勤打卡-假期管理-假期规则对应,否则此项不生效">
+					  <span class="initia_mark" style="background-color: #666;">?</span>
+					</el-tooltip>
+				</el-checkbox></div>
+				<div class="flex-box" style="margin-top: 10px;padding-left: 20px;">
+					<el-input :disabled="v.absent_holiday.enable==1?false:true" style="width: 150px;" :key="1" type="text" v-model="val1" placeholder="假期类型"></el-input>
+					<el-input :disabled="v.absent_holiday.enable==1?false:true" style="width: 150px;margin: 0 10px;" :key="2" type="text" v-model="val2" placeholder="假期类型"></el-input>
+					<el-input :disabled="v.absent_holiday.enable==1?false:true" style="width: 150px;" type="text" :key="3" v-model="val3" placeholder="假期类型"></el-input>
+				</div>
+			</div>
+			<div>
+				<div><el-checkbox v-model="v.absent_late.enable" :true-label="1" :false-label="0">
+				3、当月迟到少于 
+				<el-input @input="[v.absent_late.count=v.absent_late.count.replace(/[^\d]/g,'')]" :disabled="v.absent_late.enable==1?false:true" style="width: 150px;" v-model="v.absent_late.count" placeholder="次数"></el-input>
+				 次</el-checkbox></div>
+<!-- 				<div class="flex-box">
+					<el-input style="width: 150px;" placeholder="假期类型"></el-input>
+					<el-input style="width: 150px;margin: 0 10px;" placeholder="假期类型"></el-input>
+					<el-input style="width: 150px;" placeholder="假期类型"></el-input>
+				</div> -->
+			</div>
+		  </div>  
+          <el-form-item  style="margin: 20px 0 0 0 " v-else>
+            <template slot="label">
+				<template v-if="v.message">
+					<el-popover placement="bottom" width="400" trigger="hover">
+					  <div style="padding: 10px;">{{v.message}}</div>
+					  <span slot="reference" :style="'width:'+initia_head.initial_left">{{v.initialName}} <i class="el-icon-warning"></i></span>
+					</el-popover>
+				</template>
+				<template v-else>
+					<span slot="reference" :style="'width:'+initia_head.initial_left">{{v.initialName}}</span>
+				</template>
+            </template>
+            <el-input type="age" v-model="v.initia_input.age" :disabled="disabled"  autocomplete="off"  class="nitia_list_input"  placeholder="请输入分值" oninput="if(this.value=='00'){this.value='0';}else{this.value=this.value.replace(/[^0-9]/g,'')}"></el-input>
+		  </el-form-item>
+        </el-form>
+      </div>
+
+      <el-button
+        type="primary"
+        class="initia_button"
+        @click="save()"
+        :style="'margin: 20px 0 20px '+initia_head.initial_left"
+      >保存</el-button>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  props: {
+    initia_arr: Array,
+    initia_head: Object,
+  },
+  data() {
+    return {
+		is: 1,
+		no: 0,
+		disabled:false,
+		checked1:'',
+		val1:'',
+		val2:'',
+		val3:'',
+	};
+  },
+  created() {
+	 if(this.initia_arr.length==9){
+		 this.val1=this.initia_arr[8].absent_holiday.list[0]
+		 this.val2=this.initia_arr[8].absent_holiday.list[1]
+		 this.val3=this.initia_arr[8].absent_holiday.list[2]
+	 }
+  },
+  mounted() {;
+	  if(this.initia_arr[0].type=="switch"){
+		this.disabled=this.initia_arr[0].initia_input.age==1? false:true;
+	  }
+  },
+  methods: {
+	changeAge(e){
+		this.disabled=e==1? false:true
+	},
+    save() {
+      let arr = [];
+	  let checkAllData={};//全勤配置
+      for (var i = 0; i < this.initia_arr.length; i++) {
+		  if(this.initia_arr[i].type!='object'){
+			 arr.push({sj: this.initia_arr[i].initia_input.age});
+		  }else{
+			  checkAllData=this.initia_arr[i]
+			  let list=[this.val1,this.val2,this.val3];
+			  checkAllData.absent_holiday.list=list.filter(x=>{
+				  if(x){
+					  return x
+				  }
+			  })
+		  }
+      }
+	  this.$emit("initia", {arr,checkAllData});
+    },
+  },
+};
+</script>
+
+<style>
+.el-form-item__label {
+  text-align: left;
+}
+.initialPoint {
+  margin-left: 30px;
+}
+.initia_mark {
+  background: #409eff;
+  border-radius: 50%;
+  width: 14px;
+  height: 14px;
+  color: #fff;
+  display: inline-block;
+  font-size: 12px;
+  line-height: 14px;
+  text-align: center;
+  margin-left: 4px;
+  cursor: default;
+}
+.initia_title {
+  font-size: 20px;
+  color: rgba(48, 49, 51, 1);
+  padding-top: 30px;
+  font-family: PingFangSC-Regular;
+}
+.initia_title_1 {
+  color: #606266;
+  font-size: 14px;
+  margin-top: 10px;
+}
+.nitia_list_input {
+  width: 160px;
+  height: 40px;
+  border-radius: 4px;
+  background-color: rgba(255, 255, 255, 1);
+}
+</style>

+ 179 - 0
src/components/season.vue

@@ -0,0 +1,179 @@
+<template>
+  <div>
+    <span @click="showDoubleMonth">
+      <el-input v-model="choseQuarter" prefix-icon="el-icon-date" :placeholder="defaultHint?yearFullMonth+'年 '+defaultQuarter:'请选择'" />
+    </span>
+    <div v-show="showTime1a" class="show1">
+      <p>
+        <button type="button" aria-label="前一年" class="el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left"
+          @click="prev" />
+        <span role="button" class="span-year">{{ year }}年</span>
+        <button type="button" aria-label="后一年" class="el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right"
+          @click="next" />
+      </p>
+      <div>
+        <span v-for="(item,index) in fullMonth" :key="index" class="selectMonth" @click="selectQuarter(item)">
+               {{ item }}
+        </span>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import moment from "moment";
+  export default {
+    name: 'season',
+    data() {
+      return {
+        defaultQuarter:'',
+        quarterFullMonth:moment().format("Q"),//默认
+        yearFullMonth:moment().format("YYYY"),//默认
+        value: '',
+        showTime2: false,
+        showTime1a: false,
+        year: new Date().getFullYear(),
+        fullMonth: ['第一季度', '第二季度', '第三季度', '第四季度'],
+        choseQuarter: '',
+        choseQuarter1: ''
+      }
+    },
+    props:{
+      isActive:{
+        type:Boolean,
+        default:false
+      },
+      defaultHint:{
+        type:Boolean,
+        default:false
+      }
+    },
+    mounted() {
+      if(this.defaultHint){
+        this.defaultQuarter =this.quarterFullMonth == '1'?
+        '第一季度':this.quarterFullMonth == '2'?
+        '第二季度':this.quarterFullMonth == '3'?
+        '第三季度':this.quarterFullMonth == '4'?
+        '第四季度':''
+      }
+      
+      if(!this.isActive){
+        var date=new Date().getMonth()+1;
+        var arrs=this.fullMonth;
+        var str=""
+        if(date<=3){
+          str=arrs[0]
+        }else if(date<=6){
+          str=arrs[1]
+        }else if(date<=9){
+          str=arrs[2]
+        }else{
+          str=arrs[3]
+        }
+        this.selectQuarter(str);
+      }
+     },
+    methods: {
+      // 点击季度按钮
+      quarterTime() {
+        this.showTime2 = true
+        this.choseQuarter = ''
+        this.fullMonth = ['第一季度', '第二季度', '第三季度', '第四季度']
+      },
+      // 点击input框
+      showDoubleMonth() {
+        this.showTime1a = true
+      },
+      // 上一年
+      prev() {
+        this.year = this.year * 1 - 1
+      },
+      // 下一年
+      next() {
+        this.year = this.year * 1 + 1
+      },
+      // 点击选项事件
+      selectQuarter(item) {
+        switch (item) {
+          case '第一季度':
+            this.choseQuarter1 = this.year + '1'
+            this.choseQuarter = this.year + '年 第一季度'
+            break
+          case '第二季度':
+            this.choseQuarter1 = this.year + '2'
+            this.choseQuarter = this.year + '年 第二季度'
+            break
+          case '第三季度':
+            this.choseQuarter1 = this.year + '3'
+            this.choseQuarter = this.year + '年 第三季度'
+            break
+          case '第四季度':
+            this.choseQuarter1 = this.year + '4'
+            this.choseQuarter = this.year + '年 第四季度'
+            break
+        }
+        this.$emit('confirm', this.choseQuarter1)
+        this.showTime1a = false
+      }
+    }
+  }
+</script>
+<style scoped>
+  * {
+    margin: 0;
+    padding: 0;
+    list-style: none;
+  }
+
+  .show1 {
+    width: 320px;
+    margin-top: 5px;
+    position: absolute;
+    z-index: 2;
+    height: auto;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
+    background: #fff;
+    padding: 5px;
+    padding-right: 20px;
+  }
+
+  .show1 p:nth-child(1) {
+    width: 100%;
+    height: 40px;
+    border-bottom: 1px solid #f5f5f5;
+    display: flex;
+    align-items: center;
+    justify-content: end;
+    padding: 0 10px;
+  }
+
+  .show1>div {
+    width: 100%;
+    height: auto;
+  }
+
+  .show1>div span {
+    width: 50%;
+  }
+
+  .selectMonth {
+    display: inline-block;
+    float: left;
+    width: 78px;
+    height: 40px;
+    line-height: 40px;
+    text-align: center;
+  }
+
+  .selectMonth:hover {
+    background: rgba(19, 131, 255, 0.052);
+  }
+
+  .span-year {
+    width: 90%;
+    margin: 0 auto;
+    display: inline-block;
+    text-align: center;
+    line-height: 40px;
+  }
+</style>

+ 164 - 0
src/components/toLead.vue

@@ -0,0 +1,164 @@
+<template>
+	<div>
+		<el-dialog :visible.sync="visible" width="700px" :close-on-click-modal="false" :before-close="closePopup">
+            <div class="flex-box flex-dv-center" style="padding: 0 20px;">
+                    <div v-for="(item,index) in headStep" :key="index" class="listg" :class="{listg1: item.id < nowIndex}">
+                        <span class="border" :class="{border1: item.id < nowIndex}" v-if="item.id == 2 || item.id == 3"></span>
+                        <span class="indexnum" v-if="item.id >= nowIndex" :class="{indexnow:nowIndex == item.id}">{{item.id}}</span>
+                        <span class="el-icon-circle-check numicon" v-if="item.id < nowIndex"></span>
+                        <span class="ramin">{{item.name}}</span>
+                    </div>
+            </div>
+			<div :style="dstyle" style="height:150px;padding: 40px 140px">
+                <slot name="1" v-if="nowIndex == 1"></slot>
+                <div v-if="nowIndex == 2" style="text-align: center;">
+                    <div>
+                        <span>导入中</span>
+                        <span class="el-icon-loading"></span>
+                    </div>
+                    <div>
+                        导入需要一定时间,请不要关闭当前窗口
+                    </div>
+                </div>
+                <div v-if="nowIndex == 3" class="leadtree">
+                    <div class="lead-tit">导入结果</div>
+                    <div class="lead-cent">
+                        <div v-if="tolead.id == 1">
+                            <div>共{{toleadall(tolead.error,tolead.success)}}条数据,已处理{{toleadall(tolead.error,tolead.success)}}条,导入情况如下:</div>
+                            <div><svg-icon icon-class="leadThenGreen" /> 导入成功{{tolead.success.length}}条</div>
+                            <div><svg-icon icon-class="leadErrRed" /> 导入失败{{tolead.error.length}}条 &nbsp; &nbsp; <span v-if="tolead.error.length > 0" style="cursor:pointer;color: #409EFF;" @click="errClick(tolead.bs_id)">点击下载失败数据</span></div>
+                        </div>
+                        <div v-else-if="tolead.id == 0">
+                            <span><svg-icon icon-class="leadJgRed" /> 导入异常:{{tolead.name}}</span>
+                        </div>
+                    </div>
+                    <div class="lead-but">
+                        <el-button v-if="tolead.id == 1 && tolead.error.length > 0" type="primary" @click="$emit('update:nowIndex', 1)">我已修改文件,重新导入</el-button>
+                        <el-button v-else type="primary" @click="closePopup">确认</el-button>
+                    </div>
+                </div>
+            </div>
+		</el-dialog>
+	</div>
+</template>
+<script>
+  export default {
+    props: {
+		visible: {
+			type: Boolean,
+			default: false
+        },
+        nowIndex: {//当前步骤
+			type: Number,
+			default: 1
+        },
+        tolead: {//导入数据
+			type: Object,
+			default: {}
+        },
+        export_type: {//导出类型
+			type: String,
+			default: ''
+        },
+        dstyle: {
+			type: String,
+			default: ''
+        },
+    },
+    name: "toLead",
+    data() {
+      return {
+          headStep:[
+              {id: 1,name: '选择文件',},
+              {id: 2,name: '正在处理',},
+              {id: 3,name: '导入结果',},
+          ],
+      }
+    },
+    methods: {
+        errClick(id){
+			window.open(
+				process.env.VUE_APP_BASE_API +
+                '/api/download/fail_data_export?employee_id=' + 
+                this.$getUserData().id 
+                + '&bs_id=' + id 
+                + '&export_type=' 
+                + this.export_type
+                , '_blank'
+			);
+        },
+        toleadall(err,then){
+            return err.length + then.length
+        },
+		closePopup() {
+			this.$nextTick(() => {
+                if(this.tolead.success && this.tolead.success.length > 0) this.$emit('confirm');
+				this.$emit('update:visible', false);
+			});
+		},
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+ .listg{
+     .indexnum{
+        width: 30px;
+        height: 30px;
+        display: inline-block;
+        border: 1px solid #cecece;
+        border-radius: 50%;
+        text-align: center;
+        color: #a9a9a9;
+        line-height: 30px;
+        margin-right: 5px;
+     }
+    .indexnow{
+         background-color:#409EFF;
+         color: #fff;
+         border: 1px solid #fff;
+     }
+     .border{
+        display: inline-block;
+        width: 160px;
+        margin: 0 5px 2px 5px;
+        height: 1px;
+        background-color: #eaeaea;
+     }
+     .border1{
+         margin-top: 18px;
+     }
+     .numicon{
+        color: #41b9ff;
+        font-size: 30px;
+        margin-right: 5px;
+     }
+ }
+ .listg1{
+     display: flex;
+    .ramin{
+        line-height: 32px;
+    }
+ }
+ .leadtree{
+     .lead-tit{
+        font-size: 19px;
+        color: black;
+        text-align: center;
+     }
+     .lead-cent{
+        width: 280px;
+        margin: 0 auto;
+        min-height: 100px;
+        padding: 10px 0 0 0;
+        div{
+            div{
+                padding: 4px 0;
+            }
+        }
+     }
+     .lead-but{
+         text-align: center;
+     }
+ }
+</style>

+ 214 - 0
src/components/upload.vue

@@ -0,0 +1,214 @@
+<template>
+<div>
+  <el-upload
+    ref="upload_com"
+    :headers="headers"
+    :action="action"
+    :show-file-list="showFileList"
+    :file-list="fileList"
+    :on-success="_onSuccess"
+    :on-preview="_onPreview"
+    :http-request="oss_upload"
+    :on-remove="_onRemove" 
+    :before-remove="_onBeforeRemove"
+    :before-upload="_beforeUpload"
+    :on-exceed="_onExceed"
+    :limit="limit"
+    :on-change="handleChange"
+    :multiple="multiple">
+    <slot></slot>
+    <slot name="tip"></slot>
+  </el-upload>
+  <el-progress v-show="showProcess" :percentage="processLength" :stroke-width="2"></el-progress>
+</div>
+</template>
+
+<script>
+  function noop() {}
+  import moment from 'moment'
+  import axios from 'axios'
+  export default {
+    props: {
+      action: { //必选参数,上传的地址
+        type: String,
+        required: true
+      },
+      headers: {//设置上传的请求头部
+        type: Object,
+        default() {
+          return {};
+        }
+      },
+      data: Object,//上传时附带的额外参数
+      multiple: Boolean,//是否支持多选文件
+      name: {//上传的文件字段名
+        type: String,
+        default: 'file'
+      },
+      drag: Boolean,//是否启用拖拽上传
+      showFileList: {//是否显示已上传文件列表
+        type: Boolean,
+        default: false
+      },
+      accept: String,//	接受上传的文件类型(thumbnail-mode 模式下此参数无效)
+
+      beforeUpload: Function,//	上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。
+      onRemove: {//文件列表移除文件时的钩子
+        type: Function,
+        default: noop
+      },
+      onBeforeRemove:{//删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。
+        type: Function,
+        default: noop
+      },
+      onPreview: {//点击文件列表中已上传的文件时的钩子
+        type: Function
+      },
+      onSuccess: {//文件上传成功时的钩子
+        type: Function,
+        default: noop
+      },
+      fileList: {//必选参数,上传的地址
+        type: Array,
+        default() {
+          return [];
+        }
+      },
+      limit: {//必选参数,上传的地址
+        type: Number,
+        default: ()=>{
+          return 1
+        }
+      },
+      onExceed: {//必选参数,上传的地址
+        type: Function,
+        default: noop
+      }
+    },
+    name: "upload",
+    data() {
+      return {
+        processLength:0,
+        showProcess:false,
+        files:{},
+        config: null
+      }
+    },
+    methods: {
+      handleChange(file,fileList){
+        this.files = file
+      },
+      handleChanges(file){
+        if(file.status === 'ready'){
+          this.processLength = 0 
+          this.showProcess = true
+          const interval = setInterval(() => {
+            if(this.processLength >= 99){
+            clearInterval(interval) 
+            return
+            }
+            this.processLength += 1
+          },20)
+        }
+        if(file.status === 'success'){
+          this.processLength =100
+          this.showProcess = false
+        }
+      },
+      get_sign(callback) {
+        // 测试添加 'https://intesys.cms.g107.com'
+        axios.get('https://intesys.cms.g107.com'+'/integral.php/Api/get_signature',{
+            headers: {
+              'Content-Type': 'application/json; charset=utf-8',
+			  'A-Token': this.$getToken()
+            }
+          }).then(res => {
+          this.config = res.data.data
+          callback()
+        })
+      },
+      _beforeUpload(file) {
+        if(!this.beforeUpload(file)){
+          return false
+        }else{
+          this.handleChanges(this.files)
+        }
+
+      },
+      oss_upload(upload_obj){
+        let self = this
+        this.get_sign(function () {
+          self.upload(upload_obj.file)
+        })
+      },
+      _onExceed(files, fileList){
+        this.$message.warning(`最多选择 ${this.limit} 个文件`)
+      },
+      _onSuccess(response, file, fileList) {
+        this.onSuccess(response, file, fileList)
+      },
+      _onPreview(file) {
+        this.onPreview(file)
+      },
+      _onRemove(file, fileList) {
+        this.onRemove(file, fileList)
+      },
+      _onBeforeRemove(file, fileList){
+        if(file.status == "success"){
+          return this.$confirm(`确定移除此项?`)
+        }
+      },
+      random_string(len) {
+        len = len || 32
+        var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
+        var maxPos = chars.length
+        var pwd = ''
+        for (let i = 0; i < len; i++) {
+          pwd += chars.charAt(Math.floor(Math.random() * maxPos))
+        }
+        return pwd
+      },
+      upload(item) {
+        let self = this
+        const photo = item // 获取图片对象
+        const photoName = item.name // 原图片的名称
+        const url = 'https://integralsys.oss-cn-shenzhen.aliyuncs.com'
+        let date = moment().format('YYYY/MM/DD')
+        let param = new FormData()
+        let randomStr = this.random_string(32)
+        let key = 'intesys/dd/' + this.$getUserData().site_id+ '/' + date + '/' + randomStr + '.png'
+        param.append('Filename', photoName)
+        param.append('key', key)
+        param.append('policy', this.config.policy)
+        param.append('OSSAccessKeyId', this.config.accessid)
+        param.append('success_action_status', '200') // 不要问为什么,照做
+        param.append('callback', this.config.callback)
+        param.append('signature', this.config.signature)
+        param.append('file', photo) // 这个**切记**一定要放到最后去 append ,不然阿里云会一直报 key 的错误
+        axios.post(url, param, {
+            headers: {
+              'Content-Type': 'multipart/form-data'
+            }
+          }).then(response => {
+            if(response.data.Status == 'Ok'){
+                this.processLength = 100
+                this.showProcess = false
+              setTimeout(()=>{
+                this.processLength = 0
+              },200)
+              self.fileList.push({name: randomStr + photoName, url: 'https://integralsys.oss-cn-shenzhen.aliyuncs.com/' + key, name: item.name, response:{
+                  url: 'https://integralsys.oss-cn-shenzhen.aliyuncs.com/' + key
+                }})
+              self._onSuccess({status: 1, url: 'https://integralsys.oss-cn-shenzhen.aliyuncs.com/' + key, file_name: randomStr + photoName}, item, self.fileList)
+            }
+          }).catch(err => {
+            this.showProcess = false
+          })
+      },
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 38 - 0
src/dome.vue

@@ -0,0 +1,38 @@
+<template>
+<div id="app">
+  <VirtualList :listData="data" :itemSize="100"/>
+</div>
+</template>
+
+<script>
+import VirtualList from "@/components/VirtualList";
+let d = [];
+for (let i = 0; i < 50; i++) {
+  d.push({ id: i, value: i });
+}
+
+export default {
+  name: "App",
+  data() {
+    return {
+      data: d
+    };
+  },
+  components: {
+    VirtualList
+  }
+};
+</script>
+
+<style>
+html{
+  height: 100%;
+}
+body{
+  height: 100%;
+  margin:0;
+}
+#app{
+  height:100%;
+}
+</style>

+ 129 - 0
src/hint.vue

@@ -0,0 +1,129 @@
+<template>
+	<div>
+		<div @click="init()">
+			<img src="./assets/image/pc.png" style="width:100%;height:auto" v-if="type == 'PC'" />
+			<div class="app" v-else :style="{ width: width }">
+				<img src="./assets/image/app1.png" :style="{ width: width, height: 'auto' }" />
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+import { openTryoutSku } from 'dingtalk-design-libs';
+import openLink from 'dingtalk-jsapi/api/biz/util/openLink';
+import close from 'dingtalk-jsapi/api/biz/navigation/close';
+export default {
+	data() {
+		return {
+			corpId: '',
+			token: '',
+			type: 'APP',
+			width: ''
+		};
+	},
+	created() {
+		this.width = document.body.clientWidth + 'px';
+	},
+	mounted() {
+		var url = window.location.href;
+		// let url='https://test-ding.g107.com/?purchaseToken=$PURCHASE_TOKEN$&corpId=$CORPID$&appEntityType=PC#/hint';
+		var data = this.GetRequest(url);
+		this.corpId = data.corpId;
+		this.token = data.purchaseToken;
+		if(data.appEntityType.indexOf('APP')>=0){
+			this.type ='APP';
+		}else{
+			this.type ='PC';
+		}
+		console.log(data,this.type)
+		if (this.corpId) {
+			this.$nextTick(()=>{
+				this.init();
+			})
+		}
+	},
+	methods: {
+		IsPC() {
+		    var userAgentInfo = navigator.userAgent;
+		    var Agents = ["Android", "iPhone","SymbianOS", "Windows Phone","iPad", "iPod"];
+		    var flag = true;
+		    for (var v = 0; v < Agents.length; v++) {
+		        if (userAgentInfo.indexOf(Agents[v]) > 0) {
+		            flag = false;
+		            break;
+		        }
+		    }
+		    return flag;
+		},
+		init() {
+			// 开发者自行判断调用这个方法的时机
+			openTryoutSku({
+				// corpId可以从应用首页的url上获取到
+				corpId: this.corpId,
+				// corpId: 'ding897857ddc9137670ffe93478753d9884',
+				// 应用的appId
+				appId: 55493,
+				// 从应用首页的url上获取到,url上参数名为 purchaseToken。
+				// purchaseToken如何配置参照下文”配置入口地址“章节。
+				token: this.token,
+				miniAppId: this.type == 'APP' ? 5000000000104741 : '' // 如果是三方小程序应用,需要设置一下自身的miniAppId。H5微应用可以不设置这个参数
+			}).then(res => {
+				const {
+					// action的值为:
+					// 'ok',用户执行了开通动作,或将自己加入了已开通的应用的可见范围内
+					// 'cancel', 用户点击了取消按钮
+					// 'unknown',用户点击空白区域关闭了弹窗,此时可以跟cancel采取同样的处理逻辑
+					action,
+					// 开通了应用的组织的corpId。因为个人开通可能会用钉钉的隐藏组织,所以开通应用的组织的corpId以这里返回的为准。
+					corpId
+				} = res;
+				if (action === 'ok') {
+					if (this.type == 'APP') {
+						close({});
+					} else {
+						if(this.IsPC()){
+							window.location.replace('https://pc.dd.g107.com?corpId=' + corpId)
+						}else{
+							openLink({ url:'https://pc.dd.g107.com?corpId=' + corpId }).then(() => close({}));
+						}
+						
+					}
+				}
+			})
+			.catch((res) => {
+				console.log(res);
+				// 钉钉侧出现了技术异常,比如打开弹窗失败等,出现概率非常低
+			});
+		},
+		GetRequest(urlStr) {
+			if (typeof urlStr == 'undefined') {
+				var url = decodeURI(location.search); //获取url中"?"符后的字符串
+			} else {
+				var url = '?' + urlStr.split('?')[1];
+			}
+			var theRequest = new Object();
+			var strs;
+			if (url.indexOf('?') != -1) {
+				var str = url.substr(1);
+				strs = str.split('&');
+				for (var i = 0; i < strs.length; i++) {
+					theRequest[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1]);
+				}
+			}
+			return theRequest;
+		}
+	}
+};
+</script>
+
+<style scoped="scoped">
+.app {
+	margin: 0 auto;
+	height: auto;
+	padding: 0;
+}
+.app img {
+	/* width: 375px; */
+}
+</style>

+ 1758 - 0
src/home.vue

@@ -0,0 +1,1758 @@
+<template>
+	<div class="">
+		<div class="flex-box ts flex-center-center" v-if="isSubject">
+			<img mode="scaleToFill" src="./assets/image/tz.png" />
+			<div class="flex-1">你正在使用个人体验版,如需正式使用,请联系管理员</div>
+			<div class="btn" type="primary" @click="openGly">联系管理员</div>
+		</div>
+		<el-row style="min-width:1160px;">
+			<el-col :span="18" style="min-width:780px;">
+				<el-row class="home-left-header">
+					<el-col :span="7" class="hlheader-user">
+						<el-row :gutter="40">
+							<el-col :span="24" class="hlheader-user-info">
+								<div class="headimg" style=" margin-right: 0px;cursor:pointer;">
+									<userImage :user_name="user_info.name" :img_url="user_info.img_url" fontSize="1.1" width="60px" height="60px"></userImage>
+								</div>
+								<div class="headtext">
+									<div class="greetings" style="margin-top:7px;">
+										<div style="margin-top:2px;">{{ user_info.name }}</div>
+										&nbsp;
+										<span style="margin-top:2px;">
+											{{
+												time <= 4
+													? '夜深了'
+													: time > 4 && time <= 11
+													? '早上好'
+													: time > 11 && time <= 14
+													? '中午好'
+													: time > 14 && time <= 19
+													? '下午好'
+													: time > 19 && time <= 24
+													? '晚上好'
+													: ''
+											}}
+										</span>
+									</div>
+									<p style="margin-top: 16px; color: #666;">
+										<span>
+											{{
+												time <= 4
+													? '烦恼尽退散'
+													: time > 4 && time <= 11
+													? '又是美好的一天'
+													: time > 11 && time <= 14
+													? '吃饱睡好更有动力'
+													: time > 14 && time <= 19
+													? '致敬奋斗中的自己'
+													: time > 19 && time <= 24
+													? '该养精蓄锐了'
+													: ''
+											}}
+										</span>
+									</p>
+								</div>
+							</el-col>
+						</el-row>
+					</el-col>
+
+					<el-col :span="17" style="margin:0;padding:0;" v-if="creatorJurisdiction">
+						<el-col :gutter="50" style="margin:0;padding:34px 0 0 0;" class="quick_button_box">
+							<div style="display:flex;justify-content: space-around;">
+								<div v-for="(item, index) in fits" :key="index" @click="openGzd(item.url)" style="display:flex;cursor:pointer;padding:0 5px 0 5px">
+									<img :src="item.img" style="width:46px;height:46px;margin:10px 5px 0 0" />
+									<p style="display: inline-block;width:100%;">
+										<b style="display: inline-block;color:#303133;font-size:16px;margin-top:11px;">{{ item.name }}</b>
+										<br />
+										<span style="color:#606266;font-size:12px;display: inline-block;margin-top:8px;">{{ item.value }}</span>
+									</p>
+								</div>
+							</div>
+						</el-col>
+					</el-col>
+					<el-col v-else :span="17" style="margin-top:34px;padding:0 0 10px 0;height:58px;" v-loading="authorityManagerHeaderLoad">
+						<el-col :gutter="50" style="margin:0;padding:0;" class="quick_button_box">
+							<div style="display:flex;justify-content: space-around;">
+								<p style="text-align:center;cursor:pointer;margin: 0;" @click="$router.push({ path: '/individual_statistics' })">
+									<b style="color:#26A2FF;font-size:27px;">{{ headDayBs.b ? headDayBs.b : '0' }}</b>
+									<br />
+									<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">今日B分</span>
+								</p>
+								<p style="text-align:center;cursor:pointer;margin: 0;" @click="$router.push({ path: '/individual_statistics' })">
+									<b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.b ? authorityManagerHeaders.b : '0' }}</b>
+									<br />
+									<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">本月B分</span>
+								</p>
+								<p style="text-align:center;cursor:pointer;margin: 0;" @click="$router.push({ path: '/individual_statistics' })">
+									<b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.a ? authorityManagerHeaders.a : '0' }}</b>
+									<br />
+									<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">本月A分</span>
+								</p>
+								<p style="text-align:center;cursor:pointer;margin: 0;" @click="$router.push({ path: '/my_task' })">
+									<b style="color:#26A2FF;font-size:27px;">
+										{{
+											authorityManagerHeaders.performance
+												? authorityManagerHeaders.performance.complete_count + '/' + authorityManagerHeaders.performance.total_count
+												: '0/0'
+										}}
+									</b>
+									<br />
+									<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">本月任务进度</span>
+								</p>
+							</div>
+						</el-col>
+					</el-col>
+				</el-row>
+
+				<el-row class="left-all-style">
+					<el-row>
+						<el-col :span="22"><span class="title">排行榜</span></el-col>
+						<el-col :span="2"><span class="noremind" @click="$router.push({ path: RankingPush })">查看详情</span></el-col>
+					</el-row>
+					<div v-loading="tabPositionLoad">
+						<div style="width:100%;height:30px;margin-top:20px;">
+							<el-radio-group v-model="tabPosition" style="margin-bottom: 30px;display:flex">
+								<div v-for="(item, index) in rankingList" :key="index" style="">
+									<el-radio-button :label="item.val" @click.native="tabPositions($event, item)">
+										<span style="width:84px;coloe:#606266;display: block;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;">
+											{{ item.group_name }}
+										</span>
+									</el-radio-button>
+								</div>
+							</el-radio-group>
+						</div>
+						<div style="display:flex;margin-top:16px;padding-top:24px;height:100%;" v-loading="addUpRankingLoad">
+							<div class="nopoint_box" style="" v-if="rankingListDetails.length == 0">
+								<div class="noimg" style="margin:0;"></div>
+								<span class="title1" style="margin:0;">暂无积分数据</span>
+							</div>
+							<div v-else v-for="(item, index) in rankingListDetails" :key="index" style="text-align:center;width:80px;cursor:pointer;margin:0 20px;">
+								<div class="" style="cursor:pointer;position: relative;height: 60px;">
+									<svg-icon
+										v-if="item.rank <= 3"
+										:icon-class="item.rank == 1 ? 'first' : item.rank == 2 ? 'secondPlace' : item.rank == 3 ? 'third' : ''"
+										style="z-index:1;position: absolute;left: 26px;top: -18px;font-size:28px;"
+									/>
+									<div
+										v-if="item.rank == 4 || item.rank == 5"
+										style="z-index:1;position: absolute;left: 27px;top: -14px;width:24px;height:24px;border:1px solid #C0C4CC;border-radius:50%;background-color:#fff;font-size:12px;text-align-center;line-height:24px;color:#303133;"
+									>
+										<b style="">{{ item.rank }}</b>
+									</div>
+									<div
+										v-if="item.employee_id == user_info.id && index == 0 && item.rank > 3"
+										style="z-index:1;position: absolute;left: 26px;top: -14px;width:25px;height:25px;border:1px solid #C0C4CC;border-radius:50%;background-color:#fff;font-size:12px;text-align-center;line-height:24px;color:#303133;"
+									>
+										<b>{{ item.rank }}</b>
+									</div>
+									<div style="position: absolute;left: 8px;top: -16px;z-index:2;">
+										<div
+											v-if="index == 5 || index == 6"
+											style="width:60px;height:24px;border:1px solid #C0C4CC;background-color:#fff;border-radius:20px;font-size:12px;color:#303133;text-align:center;line-height:24px"
+										>
+											<b>{{ index == 5 ? '倒数第2' : index == 6 ? '倒数第1' : '' }}</b>
+										</div>
+									</div>
+									<userImage :img_url="item.employee_img_url" fontSize="1" :user_name="item.employee_name" width="60px" height="60px"></userImage>
+								</div>
+								<span
+									style="color:#303133;font-size:14px;text-align:center;margin-top:10px;display: inline-block;width:100%;display: block;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;"
+								>
+									{{ item.employee_name }}
+									<span v-if="item.employee_id == user_info.id">(我)</span>
+								</span>
+							</div>
+						</div>
+					</div>
+				</el-row>
+
+				<el-row class="left-all-style">
+					<el-row style="">
+						<el-col :span="24"><b class="title" style="margin-bottom:15px;display:block">积分构成</b></el-col>
+
+						<div v-loading="IntegralFormChartLoad">
+							<el-col :span="5" style="position: relative;left:10px;z-index:1;margin-top:10px;" v-if="!this.employeeRout">
+								<el-cascader
+									v-model="dept_name1"
+									:options="dept_tree"
+									@change="dept1_null"
+									:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+									ref="dept1"
+									filterable
+									change-on-select
+									placeholder="请选择部门"
+									clearable
+								></el-cascader>
+							</el-col>
+							<div class="nopoint_box" style="height:325px;" v-show="IntegralFormnone">
+								<div class="noimg" style="width: 150px;height: 150px;margin-top:94px;"></div>
+								<span class="title1">
+									暂无积分数据,
+									<span v-if="$supremeAuthority()!='employee'" @click="$router.push({ path: '/award_punish' })" style="color:#409EFF;cursor:pointer;">去奖扣积分></span>
+								</span>
+							</div>
+							<div v-show="!IntegralFormnone" style="margin-top:20px;"><div ref="IntegralFormChart" :style="{ width: '100%', height: '400px' }"></div></div>
+						</div>
+					</el-row>
+				</el-row>
+
+				<el-row class="left-all-style">
+					<el-row style="">
+						<el-col :span="24" style="display:flex">
+							<b class="title" style="margin:0 20px 15px 0;display:block">本月积分情况</b>
+							<el-checkbox v-model="exclusiveMonthChecked">不包含自动积分加分项</el-checkbox>
+						</el-col>
+						<div v-loading="monthlyIntegralloading">
+							<el-col :span="5" style="position: relative;left:10px;z-index:1;" v-if="!this.employeeRout">
+								<el-cascader
+									v-model="dept_name2"
+									:options="dept_tree"
+									@change="monthlyIntegralchange"
+									:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+									ref="dept2"
+									filterable
+									change-on-select
+									placeholder="请选择部门"
+									clearable
+								></el-cascader>
+							</el-col>
+
+							<div class="nopoint_box" style="height:381px;" v-if="monthlyIntegralnone">
+								<div class="noimg" style="width: 150px;height: 150px;margin-top:90px;"></div>
+								<span class="title1">暂无积分数据</span>
+							</div>
+
+							<div v-show="!monthlyIntegralnone">
+								<div ref="monthlyIntegralChart" :style="{ width: '100%', height: '350px', marginTop: '40px' }"></div>
+								<div style="width:90%;display:flex;justify-content: space-around;margin-top:30px;padding-left:40px">
+									<p v-for="(item, index) in monthlyIntegralList" :key="index" style="text-align:center">
+										<b style="display:block;color:#303133;font-size:18px;" v-if="index < 3">
+											{{ index == 0 ? item.total_point : index == 1 ? item.reward_point : index == 2 ? item.deduction_point : '' }}
+										</b>
+										<b style="display:block;color:#303133;font-size:18px;" v-else-if="index == 3">{{ item.ratio == -1 ? '—' : item.ratio + ':1' }}</b>
+										<b style="display:block;color:#303133;font-size:18px;" v-else>
+											{{ item.toRatio.ratio + '%' }}
+											<svg-icon
+												:icon-class="item.toRatio.type == 1 ? 'litrearrows' : item.toRatio.type == 2 ? 'droparrows' : ''"
+												style="font-size:10px;margin-bottom:2px"
+											/>
+										</b>
+										<span style="color:rgb(48, 49, 51);font-size:14px;margin-top:5px;display:block;">{{ item.name }}</span>
+									</p>
+								</div>
+							</div>
+						</div>
+					</el-row>
+				</el-row>
+
+				<el-row v-if="!this.employeeRout" class="left-all-style" style="">
+					<el-row style="">
+						<el-col :span="24"><b class="title" style="margin-bottom:15px;display:block">管理者奖扣任务执行情况</b></el-col>
+						<div v-loading="ManagerSAwardloading">
+							<el-col :span="5" style="position: relative;left:10px;z-index:1;">
+								<el-cascader
+									v-model="dept_name3"
+									:options="dept_tree"
+									@change="ManagerSAwardlchange"
+									:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+									ref="dept3"
+									filterable
+									change-on-select
+									placeholder="请选择部门"
+									clearable
+								></el-cascader>
+							</el-col>
+							<div class="nopoint_box" style="height:401px;" v-if="ManagerSAwardnone">
+								<div class="noimg" style="width: 150px;height: 170px;margin-top:90px;"></div>
+								<span class="title1">暂无积分数据</span>
+							</div>
+							<div v-show="!ManagerSAwardnone" :style="{ width: widths }">
+								<div ref="ManagerSAwardChart" :style="{ width: widths, height: '400px', marginTop: '40px' }"></div>
+								<div style="width:90%;display:flex;justify-content: space-around;padding-left:40px">
+									<p
+										v-for="(item, index) in ManagerSAwardlList"
+										:key="index"
+										style="z-index:1;"
+										class="ManagerSAwardlStyle"
+										@click="$router.push({ path: '/manager_statistics' })"
+									>
+										<b class="ManagerSAwardlStyleB" v-if="index != 2">{{ item.val }}</b>
+										<b class="ManagerSAwardlStyleB" v-else-if="index == 2">{{ item.val == -1 ? '—' : item.val + ':1' }}</b>
+										<span class="ManagerSAwardlStyleSpan">{{ item.name }}</span>
+									</p>
+								</div>
+							</div>
+						</div>
+					</el-row>
+				</el-row>
+			</el-col>
+			<el-col :span="6" style="min-width:280px;">
+				<el-row v-if="$supremeAuthority()!='employee'&&$supremeAuthority()!='creator'">
+					<div class="right-all-style flex-box-ce" style="background-color:#fff;padding:20px;;text-align:left;margin-bottom: 10px;cursor: pointer;" @click="ruleQRcode">
+						<img src="./assets/image/zq.png" style="width: 20px;height: 20px;margin-right: 10px;"/>
+						<div style="font-size: 15px;" class="zb flex-1">{{thisweek}} 积分周报</div>
+						<i class="el-icon-arrow-right" style="font-size: 18px;"></i>
+					</div>
+				</el-row>
+				<el-row v-if="!creatorJurisdiction">
+					<div class="right-all-style" style="background-color:#fff;padding:20px;;text-align:left;margin-bottom: 10px;">
+						<span class="title">常用</span>
+						<div>
+							<span v-for="(item, index) in inCommonUse" :key="index" @click="$router.push({ path: item.push })" class="inCommonUseStyle">
+								<img :src="item.image" alt="" style="width:31px;height:31px;margin:11px 10% 0 8%;" />
+								<b>{{ item.name }}</b>
+							</span>
+						</div>
+					</div>
+				</el-row>
+				<el-row>
+					<div class="right-all-style" v-loading="highestPrizeBuckleloading" style="background:#fff;padding: 20px 20px 0;">
+						<span class="title">待我审批({{ auditList.length }})</span>
+
+						<div class="nopoint_box" v-if="auditList.length == 0">
+							<div class="noimg"></div>
+							<span class="title1" style="padding-bottom:20px;">还没有待我审批</span>
+						</div>
+
+						<div v-else style="padding:20px 0 20px 0;" class="flex-box-v">
+							<div
+								v-for="(item, index) in auditList"
+								class="List_border"
+								:key="index"
+								style="cursor:pointer;display:flex;padding-top:10px;"
+								@click="openDetail(item)"
+							>
+								<userImage width="45px" height="45px" :id="item.employee_id" :user_name="item.employee_name" style="margin-right:8px"></userImage>
+								<div class="rightexamineAndApproveList2">
+									<p style="width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#303133;font-size:16px">
+										<b>
+											{{ item.employee_name
+											}}{{
+												item.source_type == 1
+													? '的积分任务'
+													: item.source_type == 2
+													? '的积分申请'
+													: item.source_type == 3
+													? '的积分录入'
+													: item.source_type == 4
+													? '的绩效工作'
+													: ''
+											}}
+										</b>
+									</p>
+									<p
+										style="padding:10px 0;font-size:13px;line-height:20px;color:#303133;overflow:hidden; text-overflow:ellipsis;display:-webkit-box; -webkit-box-orient:vertical;-webkit-line-clamp:2; "
+									>
+										{{ item.remark.rule || item.remark.customize }}
+									</p>
+									<div style="display:flex;padding-bottom:10px;justify-content: space-between;">
+										<span style="color:#909399">{{ item.event_time }}</span>
+										<div><span style="color:#26A2FF;cursor:pointer">审批</span></div>
+									</div>
+								</div>
+							</div>
+							<div
+								class="more"
+								v-show="auditList.length >= 3"
+								style="text-align: center;color: #909399;font-size: 14px; padding:16px 16px 0 16px; cursor: pointer;"
+								@click="$router.push({ path: '/approval_list' })"
+							>
+								查看更多
+							</div>
+						</div>
+					</div>
+				</el-row>
+				<el-row>
+					<div class="right-all-style" v-loading="highestPrizeBuckleloading" style="background:#fff;padding: 20px 20px 0;">
+						<span class="title">本周奖分最高</span>
+
+						<div class="nopoint_box" v-if="!prize.id">
+							<div class="noimg"></div>
+							<span class="title1" style="padding-bottom:20px;">暂无积分数据</span>
+						</div>
+
+						<div v-else style="display:flex;padding:20px 0 20px 0;">
+							<userImage width="45px" height="45px" :user_name="prize.name" fontSize=".9" style="margin-right:8px"></userImage>
+							<div class="rightexamineAndApproveList" style="border:0px">
+								<p
+									style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#73767c;font-size:16px;display:flex;justify-content: space-between;"
+								>
+									<b style="color:#303133;font-size:16px;margin:0px 0 0 5px;">{{ prize.name }}</b>
+									<span style="color:#26A2FF;font-size:16px;">
+										<span v-if="prize.point > 0">+</span>
+										{{ prize.point }} B分
+									</span>
+								</p>
+								<p
+									style="margin:8px 0 0 5px;font-size:13px;line-height:20px;color:#303133;overflow:hidden; text-overflow:ellipsis;display:-webkit-box; -webkit-box-orient:vertical;-webkit-line-clamp:3;"
+								>
+									{{ prize.remark ? prize.remark.customize : '' }}
+								</p>
+							</div>
+						</div>
+					</div>
+				</el-row>
+
+				<el-row>
+					<div class="right-all-style" v-loading="highestPrizeBuckleloading" style="background:#fff;padding: 20px 20px 0;">
+						<span class="title">本周扣分最多</span>
+
+						<div class="nopoint_box" v-if="!buckle.id">
+							<div class="noimg"></div>
+							<span class="title1" style="padding-bottom:10px;">暂无积分数据</span>
+						</div>
+
+						<div v-else style="display:flex;padding:20px 0 20px 0;">
+							<userImage width="45px" height="45px" :user_name="buckle.name" fontSize=".9" style="margin-right:8px"></userImage>
+							<div class="rightexamineAndApproveList">
+								<p
+									style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#73767c;font-size:16px;display:flex;justify-content: space-between;"
+								>
+									<b style="color:#303133;font-size:16px;margin:0px 0 0 5px;">{{ buckle.name }}</b>
+									<span style="color:#FF9600;font-size:16px;">{{ buckle.point }} B分</span>
+								</p>
+								<p
+									style="margin:8px 0 0 5px;font-size:13px;line-height:20px;color:#303133;overflow:hidden; text-overflow:ellipsis;display:-webkit-box; -webkit-box-orient:vertical;-webkit-line-clamp:3;"
+								>
+									{{ buckle.remark ? buckle.remark.customize : '' }}
+								</p>
+							</div>
+						</div>
+					</div>
+				</el-row>
+
+				<el-row>
+					<div class="right-all-style" v-loading="announLoad" style="background:#fff;padding: 20px 20px 20px 20px;">
+						<div style="display:flex;justify-content: space-between;">
+							<span class="title">系统通知</span>
+							<span v-if="announcement.title" @click="$router.push({ path: '/update_notice' })" class="announcementc" style="font-size:13px;">查看详情</span>
+						</div>
+						<div v-if="announcement.title" class="announs">
+							<b style="font-size:15px;margin:10px 0 0 10px;display: inline-block;">{{ announcement.title }}</b>
+							<div class="announDetails" style="padding:0 0 0 18px;margin-top:10px;" v-html="announcement.focus"></div>
+						</div>
+						<div v-else class="nopoint_box">
+							<div class="noimg"></div>
+							<span class="title1" style="padding-bottom:10px;">暂无系统通知</span>
+						</div>
+					</div>
+				</el-row>
+			</el-col>
+		</el-row>
+		<div class="updateNotice">
+			<el-dialog title="系统通知" :visible.sync="updateVisible" width="500px" top="20vh" :before-close="updateClose">
+				<b style="font-size:16px;margin:0 0 10px 0;display: inline-block;">{{ announcement.title }}</b>
+				<div class="announDetails" style="padding:0 0 0 0" v-html="announcement.focus"></div>
+				<span slot="footer" class="dialog-footer"><el-button @click="$router.push({ path: '/update_notice' })" type="primary" round>查看详情</el-button></span>
+			</el-dialog>
+		</div>
+		<el-dialog @close="closeCode"  :visible.sync="innerVisible" width="444px">
+			<div style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 346px;box-sizing: border-box;margin: 0 auto;">
+				<div id="qrcode" ref="qrcode"></div>
+			</div>
+			<div style="margin-top: 10px;text-align: center;color: #666;">请使用钉钉APP扫描二维码</div>
+		</el-dialog>
+		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
+	</div>
+</template>
+
+<script>
+var bool = true; // 五秒执行一次变量
+import QRCode from 'qrcodejs2';
+import examinePopup from '@/components/examinePopup';
+import { contactAdminToUseApp } from 'dingtalk-design-libs';
+export default {
+	components: { examinePopup },
+	data() {
+		return {
+			isSubject: false, //判断是否是个人版进入
+			mainCorpId: '', //如果是个人版,这个企业ID是登录者所在的企业ID,不是钉钉那边提供的隐藏企业ID
+
+			announLoad: false,
+			announcement: {},
+
+			updateVisible: false,
+
+			employeeRout: this.$authoritys('employee'),
+
+			authorityManagerHeaderLoad: false, //管理员头部loading
+			authorityManagerHeaders: {}, //管理员头部 数据
+			headDayBs: {},//管理员头部 数据 天
+			creatorJurisdiction: this.$getIsCreator('creator'), //是否创始人
+
+			widths: '100%',
+			time: this.$moment().format('HH'),
+			user_info: this.$getUserData(),
+			fits: [
+				{
+					name: '奖扣A/B分',
+					value: '表现好坏,有奖有罚',
+					img: require('./assets/image/prizeBuckle.png'),
+					url: '/award_punish'
+				},
+				// {
+				//   name: "绩效",
+				//   value: "工作目标与价值的体现",
+				//   img: require("./assets/image/performance.png"),
+				//   url: "/award_punish",
+				// },
+				{
+					name: '管理者奖扣',
+					value: '管理执行到位,奖罚分明',
+					img: require('./assets/image/performance.png'),
+					url: '/manager_statistics'
+				},
+				{
+					name: '任务',
+					value: '认可积极完成任务的人',
+					img: require('./assets/image/task.png'),
+					url: '/my_issue'
+				}
+			],
+
+			//排行榜
+			RankingPush: '', //查看更多跳转
+			tabPositionLoad: false, //排名分类loading
+			addUpRankingLoad: false, //排名人员loading
+			tabPosition: '0',
+			rankingList: [], //排行榜数据
+			rankingListDetails: [], //排行榜人员列表
+
+			//积分构成
+			IntegralFormnone: false, //积分构成为空或报错,展示的开关
+			dept_name1: [], //积分构成--部门
+			IntegralFormChartLoad: false, //积分构成loading
+
+			//本月积分情况
+			exclusiveMonthBranch: 0, //本月积分情况--部门
+			exclusiveMonthChecked: true, //本月积分情况--不包含自动积分加分项
+			dept_name2: [], //本月积分情况--部门
+			monthlyIntegralList: [
+				//本月积分情况数据
+				{ total_point: '0', name: '本月总积分' },
+				{ reward_point: '0', name: '本月总奖分' },
+				{ deduction_point: '0', name: '本月总扣分' },
+				{ ratio: '0', name: '奖扣分比例' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比上月总分' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比上月奖分' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比上月扣分' }
+			],
+			monthlyIntegralloading: false, //本月积分情况loading
+			monthlyIntegralnone: false, //本月积分情况为空或报错,展示的开关
+
+			//管理者奖扣
+			dept_name3: [], //管理者统计数据--部门
+			ManagerSAwardloading: false, //管理者统计 loading
+			ManagerSAwardnone: false, //管理者奖扣执行情况为空或报错,展示的开关
+			ManagerSAwardlList: [
+				//管理者统计数据
+				{ val: '0', name: '总奖分' },
+				{ val: '0', name: '总扣分' },
+				{ val: '0', name: '奖扣分比例' },
+				{ val: '0', name: '奖扣人次' },
+				{ val: '0', name: '奖扣执行人数' },
+				{ val: '0', name: '达标人数' },
+				{ val: '0', name: '未达标人数' }
+			],
+
+			dept_tree: [], //部门列表
+
+			//奖扣分
+			highestPrizeBuckleloading: false, //奖扣分最高loading
+			prize: {}, //奖分
+			buckle: {}, //扣分
+
+			inCommonUse: [
+				{ name: '奖扣积分', image: require('./assets/image/entry_list.png'), push: '/award_punish' },
+				{ name: '发布任务', image: require('./assets/image/my_publish.png'), push: '/my_issue' },
+				{ name: '申请积分', image: require('./assets/image/a_apply.png'), push: '/apply_list' },
+				{ name: '领任务', image: require('./assets/image/task_hall.png'), push: '/get_task' }
+			],
+			// 待我审批模块
+			auditList: [],
+			detail_id: 0,
+			detailShow: false,
+			thisweek:'',
+			innerVisible:false
+		};
+	},
+	watch: {
+		exclusiveMonthChecked() {
+			this.monthlyIntegral();
+		}
+	},
+	mounted() {
+		console.log(this.$supremeAuthority())
+		if (this.employeeRout) {
+			this.inCommonUse = [];
+			this.inCommonUse.push(
+				{ name: '申请积分', image: require('./assets/image/a_apply.png'), push: '/apply_list' },
+				{ name: '领任务', image: require('./assets/image/task_hall.png'), push: '/get_task' }
+			);
+		}
+		this.function_All();
+		window.addEventListener('resize', this.selfAdaption);
+		// 个人版处理
+		if (this.$getUserData().is_personal == 1) {
+			this.isSubject = true;
+			this.mainCorpId = this.$getUserData().main_corp_id;
+		}
+		var url = window.location.href;
+		var rUrl = this.GetRequest(url).url || '';
+		// console.log('url=' + rUrl);
+		this.$nextTick(function() {
+			if (rUrl) {
+				setTimeout(() => {
+					this.$router.push({ path: '/' + rUrl });
+				}, 200);
+			}
+		});
+		this.setDate()
+	},
+	methods: {
+		// 关闭弹框,清除已经生成的二维码
+		closeCode() {
+			setTimeout(() => {
+				this.$refs.qrcode.innerHTML = '';
+			}, 150);
+		},
+		ruleQRcode() {
+			this.innerVisible = true;
+			// 使用$nextTick确保数据渲染
+			this.$nextTick(() => {
+				this.payOrder();
+			});
+		},
+		payOrder () {// 展示二维码
+			let url = 'dingtalk://dingtalkclient/action/open_micro_app'
+			let appid = '?appId='+this.$appId
+			let corpId = '&corpId='+this.$getCache('corpId')
+			let page = '&page='+encodeURIComponent(`pages/reportBox/report/report?employee_id=${encodeURIComponent(this.$getUserData().id)}`)//encodeURIComponent('小米')
+			let urls = url+appid+corpId+page
+			var qrcode = new QRCode('qrcode', {
+				text: urls, // 二维码内容
+				width: 325,
+				height: 325,
+				render: 'table', // 设置渲染方式(有两种方式 table和canvas,默认是canvas)
+				colorDark: '#34373e', // 二维码色
+				colorLight: '#ffffff', // 背景色
+				correctLevel: QRCode.CorrectLevel.H // 容错等级,H是heigh,最高,所以二维码看起来很密
+			})
+		},
+		  setDate() {
+			var thisweek = {};
+			var date = new Date();
+			// 本周一的日期
+			date.setDate(date.getDate() - date.getDay() + 1);
+			let month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1)
+			let getDate = date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()
+			thisweek.start_day = month + "-" + getDate;
+			// thisweek.start_day = date.getFullYear() + "-" + month + "-" + getDate;
+		
+			// 本周日的日期
+			date.setDate(date.getDate() + 6);
+			let month2 = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1)
+			let getDate2 = date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()
+			thisweek.end_day =month2 + "-" + getDate2;
+			// thisweek.end_day = date.getFullYear() + "-" + month2 + "-" + getDate2;
+			this.thisweek=thisweek.start_day+'~'+thisweek.end_day
+		  },
+		GetRequest(urlStr) {
+			if (typeof urlStr == 'undefined') {
+				var url = decodeURI(location.search); //获取url中"?"符后的字符串
+			} else {
+				var url = '?' + urlStr.split('?')[1];
+			}
+			var theRequest = new Object();
+			var strs;
+			if (url.indexOf('?') != -1) {
+				var str = url.substr(1);
+				strs = str.split('&');
+				for (var i = 0; i < strs.length; i++) {
+					theRequest[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1]);
+				}
+			}
+			return theRequest;
+		},
+		openGly() {
+			contactAdminToUseApp({ id: '55493', corpId: this.mainCorpId }).catch(err => {
+				// 入参不正确,或者遇到技术异常时才会进入这个链路
+				console.error(err);
+			});
+		},
+		function_All() {
+			if (this.$getIsCreator('creator')) {
+				//是否是创始人
+			} else {
+				this.authorityManagerHeader();
+			}
+			this.noticeList(); //系统公告
+			this.integralForm(); //积分构成
+			this.getDepartment(); //获取部门列表
+			this.rankingListname(); //获取自定义排行榜名
+			this.monthlyIntegral(); //本月积分情况
+			this.getSpList(); //待我审批列表
+			if (!this.employeeRout) {
+				this.ManagerSAward(); //管理者奖扣任务执行情况
+			}
+			this.highestPrizeBuckle(); //奖扣分最高积分事件
+		},
+		//审批
+		openDetail(item) {
+			this.detail_id = item.id;
+			this.detailShow = true;
+		},
+		// 待我审批列表
+		getSpList() {
+			let params = {
+				source_type: 0,
+				type: 'waiting',
+				page: 1,
+				pt_id: 0,
+				page_size: '3'
+			};
+			this.$axios('get', '/api/integral/review/list', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.auditList = res.data.data.list;
+					}
+				})
+				.finally(() => {});
+		},
+		noticeList() {
+			//系统公告
+			this.announLoad = true;
+			let params = {
+				page: 1,
+				page_size: 10
+			};
+			this.$axios('get', '/api/announcement/list', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						let list = res.data.data.list[0];
+						if (this.$getCache('noticeId')) {
+							if (this.$getCache('noticeId') != list.id) {
+								this.updateVisible = true;
+								this.$setCache('noticeId', list.id);
+							}
+						} else {
+							this.$setCache('noticeId', list.id);
+							this.updateVisible = true;
+						}
+						this.announcement = list;
+					}
+				})
+				.finally(() => {
+					this.announLoad = false;
+				});
+		},
+		updateClose(none) {
+			none();
+		},
+		//echarts自适应
+		selfAdaption() {
+			var myChart1 = this.$echarts.init(this.$refs.monthlyIntegralChart);
+			var myChart2 = this.$echarts.init(this.$refs.IntegralFormChart);
+			var myChart3 = this.$echarts.init(this.$refs.ManagerSAwardChart);
+			myChart1.resize();
+			myChart2.resize();
+			myChart3.resize();
+		},
+		openGzd(val) {
+			val ? this.$router.push({ path: val }) : '';
+		},
+		popout() {
+			if (bool) {
+				const h = this.$createElement;
+				this.$notify({
+					message: h('b', { style: 'color:rgb(38, 162, 255)' }, '任务功能将在近期开放,敬请期待')
+				});
+				bool = false;
+				setTimeout(() => {
+					bool = true;
+				}, 5000);
+			} else {
+			}
+		},
+		Administrator() {
+			this.popout();
+		},
+
+		//管理员头部
+		authorityManagerHeader() {
+			this.authorityManagerHeaderLoad = true;
+			let params1 = this.$axios('get', '/api/integral/statistics/', {employee_id: this.user_info.id, month: this.$moment().format('YYYY-MM')}, 'v2')
+			let params2 = this.$axios('get', '/api/integral/statistics/', {employee_id: this.user_info.id, day: this.$moment().format('YYYY-MM-DD')}, 'v2')
+			Promise.all([params1, params2]).then(res => {
+				this.authorityManagerHeaders = res[0].data.data;
+				this.headDayBs = res[1].data.data;
+			})
+			.finally(() => {
+				this.authorityManagerHeaderLoad = false;
+			});
+		},
+
+		//排行榜
+		customRanking(target_id, date_interval) {
+			//自定义排名   date_interval=时间
+			let data = {
+				group_id: target_id,
+				pt_id: 3,
+				index_ranking: 1
+			};
+			data.date =
+				date_interval == 1
+					? this.$moment().format('YYYYMM')
+					: date_interval == 2
+					? this.$moment().format('YYYYQ')
+					: date_interval == 3
+					? this.$moment().format('YYYY')
+					: '0';
+			this.$axios('get', '/api/integral/statistics/groups/rank', data)
+				.then(res => {
+					let lists = res.data.data.list;
+					let rankingList = [];
+					let arr = false;
+					for (let i in lists) {
+						let rankingJson = {};
+						if (lists[i].employee_name) {
+							arr = true;
+						} else {
+							arr = false;
+							rankingJson.employee_id = lists[i].employee_id;
+							rankingJson.employee_img_url = lists[i].img_url;
+							rankingJson.employee_name = lists[i].name;
+							rankingJson.point = lists[i].point;
+							rankingJson.rank = lists[i].rank;
+							rankingJson.status_remark = '';
+							rankingList.push(rankingJson);
+						}
+					}
+					if (arr) {
+						this.rankingListDetails = lists;
+					} else {
+						this.rankingListDetails = rankingList;
+					}
+				})
+				.finally(() => {
+					this.addUpRankingLoad = false;
+				});
+		},
+		addUpRanking() {
+			//累计B分排名
+			let params = {
+				dept_id: 0,
+				sort: 'DESC',
+				page: 1,
+				page_size: 10,
+				pt_id: 3,
+				type: 'all',
+				index_ranking: 1
+			};
+			this.$axios('get', '/api/integral/statistics/ranking', params, 'v2')
+				.then(res => {
+					this.rankingListDetails = res.data.data.list;
+				})
+				.finally(() => {
+					this.addUpRankingLoad = false;
+				});
+		},
+		departmentOfRanking() {
+			//部门B分排名
+			this.RankingPush = '/dept_rank';
+			let params = {
+				dept_id: 0,
+				sort: 'DESC',
+				pt_id: 3,
+				time_type: 1,
+				page: 1,
+				page_size: 10,
+				position: 'all',
+				month: this.$moment().format('YYYY-MM'),
+				index_ranking: 1
+			};
+			this.$axios('get', '/api/integral/statistics/ranking', params, 'v2')
+				.then(res => {
+					this.rankingListDetails = res.data.data.list;
+				})
+				.finally(() => {
+					this.addUpRankingLoad = false;
+				});
+		},
+		rankingListname() {
+			//获取排名列表
+			this.tabPositionLoad = true;
+			let params = {
+				page: 1,
+				page_size: 7
+			};
+			this.$axios('get', '/api/integral/statistics/ranking/list', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						let lists = res.data.data.list;
+						for (let i in lists) {
+							lists[i].val = i;
+							if (lists[i].type == 'normal') {
+								lists[i].group_name = '阶段排名(月)';
+							}
+							if (lists[i].type == 'all') {
+								lists[i].group_name = '累计B分排名';
+							}
+							this.rankingList.push(lists[i]);
+						}
+
+						this.addUpRankingLoad = true;
+						this.departmentOfRanking(); //进入获取部门B分排名数据
+					} else {
+						self.$message.error(res.data.data.msg);
+					}
+				})
+				.finally(() => {
+					this.tabPositionLoad = false;
+					// self.item_loading = false;
+				});
+		},
+		tabPositions(e, item) {
+			//排行榜点击分类
+			if (e.target.tagName === 'INPUT') return;
+			if (item) {
+				this.addUpRankingLoad = true;
+			}
+			if (item.type == 'normal') {
+				this.RankingPush = '/dept_rank';
+				this.departmentOfRanking();
+			} else if (item.type == 'all') {
+				this.RankingPush = '/total_rank';
+				this.addUpRanking();
+			} else if (item.type == 'custom') {
+				this.RankingPush = '/custom_rank';
+				this.customRanking(item.target_id, item.date_interval);
+			}
+		},
+
+		//积分构成
+		dept1_null(val) {
+			let valItem = 0;
+			for (let i in val) {
+				valItem = val[i];
+			}
+			this.integralForm(valItem);
+			this.$nextTick(() => {
+				this.$refs.dept1.dropDownVisible = false;
+			});
+		},
+		integralForm(item) {
+			this.IntegralFormChartLoad = true;
+			let listslength = [];
+			let params = {};
+			if (item) {
+				(params.dept_id = item), (params.month = this.$moment().format('YYYY-MM'));
+			} else {
+				(params.dept_id = null), (params.month = this.$moment().format('YYYY-MM'));
+			}
+			if (this.employeeRout) {
+				params.employee_id = this.$getUserData().id;
+			}
+			this.$axios('get', '/api/integral/statistics/pie/b', params, 'v2')
+				.then(res => {
+					let lists = res.data.data.list;
+					listslength = lists;
+					let legendData1 = [];
+					let legendData2 = [];
+					let dadalist = [];
+					//分为两列展示
+					for (let i in lists) {
+						if (lists[i].name.length > 15) {
+							lists[i].name = lists[i].name.slice(0, 15) + '...';
+						}
+
+						//分为两列展示
+						if (i < 8) {
+							legendData1.push(lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%');
+						} else {
+							legendData2.push(lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%');
+						}
+						let dataListDx = {};
+						if (lists[i].ratio < 0) {
+							dataListDx.value = 0;
+						} else {
+							dataListDx.value = lists[i].ratio;
+						}
+						dataListDx.name = lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%';
+						dadalist.push(dataListDx);
+					}
+					this.drawLine(legendData1, dadalist); //图表
+				})
+				.finally(() => {
+					if (listslength.length == 0) {
+						this.IntegralFormnone = true;
+					} else {
+						this.IntegralFormnone = false;
+					}
+					this.IntegralFormChartLoad = false;
+				});
+		},
+		//分为两列展示,多传legendDataTwo
+		drawLine(legendDataOne, dadalist) {
+			const chart = this.$refs.IntegralFormChart;
+			//此处可给固定颜色,不给就所有颜色随机
+			let colors = ['rgb(38, 162, 255)', '#f36f2a', '#fecb09', '#00b6bd', '#e85d53', '#fecb09', '#725197', '#fcb814', '#41a08d', '#425a95', '#ea8b84', '#9d1d62', '#fcb814'];
+			let legendDataLeng = legendDataOne.length;
+			if (legendDataLeng > colors.length) {
+				//当列表大于固定颜色时,给随机颜色
+				let colorsLeng = colors.length;
+				for (let i = 0; i <= legendDataLeng - colorsLeng; i++) {
+					colors.push('rgb(' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ')');
+				}
+			}
+
+			//只显示 N 条标题,多余隐藏,但是饼图不会隐藏
+			let DataLengths = [];
+			let left1 = '45%';
+			let left2 = '45%';
+			let leftBT = '25%';
+			if (chart) {
+				const myChart = this.$echarts.init(chart);
+				var legendData1 = legendDataOne;
+				// var legendData2 = DataLengths;
+				const option = {
+					tooltip: {
+						trigger: 'item',
+						formatter: '{b}'
+					},
+					legend: [
+						{
+							type: 'scroll',
+							orient: 'vertical',
+							icon: 'square',
+							left: left1,
+							align: 'left',
+							top: '23%',
+							itemGap: 20,
+							// bottom:'50%',
+							textStyle: {
+								fontSize: 14,
+								color: 'rgb(48, 49, 51)'
+							},
+							data: legendData1
+						}
+					],
+					color: colors,
+					grid: {
+						x: 25,
+						y: 45,
+						x2: 5,
+						y2: 20,
+						borderWidth: 1
+					},
+					toolbox: {
+						show: true,
+						feature: {
+							mark: { show: true },
+							magicType: {
+								show: true,
+								type: ['pie', 'funnel']
+							}
+						}
+					},
+					series: [
+						{
+							name: '',
+							type: 'pie',
+							radius: [20, 110],
+							center: [leftBT, '50%'],
+							roseType: 'radius',
+							label: {
+								show: false
+							},
+							emphasis: {
+								label: {
+									show: false
+								}
+							},
+							data: dadalist
+						}
+					]
+				};
+				myChart.setOption(option);
+			}
+		},
+
+		//月度积分
+		monthlyIntegralRanking(date, total, reward, deduction) {
+			const chart = this.$refs.monthlyIntegralChart;
+			if (chart) {
+				const myChart = this.$echarts.init(chart);
+				const option = {
+					tooltip: {
+						trigger: 'axis'
+					},
+					color: ['#F56C6C', '#26A2FF', '#FFC100'],
+					legend: {
+						right: '0%',
+						data: ['总积分', '奖分', '扣分']
+					},
+					grid: {
+						left: '3%',
+						right: '4%',
+						bottom: '3%',
+						containLabel: true
+					},
+					toolbox: {
+						feature: {}
+					},
+					xAxis: {
+						type: 'category',
+						boundaryGap: false,
+						data: date
+					},
+					yAxis: {
+						type: 'value',
+						axisLine: {
+							show: false
+						},
+						axisTick: {
+							show: false
+						}
+					},
+					series: [
+						{
+							name: '总积分',
+							type: 'line',
+							data: total
+						},
+						{
+							name: '奖分',
+							type: 'line',
+							data: reward
+						},
+						{
+							name: '扣分',
+							type: 'line',
+							data: deduction
+						}
+					]
+				};
+				myChart.setOption(option);
+			}
+		},
+		//月度积分
+		monthlyIntegralchange(val) {
+			if (val.length == 0) {
+				this.exclusiveMonthBranch = 0;
+			} else {
+				let valItem = 0;
+				for (let i in val) {
+					valItem = val[i];
+				}
+				this.exclusiveMonthBranch = valItem;
+			}
+			this.monthlyIntegral();
+			this.$nextTick(() => {
+				this.$refs.dept2.dropDownVisible = false;
+			});
+		},
+		monthlyIntegral() {
+			this.monthlyIntegralloading = true;
+			let params = {};
+			let listslength = [];
+			if (this.employeeRout) {
+				params.employee_id = this.$getUserData().id;
+			} else {
+				params.dept_id = this.exclusiveMonthBranch;
+			}
+			params.month = this.$moment().format('YYYY-MM');
+			if (this.exclusiveMonthChecked) {
+				params.include_fixed = 1;
+			} else {
+				params.include_fixed = 0;
+			}
+			this.$axios('get', '/api/integral/statistics/curve', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						let lists = res.data.data;
+						listslength = lists;
+						this.monthlyIntegralList[0].total_point = lists.total_point;
+						this.monthlyIntegralList[1].reward_point = lists.reward_point;
+						this.monthlyIntegralList[2].deduction_point = lists.deduction_point;
+						this.monthlyIntegralList[3].ratio = lists.ratio;
+						this.monthlyIntegralList[4].toRatio = lists.contrast_total;
+						this.monthlyIntegralList[5].toRatio = lists.contrast_reward;
+						this.monthlyIntegralList[6].toRatio = lists.contrast_deduction;
+						let dates = []; //日期
+						let totals = []; //总积分
+						let rewards = []; //奖分
+						let deductions = []; //扣分
+						for (let i in lists.total) {
+							dates.push(lists.total[i].date);
+							totals.push(lists.total[i].point);
+						}
+						for (let i in lists.reward) {
+							rewards.push(lists.reward[i].point);
+						}
+						for (let i in lists.deduction) {
+							deductions.push(lists.deduction[i].point);
+						}
+						this.monthlyIntegralRanking(dates, totals, rewards, deductions);
+					}
+				})
+				.finally(() => {
+					if (listslength.total.length == 0) {
+						this.monthlyIntegralnone = true;
+					} else {
+						this.monthlyIntegralnone = false;
+					}
+					this.monthlyIntegralloading = false;
+				});
+		},
+
+		//管理者奖扣统计
+		ManagerSAwardCharts(Name, Award, Deduct) {
+			//管理着奖扣统计表
+			const chart = this.$refs.ManagerSAwardChart;
+			if (chart) {
+				const myChart = this.$echarts.init(chart);
+				const option = {
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							// type: 'cross',
+							crossStyle: {
+								color: '#999'
+							}
+						}
+					},
+					grid: {
+						//表格偏移量
+						// top: '5% '
+						left: '5%',
+						right: '0%'
+					},
+					toolbox: {
+						feature: {
+							// dataView: {show: false, readOnly: true},
+							// magicType: {show: false, type: ['line', 'bar']},
+							// restore: {show: false},
+							// saveAsImage: {show: false}
+						}
+					},
+					color: ['#26A2FF', '#FFC100'],
+					legend: {
+						right: '0%', //设置位置
+						data: ['奖分', '扣分']
+					},
+					xAxis: [
+						{
+							type: 'category',
+							data: Name,
+							axisPointer: {
+								type: 'shadow'
+							},
+							axisLabel: {
+								interval: 0 //横轴信息全部显示
+								// rotate:-30,//-30度角倾斜显示
+							},
+							axisLine: {
+								//去掉X轴线
+								show: false
+							},
+							axisTick: {
+								//去掉X轴刻度
+								show: false
+							}
+						}
+					],
+					yAxis: [
+						{
+							type: 'value',
+							axisLabel: {
+								formatter: '{value}'
+							},
+							axisLine: {
+								//去掉Y轴线
+								show: false
+							},
+							axisTick: {
+								//去掉Y轴刻度
+								show: false
+							}
+						}
+					],
+					series: [
+						{
+							name: '奖分',
+							type: 'bar',
+							barWidth: 14, //柱图宽度
+							barGap: '0%', //柱图间距
+							data: Award
+						},
+						{
+							name: '扣分',
+							type: 'bar',
+							barWidth: 14, //柱图宽度
+							barGap: '0%', //柱图间距
+							data: Deduct
+						}
+					]
+				};
+				myChart.setOption(option);
+			}
+		},
+		ManagerSAwardlchange(val) {
+			//选中规则
+			let valItem = 0;
+			for (let i in val) {
+				valItem = val[i];
+			}
+			this.ManagerSAward(valItem);
+			this.$nextTick(() => {
+				this.$refs.dept3.dropDownVisible = false;
+			});
+		},
+		ManagerSAward(item) {
+			//管理者奖扣请求
+			this.ManagerSAwardloading = true;
+			let params = {};
+			let listslength = [];
+			if (item) {
+				(params.dept_id = item), (params.month = this.$moment().format('YYYY-MM'));
+			} else {
+				(params.dept_id = 0), (params.month = this.$moment().format('YYYY-MM'));
+			}
+			this.$axios('get', '/api/integral/statistics/task/pie', params, 'v2')
+				.then(res => {
+					let datas = res.data.data;
+					listslength = datas.list;
+					let histogramName = [];
+					let histogramAward = [];
+					let histogramDeduct = [];
+					for (let i in datas.list) {
+						histogramName.push(datas.list[i].name);
+						histogramAward.push(datas.list[i].reward_point);
+						histogramDeduct.push(datas.list[i].deduction_point);
+					}
+					this.ManagerSAwardlList[0].val = datas.reward_point;
+					this.ManagerSAwardlList[1].val = datas.deduction_point;
+					this.ManagerSAwardlList[2].val = datas.ratio;
+					this.ManagerSAwardlList[3].val = datas.exec_count;
+					this.ManagerSAwardlList[4].val = datas.manager_count;
+					this.ManagerSAwardlList[5].val = datas.pass_count;
+					this.ManagerSAwardlList[6].val = datas.fail_count;
+					this.ManagerSAwardCharts(histogramName, histogramAward, histogramDeduct);
+				})
+				.finally(() => {
+					if (listslength.length == 0) {
+						this.ManagerSAwardnone = true;
+					} else {
+						this.ManagerSAwardnone = false;
+					}
+					this.ManagerSAwardloading = false;
+				});
+		},
+
+		//奖扣分最高积分事件
+		highestPrizeBuckle() {
+			this.highestPrizeBuckleloading = true;
+			let params = {
+				time_type: '1',
+				pt_id: '3',
+				page: '1',
+				page_size: '1'
+			};
+			this.$axios('get', '/api/integral/statistics/prize/buckle/ranking', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						if (res.data.data.prize.length != 0) {
+							this.prize = res.data.data.prize[0];
+						} else {
+							this.prize = [];
+						}
+						if (res.data.data.buckle.length != 0) {
+							this.buckle = res.data.data.buckle[0];
+						} else {
+							this.buckle = [];
+						}
+					}
+				})
+				.finally(() => {
+					this.highestPrizeBuckleloading = false;
+				});
+		},
+
+		//获取部门
+		getDepartment() {
+			this.$axios('get', '/api/department/tree').then(res => {
+				this.dept_tree = this.getTreeData(res.data.data.list);
+			});
+		},
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i]._child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i]._child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i]._child);
+				}
+			}
+			return data;
+		}
+	},
+	beforeDestroy() {
+		//离开路由
+		window.removeEventListener('resize', this.selfAdaption); //取消echarts自适应
+	}
+};
+</script>
+
+<style scoped="scoped" lang="scss">
+.zb:hover{
+	color: #089fff;
+}	
+.ts {
+	height: 64px;
+	padding: 8px 16px;
+	font-size: 14px;
+	color: #089fff;
+	background: #e6f3ff;
+	font-weight: 500;
+	box-sizing: border-box;
+	margin-bottom: 10px;
+}
+.ts img {
+	width: 24px;
+	height: 24px;
+}
+.ts .flex-1 {
+	padding: 0 8px;
+}
+.ts .btn {
+	width: 94px;
+	height: 28px;
+	background-color: #089fff;
+	line-height: 28px;
+	font-size: 14px;
+	color: #fff;
+	border-radius: 3px;
+	cursor: pointer;
+	text-align: center;
+}
+
+.updateNotice ::v-deep .el-dialog {
+	border-radius: 10px;
+	.el-dialog__header {
+		padding: 13px 20px;
+		text-align: center;
+		background-color: #3193fc;
+		border-radius: 8px 8px 0 0;
+		.el-dialog__title {
+			font-size: 16px;
+			color: #fff;
+		}
+		.el-icon-close {
+			color: #fff;
+		}
+	}
+	.el-dialog__body {
+		padding: 20px 20px 30px 20px;
+	}
+	.el-dialog__footer {
+		.dialog-footer {
+			.is-round {
+				padding: 10px 19px;
+				border-radius: 15px;
+			}
+		}
+	}
+}
+
+.refresh {
+	margin-top: 100px;
+	width: 100px;
+}
+.noData {
+	text-align: center;
+	position: fixed;
+	left: 0;
+	top: 0;
+	right: 0;
+	bottom: 0;
+}
+.data-all {
+	margin-bottom: 10%;
+	color: #595959;
+}
+// .left-all-style{
+// 	background: #fff;
+// 	border-radius: 5px;
+//     margin: 20px 0 20px 0;
+// 	.title{
+// 		padding-left: 10px;
+// 		font-size: 16px;
+// 		font-weight: normal;
+// 		border-left: 2px solid #409EFF;
+// 	}
+// }
+.left-all-style {
+	margin-top: 10px;
+	padding: 20px;
+	background: #fff;
+	border-radius: 5px;
+	.title {
+		padding-left: 10px;
+		font-size: 16px;
+		font-weight: normal;
+		border-left: 2px solid #409eff;
+	}
+	.titledes {
+		display: block;
+		padding-top: 10px;
+		font-size: 14px;
+		color: #909399;
+	}
+	.noremind {
+		display: block;
+		text-align: right;
+		font-size: 12px;
+		color: #909399;
+		cursor: pointer;
+	}
+	.noremind:hover {
+		color: #409eff;
+	}
+	.noremind:active {
+		color: #409eff;
+	}
+}
+.right-all-style {
+	background: #fff;
+	border-radius: 5px;
+	margin: 0 0 10px 10px;
+	.title {
+		padding-left: 10px;
+		font-size: 16px;
+		font-weight: normal;
+		border-left: 2px solid #409eff;
+	}
+}
+
+.home-left-header {
+	background: #fff;
+	border-radius: 5px;
+	// border:1px #e1e4e7 solid;
+	// box-shadow: 0 2px 4px rgba(140,140,140,0.1);
+	.hlheader-user {
+		border-right: 1px #cecccc solid;
+		margin: 34px 0;
+	}
+	.hlheader-user-info .greetings div {
+		max-width: 95px;
+		display: inline-block;
+		overflow: hidden;
+		white-space: nowrap;
+		text-overflow: ellipsis;
+		vertical-align: top;
+	}
+	.hlheader-user-info {
+		display: flex;
+		.headimg {
+			margin: 0 auto;
+		}
+		.headtext {
+			margin: 0 auto;
+		}
+		.greetings {
+			margin: 0 auto;
+			font-size: 16px;
+			font-weight: bold;
+			// div {
+			//   max-width: 95px;
+			//   display: inline-block;
+			//   overflow: hidden;
+			//   white-space: nowrap;
+			//   text-overflow: ellipsis;
+			//   vertical-align: top;
+			// }
+			span {
+				font-size: 14px;
+				color: #666;
+				display: inline-block;
+				vertical-align: top;
+				padding-left: 5px;
+			}
+			p span {
+				line-height: 30px;
+				font-size: 14px;
+				color: #666;
+				display: inline-block;
+				vertical-align: top;
+			}
+		}
+	}
+}
+
+.nopoint_box {
+	display: inline-block;
+	text-align: center;
+	width: 100%;
+	margin-bottom: 10px;
+	.noimg {
+		display: inline-block;
+		width: 110px;
+		height: 110px;
+		margin: 22px auto 16px;
+		background: url('./assets/image/nodata_default.png') no-repeat center;
+		background-size: 99%;
+	}
+	.noperson {
+		display: inline-block;
+		width: 110px;
+		height: 110px;
+		margin: 22px auto 16px;
+		background: url('./assets/image/noperson_default.png') no-repeat center;
+		background-size: 99%;
+	}
+	.title1 {
+		display: block;
+		text-align: center;
+		font-size: 12px !important;
+		color: #909399 !important;
+		padding: 0;
+	}
+	a {
+		color: #26a2ff;
+	}
+}
+.ManagerSAwardlStyle {
+	text-align: center;
+	display: block;
+	cursor: pointer;
+	b {
+		color: #303133;
+		font-size: 18px;
+		transition: all 0.5s;
+	}
+	span {
+		color: rgb(48, 49, 51);
+		font-size: 14px;
+		margin-top: 5px;
+		display: block;
+	}
+}
+.ManagerSAwardlStyle:hover .ManagerSAwardlStyleB {
+	color: #4eb2ff;
+}
+
+::v-deep .el-radio-button__inner {
+	border: 0px solid #dcdfe6;
+	border-radius: 5px;
+	padding: 0px 18px;
+	height: 36px;
+	line-height: 38px;
+}
+::v-deep .el-radio-button--medium .el-radio-button__inner {
+	padding: 7px 13px;
+}
+.el-radio-button:first-child ::v-deep .el-radio-button__inner {
+	border: 0px solid #dcdfe6;
+	border-radius: 5px;
+}
+.el-radio-button:last-child ::v-deep .el-radio-button__inner {
+	border-radius: 5px;
+}
+
+.rightexamineAndApproveList {
+	text-align: left;
+	width: 100%;
+	// border-bottom:1px solid #EFEFEF;
+}
+.rightexamineAndApproveList2 {
+	text-align: left;
+	width: 100%;
+	border-bottom: 1px solid #efefef;
+}
+.inCommonUseStyle {
+	width: 95%;
+	height: 54px;
+	border: 1px solid #c0c4cc;
+	display: block;
+	margin: 16px 0 0 10px;
+	display: flex;
+	line-height: 54px;
+	border-radius: 5px;
+	cursor: pointer;
+	transition: all 0.5s;
+}
+.inCommonUseStyle b {
+	transition: all 0.5s;
+	color: #303133;
+	font-size: 14px;
+}
+.inCommonUseStyle:hover {
+	background-color: #fcfcfc;
+	border: 1px solid #409eff;
+}
+.inCommonUseStyle:hover b {
+	color: #409eff;
+}
+.announs {
+	padding: 0 0 10px 0;
+	border: 1px solid rgb(236, 236, 236);
+	border-radius: 10px;
+	overflow: hidden;
+	cursor: default;
+	// min-height: calc(60vh - 160px);
+	margin: 10px 0 0 0;
+}
+::v-deep .announDetails {
+	// max-height: 410px;
+	// overflow-y: auto;
+	// *{
+	// 	color: #8c8c8c !important;
+	// }
+	// img{
+	// 	width: 100% !important;
+	// }
+}
+.announDetails {
+	max-height: 410px;
+	overflow-y: auto;
+}
+.announDetails::-webkit-scrollbar {
+	width: 9px;
+	height: 9px;
+}
+.announDetails::-webkit-scrollbar-track {
+	width: 6px;
+	background-color: #fff0;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+.announDetails::-webkit-scrollbar-thumb {
+	background-color: #fff0;
+	background-clip: padding-box;
+	min-height: 28px;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+.announDetails:hover::-webkit-scrollbar-thumb {
+	overflow-x: none;
+	background-color: rgba(144, 147, 153, 0.3);
+}
+.announcementc {
+	display: block;
+	text-align: right;
+	font-size: 13px;
+	color: #909399;
+	cursor: pointer;
+}
+.announcementc:hover {
+	color: #409eff;
+}
+.announcementc:active {
+	color: #409eff;
+}
+</style>

+ 9 - 0
src/icons/index.js

@@ -0,0 +1,9 @@
+import Vue from 'vue'
+import SvgIcon from '@/components/SvgIcon'// svg组件
+
+// register globally
+Vue.component('svg-icon', SvgIcon)
+
+const req = require.context('./svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys().map(requireContext)
+requireAll(req)

File diff suppressed because it is too large
+ 0 - 0
src/icons/svg/approval_process.svg


+ 1 - 0
src/icons/svg/droparrows.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1605949605572" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9653" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M134.5 722.8L457.29999999 993.3c30.09999999 25 79.2 25 109.30000001 0L889.4 722.79999999c48.1-40.90000001 14-110.8-54.1-110.79999999L712 612l0-500.1c0-54.9-45.1-99.8-100.3-99.8l-200.5 0c-55.1 0-100.3 44.9-100.3 99.8L310.9 612l-122.3-1e-8c-68.1 0-102.2 69.8-54.1 110.80000001z" p-id="9654" fill="#FF9600"></path></svg>

+ 1 - 0
src/icons/svg/first.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1605772055738" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9871" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 476.1C293 476.1 103.9 398 12 329l61.3 310.5h877.4L1012 329c-91.9 69.7-281.5 147.1-500 147.1z" fill="#FCA83A" p-id="9872"></path><path d="M793.5 494.1C576.1 494.1 512 72.6 512 72.6S447.3 494 230.5 494C61.6 494.1 12 329 12 329l109.3 541.2c257 60.7 524.5 60.7 781.5 0L1012 329s-49.6 165.1-218.5 165.1z" fill="#F0EA3F" p-id="9873"></path><path d="M793.5 525.8C576.1 525.8 512 100.5 512 100.5s-64.1 425.3-281.5 425.3C61.6 525.8 12 329 12 329l109.3 576.4c257 61.3 524.5 61.3 781.5 0L1012 329s-49.6 196.8-218.5 196.8z" fill="#FDCF47" p-id="9874"></path><path d="M494.4 868.5V603.3l-67.1 58.8v-64.7l67.1-58.8H555v330.8h-60.6z" fill="#FF5400" p-id="9875"></path></svg>

+ 2 - 0
src/icons/svg/leadErrRed.svg

@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1627465068129" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11092" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2") format("woff2"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff") format("woff"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf") format("truetype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont") format("svg"); }
+</style></defs><path d="M768.4 705.5c17.7 18 17.5 47-0.5 64.7-8.5 8.4-20 13.1-32 13.1-12.1 0-23.8-4.8-32.3-13.4L511.6 577l-195 192.2c-8.5 8.5-20 13.3-32.1 13.2-25.3-0.3-45.5-21.1-45.2-46.3 0.1-11.9 4.9-23.3 13.3-31.7l195.1-192.2-192.8-195c-18.4-17.5-19.2-46.6-1.7-65s46.6-19.1 65-1.7c0.5 0.5 1.1 1 1.6 1.6l192.7 195.1L707.7 255c18.4-17.5 47.5-16.7 65 1.7 16.9 17.8 16.9 45.6-0.1 63.4l-196 193.6 191.8 191.8zM512 12C235.9 12 12 235.8 12 511.9 12 788 235.7 1011.8 511.8 1012c276.1 0.1 500-223.7 500.2-499.8 0.3-276-223.5-499.9-499.8-500.2h-0.2z" p-id="11093" fill="#f7522d"></path></svg>

+ 2 - 0
src/icons/svg/leadJgRed.svg

@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1627465661569" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11312" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2") format("woff2"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff") format("woff"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf") format("truetype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont") format("svg"); }
+</style></defs><path d="M448.7 214.7h110.4l-20.3 452.2H469l-20.3-452.2zM503.5 719c19.4 0 35 5.9 46.8 17.7 12.4 11.2 18.5 26.2 18.5 45 0 18.3-6.2 33.6-18.5 45.9-13.5 11.8-29.1 17.7-46.8 17.7-17.7 0-32.7-6.2-45-18.5-13-12.4-19.4-27.4-19.4-45 0-18.8 6.5-33.9 19.4-45 11.7-11.9 26.7-17.8 45-17.8zM512 12C235.9 12 12 235.8 12 511.9 12 788 235.7 1011.8 511.8 1012c276.1 0.1 500-223.7 500.2-499.8 0.3-276-223.5-499.9-499.8-500.2h-0.2z" p-id="11313" fill="#f7522d"></path></svg>

+ 2 - 0
src/icons/svg/leadThenGreen.svg

@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1627464937031" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10918" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2") format("woff2"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff") format("woff"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf") format("truetype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont") format("svg"); }
+</style></defs><path d="M798.7 382.4L475.1 705.8c-17.4 18-46.1 18.4-64 1l-1-1L224 519.6c-18-18-18-47.1 0-65 18-18 47.1-18 65 0l154.3 154.3 291.3-290.2c17.8-18.1 46.9-18.3 65-0.5s18.3 46.9 0.5 65l-0.5 0.5-0.9-1.3zM511.8 12C235.7 12.1 12 236 12 512.1S235.8 1012 511.9 1012c276.1 0 499.9-223.7 500.1-499.8 0.1-276.1-223.7-500.1-499.8-500.2h-0.4z" fill="#2cb536" p-id="10919"></path></svg>

+ 1 - 0
src/icons/svg/litrearrows.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1605947039146" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11870" width="200" height="200" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M889.5 301.2L566.7 30.7c-30.1-25-79.2-25-109.3 0L134.6 301.2c-48.1 40.9-14 110.8 54.1 110.8H312v500.1c0 54.9 45.1 99.8 100.3 99.8h200.5c55.1 0 100.3-44.9 100.3-99.8V412h122.3c68.1 0 102.2-69.8 54.1-110.8z" p-id="11871" fill="#53B87F"></path></svg>

+ 1 - 0
src/icons/svg/secondPlace.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1605772074593" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10137" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512.3 476.2c-218.9 0-407.8-78-499.7-147l61.3 310.3h876.8l61.3-310.3c-92 69.5-281.4 147-499.7 147z" fill="#999999" p-id="10138"></path><path d="M793.6 494.1c-217.2 0-281.3-421.2-281.3-421.2s-64.7 421.2-281.9 421.2c-168.8 0-218.4-165-218.4-165L121.2 870c256.8 60.7 524.2 60.7 781 0l109.2-540.9c0.6 0-49 165-217.8 165z" fill="#F4F4F4" p-id="10139"></path><path d="M793.6 525.8c-217.2 0-281.3-425-281.3-425s-64.1 425-281.3 425c-168.8 0-218.4-196.6-218.4-196.6l109.2 576c256.8 61.3 524.2 61.3 781 0l109.2-576c0-0.1-49.6 196.6-218.4 196.6z" fill="#D7D7D7" p-id="10140"></path><path d="M404.6 856.8v-59.1L539 641.5c13.1-15.7 18.8-26.8 18.8-43.4 0-26.8-15.7-44.9-43.4-44.9-21.6 0-43.9 11.1-43.9 46h-65.7c0-65.7 47.9-105 109.6-105 63.6 0 109.2 39.9 109.2 104.5 0 34.8-13.6 53.5-38.3 82.4L484.6 797.8h138.8v59.1H404.6v-0.1z" fill="#666666" p-id="10141"></path></svg>

+ 1 - 0
src/icons/svg/third.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1605772078894" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10270" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 476.2c-219 0-408.1-78.1-500-147.1l61.3 310.5h877.4l61.3-310.5c-91.9 69.6-281 147.1-500 147.1z" fill="#F28C3C" p-id="10271"></path><path d="M793.5 494.1C576.1 494.1 512 72.6 512 72.6S447.9 494 230.5 494C61.6 494.1 12 329 12 329l109.3 541.2c257 60.8 524.5 60.8 781.5 0L1012 329s-49.6 165.1-218.5 165.1z" fill="#FDCF47" p-id="10272"></path><path d="M793.5 525.8C576.1 525.8 512 100.5 512 100.5s-64.1 425.3-281.5 425.3C61.6 525.8 12 329 12 329l109.3 576.4c257 61.3 524.5 61.3 781.5 0L1012 329s-49.6 196.8-218.5 196.8z" fill="#F7A745" p-id="10273"></path><path d="M511.9 853.8c-57.5 0-111.8-30.3-112.7-104.4h64.6c0.9 31.8 22.9 46.2 48.2 46.2 27.7 0 47.6-17.3 47.6-49.2 0-29.3-17.8-48.7-49.7-48.7h-9.5v-56.1h9.5c31.4 0 44.8-19.4 44.8-44.1 0-29.8-19.9-45.2-43.2-45.2-24.3 0-42.2 15.9-43.7 42.7h-64.6c1.4-63.1 48.7-100.9 108.3-100.9 62.6 0 107.8 41.8 107.8 101.4 0 38.3-17.3 60.1-40.7 72.5 25.4 13.4 45.7 37.7 45.7 80.4-0.1 70.7-51.7 105.4-112.4 105.4z" fill="#B34900" p-id="10274"></path></svg>

+ 479 - 0
src/index.vue

@@ -0,0 +1,479 @@
+<template>
+	<el-container class="box-all" v-loading="loading">
+		<el-header>
+			<div class="flex-box" style="height: 60px;min-width: 1200px;">
+				<div class="logo-box flex-box flex-center-center" @click="openHome()">
+					<img src="./assets/image/logo.png" class="logo" />
+					<div>功道云积分制</div>
+				</div>
+				
+				<div class="flex-1 hea-right flex-box flex-v-ce" >
+					<div class="name" style="min-width: 200px;">{{ info.name }}</div>
+					<div class="flex-1 flex-box-ce font-flex-word" style="cursor: pointer;padding: 0 20px;">
+						<template v-if="$supremeAuthority()=='dept_manager'||$supremeAuthority()=='employee'">
+							<template v-if="information.name">
+								<img src="./assets/image/tz.png" style="width: 18px;height: 18px;"/>
+								<span style="max-width: 500px;padding-left: 10px;" class="font-flex-word"  @click="$router.push({path:'inform'})">{{information.name}}</span>
+							</template>
+						</template>
+						<div v-else  class="flex-box-ce" >
+							<img src="./assets/image/tz.png" style="width: 18px;height: 18px;"/>
+							<template v-if="information.name">
+								<span style="max-width: 500px;padding-left: 10px;" class="font-flex-word"  @click="$router.push({path:'inform'})">{{information.name}}</span>
+							</template>
+							<span v-else style="padding: 0 10px;cursor: pointer;color: #606266;"  @click="$router.push({path:'inform'})">暂无公告,点击此处添加公告</span>
+						</div>
+					</div>
+					<div class="flex-box flex-v-ce">
+						<div>
+							您当前为
+							<span class="blue">"{{ corpMessage.package_name }}"</span>
+							,有效期至
+							<span style="color:#FF9600">{{ corpMessage.expire_time }}</span>
+						</div>
+						<el-button size="small" @click="isTz = true" class="upgrade" type="primary" icon="el-icon-upload">续费升级</el-button>
+						<el-tooltip class="item" effect="dark" content="设置向导" placement="bottom" v-if="!this.$authoritys('employee') && !this.$authoritys('dept_manager')">
+							<img src="./assets/image/wn.png" class="wn" @click="showWn" />
+						</el-tooltip>
+						<userImage :user_name="userData.name" :img_url="userData.img_url" width="44px" height="44px"></userImage>
+					</div>
+				</div>
+			</div>
+		</el-header>
+		<el-container class="main">
+			<el-aside>
+				<el-menu :default-active="defaultActive" class="el-menu-vertical-demo" :router="true" @select="activeRouter" :unique-opened="true">
+					<template v-for="(item, index) in routers">
+						<div v-if="item.children.length != 0" :key="index">
+							<template v-if="item.children.length >= 1 && item.name != '首页'">
+								<template v-if="item.name=='福利'">
+									<el-submenu :index="index.toString()" :key="index" v-if="returnConfig">
+										<template slot="title">
+											<span class="iconfont titleIcon" :class="item.icon" style="font-size: 20px;"></span>
+											<span style="margin-left: 5px;">{{ item.name }}</span>
+										</template>
+										<template v-for="(item2, index2) in item.children">
+											<el-menu-item :index="returnIndex(index, index2)" :ref="item2.path" :route="item2.path" :key="index2" class="font-flex-word">
+												<span slot="title" style="margin-left: 10px;width:120px">{{ item2.name }}</span>
+											</el-menu-item>
+										</template>
+									</el-submenu>
+								</template>
+								<el-submenu :index="index.toString()" :key="index" v-else>
+									<template slot="title">
+										<span class="iconfont titleIcon" :class="item.icon" style="font-size: 20px;"></span>
+										<span style="margin-left: 5px;">{{ item.name }}</span>
+									</template>
+									<template v-for="(item2, index2) in item.children">
+										<el-menu-item :index="returnIndex(index, index2)" :ref="item2.path" :route="item2.path" :key="index2" class="font-flex-word">
+											<span slot="title" style="margin-left: 10px;width:120px">{{ item2.name }}</span>
+										</el-menu-item>
+									</template>
+								</el-submenu>
+							</template>
+							<el-menu-item :index="returnIndex(index, index)" :route="item.children[0].path" :ref="item.children[0].path" v-else>
+								<span class="iconfont titleIcon" :class="item.icon" style="font-size: 20px;"></span>
+								<span slot="title" style="margin-left: 5px;">{{ item.children[0].name }}</span>
+							</el-menu-item>
+						</div>
+					</template>
+				</el-menu>
+			</el-aside>
+			<el-main>
+				<router-view />
+				<div class="fontColorF" style="text-align: center;margin: 10px 0;">Copyright © 2021 广东功道云数字科技有限公司 All Rights Reserved</div>
+			</el-main>
+		</el-container>
+		<!-- 续费升级 -->
+		<el-dialog class="续费升级" :visible.sync="isTz" width="400px">
+			<div style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 276px;box-sizing: border-box;margin: 0 auto;">
+				<img src="./assets/image/code.png" />
+			</div>
+			<div class="fontColorF" style="text-align: center;margin-top: 15px;font-size: 18px;">手机钉钉扫码,付费升级</div>
+		</el-dialog>
+		<el-dialog title="设置向导" :visible.sync="wn_show" width="600px">
+			<div v-if="routers_one[0]">
+				<div class="wn-title fontColorF">三步轻松搭建积分管理体系:定人员、分责权、建制度</div>
+				<div class="flex-box flex-v-ce wn-box">
+					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(0)">
+						<div><span class="iconfont " :class="routers_one[0].meta.icon"></span></div>
+						<div>1、确定{{ routers_one[0].name }}</div>
+					</div>
+					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(1)">
+						<div><span class="iconfont " :class="routers_one[1].meta.icon"></span></div>
+						<div>2、分配{{ routers_one[1].name }}</div>
+					</div>
+					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(2)">
+						<div><span class="iconfont " :class="routers_one[2].meta.icon"></span></div>
+						<div>3、建立{{ routers_one[2].name }}</div>
+					</div>
+				</div>
+			</div>
+			<div v-if="routers_one[0]">
+				<div class="wn-title fontColorF">更有效地做好积分激励和认可,你还可以设置以下3项</div>
+				<div class="flex-box flex-v-ce wn-box">
+					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(3)">
+						<div><span class="iconfont " :class="routers_one[3].meta.icon"></span></div>
+						<div>{{ routers_one[3].name }}</div>
+					</div>
+					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(4)">
+						<div><span class="iconfont " :class="routers_one[4].meta.icon"></span></div>
+						<div>{{ routers_one[4].name }}</div>
+					</div>
+					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(5)">
+						<div><span class="iconfont " :class="routers_one[5].meta.icon"></span></div>
+						<div>{{ routers_one[5].name }}</div>
+					</div>
+				</div>
+			</div>
+		</el-dialog>
+	</el-container>
+</template>
+
+<script>
+import { createSocket,sendWSPush,sendPing } from './api/websocket'
+import { removeCache } from './api/auth'
+export default {
+	data() {
+		return {
+			loading: false,
+			userData: {},
+			routers: [],
+			routers_one: [],
+			info: {},
+			wn_show: false,
+			defaultActive: '0-0',
+			isShowWn: true,
+			isTz: false,
+			direction: 'rtl',
+			corpMessage: {} ,//企业套餐信息
+			information:{name:''},
+		};
+	},
+	watch: {
+		$route(to, from) {
+			var str = to.path;
+			this.routers.map((item, index) => {
+				if (item.children.length > 0) {
+					item.children.map((item2, index2) => {
+						if (item2.path == str) {
+							this.defaultActive = index + '-' + index2;
+							this.$setCache('path', index + '-' + index2);
+						}
+					});
+				}
+			});
+			if(this.$getCache('inform')){
+				this.getInform()
+				removeCache('inform')
+			}
+		}
+	},
+	computed:{
+		returnConfig(){
+			return this.$store.getters.config.shop_status==1;
+		}
+	},
+	created() {
+		this.cheakAx();
+		this.initRouter();
+		this.getEmployee()//缓存人员列表
+		this.getInform();
+	},
+	mounted() {
+		this.getTypes();
+		this.getInfo();
+		var url = window.location.href;
+		var str = this.GetRequest(url).corpId || '123';
+		var corpId = str.split('#')[0];
+		if (corpId) {
+			this.getCorp(corpId);
+		}
+		this.$nextTick(function() {
+			if (!this.$authoritys('employee') && !this.$authoritys('dept_manager')) {
+				if (this.$getCache('wn_show')) {
+					this.wn_show = false;
+					this.isShowWn = false;
+				} else {
+					this.wn_show = true;
+					this.$setCache('wn_show', 'true');
+				}
+			}
+		});
+	},
+	methods: {
+		openWebSocket(){
+			// 接收消息
+			const getsocketData = e => {  // 创建接收消息函数
+			  const data = e && e.detail.data
+			  console.log(data)
+			}
+			// 注册监听事件
+			window.addEventListener('onmessageWS', getsocketData)
+			
+			// 在需要的时候卸载监听事件,比如离开页面
+			window.removeEventListener('onmessageWS', getsocketData)
+		},
+		getInform(){
+			let params = {
+				page: 1,
+				page_size: 1
+			};
+			this.$axios('get', '/api/information/index', params).then(res => {
+				if (res.data.code == 1) {
+					let data= res.data.data;
+					if(data[0]){
+						this.information=data[0]
+					}else{
+						this.information={name:''};
+					}
+					
+				}
+			});
+		},
+		async cheakAx(name) {
+		   await this.$axios('get', '/api/integral/site/config').then(res => {
+				this.$store.dispatch('setConfig', res.data.data);
+			})
+		},
+		initRouter() {
+			this.routers = [
+				{ name: '首页', children: this.returnRoutersArr('home'), icon: 'icon-shouye' },
+				{ name: 'A/B分', children: this.returnRoutersArr('abPoint'), icon: 'icon-PC_gongzuotai_ABfen' },
+				{ name: '任务', children: this.returnRoutersArr('task'), icon: 'icon-kaoqin_kaoqinyuebaobiao' },
+				{ name: '统计', children: this.returnRoutersArr('ranking'), icon: 'icon-dingdingPC_tongji1' },
+			];
+			//this.$authoritys('权限名') 判断权限
+			if (this.$authoritys('creator') || this.$authoritys('admin') || this.$authoritys('point_manager') || this.$authoritys('dept_manager')) {
+				this.routers.splice(3, 0, { name: '审批', children: this.returnRoutersArr('workbench'), icon: 'icon-shezhi_jifenguize' });
+			}
+			if (this.$authoritys('creator') || this.$authoritys('admin') || this.$authoritys('point_manager')) {
+				this.routers.push({ name: '福利', children: this.returnRoutersArr('welfare'), icon: 'icon-fulizhongxin'});
+				this.routers.push({ name: '设置', children: this.returnRoutersArr('set'), icon: 'icon-dingdingPC_shezhi1' });
+			}
+			//this.returnRoutersArr('set',true) 加true表示不限制路由
+			this.routers_one = this.returnRoutersArr('set', true);
+			this.userData = this.$getUserData();
+			if (this.$route.path != '/home') {
+				//当刷新页面是控制左边导航栏的选中
+				this.defaultActive = this.$getCache('path');
+			}
+		},
+		openHome() {
+			this.$router.push({ path: '/home' });
+		},
+		GetRequest(urlStr) {
+			if (typeof urlStr == 'undefined') {
+				var url = decodeURI(location.search); //获取url中"?"符后的字符串
+			} else {
+				var url = '?' + urlStr.split('?')[1];
+			}
+			var theRequest = new Object();
+			var strs;
+			if (url.indexOf('?') != -1) {
+				var str = url.substr(1);
+				strs = str.split('&');
+				for (var i = 0; i < strs.length; i++) {
+					theRequest[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1]);
+				}
+			}
+			return theRequest;
+		},
+		//获取套餐信息
+		getCorp(corpId) {
+			this.$axios('get', 'api/order/corp', { corp_id: corpId }).then(res => {
+				this.corpMessage = res.data.data;
+			});
+		},
+		//当刷新页面是控制左边导航栏的选中
+		activeRouter(index, indexPath) {
+			this.$setCache('path', indexPath[1] ? indexPath[1] : indexPath[0]);
+		},
+		routerAstrict(data) {
+			//限制路由
+			let obj = [];
+			let supAuthority = this.$supremeAuthority(); //$supremeAuthority获取当前登录者的最高权限
+			data.forEach(item => {
+				if (!item.hidden) {
+					if (!item.meta.jurisdiction) {
+						obj.push(item);
+					} else {
+						if (item.meta.jurisdiction.indexOf(supAuthority) == -1) {
+							obj.push(item);
+						}
+					}
+				}
+			});
+			return obj;
+		},
+		returnRoutersArr(str, bool) {
+			var routers = this.$router.options.routes[0].children;
+			var routersArr = [];
+			routers.forEach(item => {
+				if (item.meta.groupCode == str) {
+					//获取对应模块的路由
+					routersArr.push(item);
+				}
+			});
+			if (bool) {
+				return routersArr;
+			}
+			return this.routerAstrict(routersArr);
+		},
+		returnIndex(str, str2) {
+			return str + '-' + str2;
+		},
+		openView(e) {
+			this.wn_show = false;
+			this.isShowWn = false;
+			this.$router.push({ path: this.routers_one[e].path });
+		},
+		showWn() {
+			this.wn_show = true;
+		},
+		getInfo() {
+			var that = this;
+			this.$axios('get', '/api/site/info').then(res => {
+				that.info = res.data.data;
+			});
+		},
+		getTypes() {
+			var that = this;
+			this.$axios('get', '/api/integral/types').then(res => {
+				that.$setTyps(res.data.data.list);
+			});
+		},
+		//获取员工列表
+		getEmployee() {
+			this.$axios('get', '/api/employee/index', { dept_id: 0, page: 1, page_size: 3000,is_official:1 }).then(res => {
+				let map={};
+				res.data.data.list.map(item=>{
+					 map[item.id]=item
+				})
+				this.$setCache("userList",map)
+			})
+		},
+	},
+};
+</script>
+
+<style scoped="scoped" lang="scss">	
+.wn-box {
+	padding: 20px 0;
+}
+.wn-box .flex-1 {
+	cursor: pointer;
+}
+.wn-box .flex-1 div:nth-child(1) {
+	width: 55px;
+	height: 55px;
+	border-radius: 50%;
+	text-align: center;
+	line-height: 55px;
+	background-color: #e0f2ff;
+	color: #26a2ff;
+	margin-bottom: 20px;
+}
+.wn-box .flex-1 div:nth-child(2) {
+	width: 110px;
+	border-radius: 25px;
+	border: 1px solid #26a2ff;
+	padding: 7px 10px;
+	text-align: center;
+	color: #26a2ff;
+}
+.wn-box .flex-1:hover div:nth-child(1) {
+	color: #fff;
+	background-color: #26a2ff;
+}
+
+.wn-box .flex-1:hover div:nth-child(2) {
+	color: #fff;
+	background-color: #26a2ff;
+}
+.el-menu-vertical-demo:not(.el-menu--collapse) {
+	width: 180px;
+	// min-height: 400px;
+}
+.el-header {
+	background-color: #fff;
+	// line-height: 60px;
+	padding: 0 !important;
+	border-bottom: 1px solid #f1f1f1;
+}
+.el-menu {
+	overflow: hidden;
+	border: none;
+}
+.el-aside {
+	transition: width 0.28s;
+	width: 180px !important;
+	background-color: #fff;
+	height: calc(100vh - 60px);
+}
+.el-aside::-webkit-scrollbar {
+	width: 0px;
+	background-color: #fff;
+}
+
+.el-aside::-webkit-scrollbar-thumb {
+	background-color: #ccc;
+}
+.con_nav_left {
+	background: #fff;
+	overflow-y: scroll;
+}
+.box-all {
+	height: 100%;
+	overflow: hidden;
+}
+.el-main {
+	background-color: #f4f6f9;
+	height: calc(100vh - 60px);
+	overflow-y: scroll;
+	padding: 10px;
+	min-width: 1000px;
+}
+.el-main::-webkit-scrollbar {
+	width: 3px;
+	height: 10px;
+	background-color: #fff;
+}
+.el-main::-webkit-scrollbar-thumb {
+	background-color: #d9d9d9;
+}
+.logo-box {
+	width: 180px;
+	cursor: pointer;
+}
+.logo-box .logo {
+	width: 30px;
+	height: 30px;
+	margin-right: 5px;
+	border-radius: 6px;
+}
+.logo-box div {
+	font-size: 16px;
+	font-weight: 600;
+}
+.wn {
+	height: 26px;
+	width: 26px;
+	margin-right: 12px;
+	cursor: pointer;
+}
+.hea-right {
+	padding: 0 20px;
+}
+.upgrade {
+	margin-left: 10px;
+	margin-right: 10px;
+}
+::v-deep .el-menu-item {
+	padding-right: 10px !important;
+}
+::v-deep .el-menu-item.is-active {
+	color: #26a2ff;
+	background-color: #ecf5ff;
+}
+</style>

+ 363 - 0
src/inform.vue

@@ -0,0 +1,363 @@
+<template>
+	<div class="box boxMinHeight">
+		<header class="header flex-box-ce">
+			<div class="header-title flex-1" >
+				<div class="flex-box-ce" style="cursor: pointer;width: 200px;"  @click="$router.go(-1)">
+					<i class="el-icon-arrow-left fontColorF"></i>
+					<div class="text fontColorB font-flex-word">公告列表</div>
+				</div>
+			</div>
+			<el-button type="primary" size="small" @click="app()" v-if="$supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee'">添加</el-button>
+		</header>
+		<div class="main flex-box">
+			<div class="main-left scroll-bar">
+				<div
+					v-for="(item, index) in announcement"
+					:key="index"
+					class="font-flex-word"
+					:class="item.id == articleOne.id ? 'active' : ''"
+					@click="dept_click(item)"
+					style="height: 56px;line-height: 56px;padding: 0 10px;border-bottom: 1px solid #f1f1f1;"
+				>
+					{{ item.name }}
+				</div>
+				<noData v-show="announcement.length == 0" content="暂无数据" imgW="60%" imgH="auto" isSolt>
+					<el-button type="primary" size="small" style="margin-right: 20px;" @click="app()" v-if="$supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee'">添加</el-button>
+				</noData>
+			</div>
+			<div class="main-right flex-1" v-loading="noticeLoad">
+				<div class="title" style="position: relative;" v-if="announcement.length>0">
+					<span class="fontColorF" style="position: absolute;"> {{ articleOne.create_time ? articleOne.create_time : '' }} {{articleOne.employee_name}}发布</span>
+					<div style="font-size: 18px;padding-right: 10px;text-align: center;">{{ articleOne.name ? articleOne.name : '' }}</div>
+					<div style="position: absolute;right:20px;top:0px" v-if="$supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee'">
+						<el-button type="danger" plain size="small" @click="deteleItem">删除</el-button>
+						<el-button type="primary" plain size="small" @click="compile">编辑</el-button>
+					</div>
+				</div>
+				<div class="RuleRight scroll-bar">
+					<template v-if="aAtripOfDetails">
+						<div v-html="aAtripOfDetails"></div>
+						<el-image  :src="detaliData.file_list" style="margin-top: 20px;" :preview-src-list="[detaliData.file_list]" v-if="detaliData.file_list"/>
+					</template>
+					<noData v-else></noData>
+				</div>
+			</div>
+		</div>
+		<Suggest :visible.sync="isShowJy"  :detaliData="detaliData" :isAdd="isAdd"></Suggest>
+	</div>
+</template>
+
+<script>
+import { setCache } from '@/api/auth';
+import Suggest from '@/components/Suggest';
+export default {
+	components: { Suggest },
+	name: 'update_notice',
+	data() {
+		return {
+			articleOne: {},
+			announcement: [],
+			noticeLoad: false,
+			defaultProps: {
+				label: 'name'
+			},
+			aAtripOfDetails: '',
+			isShowJy: false,
+			detaliData:{},
+			isAdd:true,
+		};
+	},
+	created() {
+		setCache('inform', true);
+		this.noticeList();
+	},
+	methods: {
+		deteleItem() {
+			this.$confirm('此操作将永久删除该公告, 是否删除?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.$axios('POST', '/api/information/delete', {id:this.articleOne.id}).then(res => {
+					if (res.data.code == 1) {
+						this.$message.success("已删除")
+						this.noticeList();
+					}
+				});
+			}).catch(() => {});
+		},
+		compile() {
+			this.isAdd=false
+			this.isShowJy = true;
+		},
+		app() {
+			this.isAdd=true
+			this.isShowJy = true;
+		},
+		noticeList() {
+			this.articleOne={};
+			let params = {
+				page: 1,
+				page_size: 2000
+			};
+			this.$axios('get', '/api/information/index', params).then(res => {
+				if (res.data.code == 1) {
+					let list = res.data.data;
+					this.$nextTick(() => {
+						if (list[0]) {
+							this.articleOne = list[0];
+							this.announcement = list;
+						}else{
+							this.announcement = [];
+						}
+						this.noticeDetails();
+					});
+				}
+			});
+		},
+		noticeDetails() {
+			if (!this.articleOne.id) {
+				return false;
+			}
+			this.noticeLoad = true;
+			this.aAtripOfDetails='';
+			this.$axios('get', '/api/information/info', { id: this.articleOne.id })
+				.then(res => {
+					if (res.data.code == 1) {
+						this.aAtripOfDetails = res.data.data.content.html;
+						this.detaliData=res.data.data;
+					}
+				})
+				.finally(() => {
+					this.noticeLoad = false;
+				});
+		},
+		dept_click(item) {
+			this.articleOne = item;
+			this.noticeDetails();
+		}
+	}
+};
+</script>
+
+<style scoped lang="scss">
+.active {
+	color: #26a2ff;
+	background-color: #ecf5ff;
+}
+
+/* 表格 */
+table {
+	border-collapse: collapse;
+}
+table th,
+table td {
+	border: 1px solid #ccc;
+	min-width: 50px;
+	height: 20px;
+	text-align: left;
+}
+table th {
+	background-color: #f1f1f1;
+	text-align: center;
+}
+
+/* 代码块 */
+pre > code {
+	display: block;
+	border: 1px solid hsl(0, 0%, 91%);
+	border-radius: 4px 4px;
+	text-indent: 0;
+	background-color: #fafafa;
+	padding: 10px;
+	font-size: 14px;
+}
+
+/* 引用 */
+blockquote {
+	display: block;
+	border-left: 8px solid #d0e5f2;
+	padding: 10px 10px;
+	margin: 10px 0;
+	background-color: #f1f1f1;
+}
+
+/* 列表 */
+ul,
+ol {
+	margin: 10px 0 10px 20px;
+}
+::v-deep p{
+	    margin-block-start: 1em;
+	    margin-block-end: 1em;
+}
+
+/* 分割线 */
+hr {
+	display: block;
+	width: 90%;
+	margin: 20px auto;
+	border: 0;
+	height: 1px;
+	background-color: #ccc;
+}
+.header {
+	border-bottom: 1px solid #f1f1f1;
+	padding-bottom: 10px;
+	padding-right: 20px;
+}
+.header-title {
+	box-sizing: border-box;
+	position: relative;
+	width: 200px;
+}
+.el-icon-arrow-left {
+	font-size: 20px;
+}
+.header-title:hover .el-icon-arrow-left {
+	background-color: #f5f7fa;
+	color: #222;
+}
+.text {
+	font-size: 16px;
+	padding-left: 30px;
+}
+.text::before {
+	position: absolute;
+	content: '';
+	width: 1px;
+	height: 60px;
+	background-color: #ebebeb;
+	left: 34px;
+	top: 50%;
+	margin-top: -18px;
+}
+.title {
+	background-color: #fff;
+	height: 56px;
+	line-height: 56px;
+	border-bottom: 1px solid #f1f1f1;
+}
+.RuleRight {
+	height: 690px;
+	overflow-y: auto;
+	position: relative;
+}
+::v-deep .el-tree--highlight-current {
+	.el-tree-node {
+		border-bottom: 1px #f0f0f0 solid;
+	}
+	.el-tree-node__content {
+		background-color: #fff;
+		height: 56px;
+		line-height: 56px;
+	}
+	.is-current {
+		.el-tree-node__content {
+			.el-icon-caret-right {
+				// color:#409EFF !important;
+			}
+			.el-tree-node__label {
+				color: #409eff !important;
+			}
+		}
+		.el-tree-node__children {
+			.el-icon-caret-right {
+				color: #c0c4cc !important;
+			}
+			.el-tree-node__label {
+				color: #606266 !important;
+			}
+		}
+	}
+}
+.tabs ::v-deep.el-badge__content.is-fixed {
+	position: absolute;
+	top: 50%;
+	right: -2px;
+}
+.box {
+	padding: 20px;
+	font-size: 14px;
+	position: relative;
+	background-color: #fff;
+}
+.main {
+	margin-top: 30px;
+}
+/* bug: 我在flex布局的元素中使用了elementui的table组件,饿了么的table上会被加一个动态的宽度, 当第一次改变flex元素宽度的时候。table的动态宽度会变化,第二次和以后就不会变化了。*/
+/* 给使用flex的元素加上 overflow-x:hidden */
+.main-right {
+	margin-left: 20px;
+	overflow-x: hidden;
+}
+.main-left {
+	width: 200px;
+	border-radius: 3px;
+	box-sizing: border-box;
+	// padding-right: 20px;
+	max-height: 700px;
+	overflow: auto;
+}
+.main-left::after {
+	position: absolute;
+	content: '';
+	width: 1px;
+	height: auto;
+	left: 220px;
+	top: 0;
+	bottom: 0;
+	background-color: #f1f1f1;
+}
+::v-deep .has-gutter {
+	display: none;
+}
+.li {
+	height: 53px;
+	line-height: 53px;
+	padding: 0 20px;
+	border-bottom: 1px solid #f1f1f1;
+	color: #777777;
+	width: 100%;
+}
+.li:hover {
+	background-color: #f5f7fa;
+}
+.li:hover .el-icon-more {
+	display: block;
+}
+.index-name {
+	width: 170px;
+}
+.ul {
+	max-height: calc(100vh - 230px);
+	overflow: auto;
+	width: 200px;
+}
+.isActiveLi {
+	background-color: #f5f7fa;
+	color: #409eff !important;
+	position: relative;
+}
+.isActiveLi::after {
+	width: 3px;
+	content: ' ';
+	background-color: #409eff;
+	left: 0;
+	bottom: 0;
+	top: 0;
+	position: absolute;
+}
+.item {
+	font-size: 14px;
+	cursor: pointer;
+	padding: 8px;
+	border-bottom: 1px solid #e8e8e8;
+}
+.item:hover {
+	background-color: #f5f7fa;
+}
+.content {
+	padding: 0 10px;
+}
+</style>

+ 148 - 0
src/init.vue

@@ -0,0 +1,148 @@
+<template>
+	<div>
+		<div class="noData flex-box-v flex-center-center">
+			<div class="data-all">
+				<img src="./assets/image/init.gif" class="appImg" />
+				<div>管理执行难,就用功道云</div>
+				<el-button class="refresh" type="primary" :loading="disabled" :disabled="disabled" v-if="isRefresh" @click="openLogin()">{{ text }}</el-button>
+			</div>
+		</div>
+		<el-dialog title="通知" :visible.sync="dialogFormVisible" width="480px" :show-close="false" :close-on-click-modal="false">
+			<div>
+				<div style="font-size: 18px;">尊敬的用户:</div>
+				<div style="margin: 10px 0;">您当前的套餐已到期,如需继续使用,请<span @click="bundleOfServices" style="color:#409EFF;cursor:pointer;">联系客服</span>或扫描下方二维码进行续费。</div>
+			</div>
+			<div style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 276px;box-sizing: border-box;margin: 0 auto;">
+				<img src="./assets/image/code.png"/>
+			</div>
+			<div class="fontColorF" style="text-align: center;margin-top: 15px;font-size: 18px;">手机钉钉扫码,付费升级</div>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			text: '重试',
+			corpId: '',
+			isRefresh: false,
+			disabled: false,
+			showBtnCunt: 0,
+			dialogFormVisible:false
+		};
+	},
+	mounted() {
+		var url = window.location.href;
+		var str = this.GetRequest(url).corpId || '123';
+		var corpId = str.split('#')[0];
+		this.corpId = corpId;
+		if (corpId) {
+			this.login(corpId);
+		}
+	},
+	methods: {
+		bundleOfServices(){
+			this.$dd.biz.util.openSlidePanel({
+				url:"https://page.dingtalk.com/wow/dingtalk/act/serviceconversation?wh_biz=tm&showmenu=false&goodsCode=DT_GOODS_881607043109331&corpId="+this.$getCache('corpId')+"&token=5784a3e6b5e025ee891517ea814180f4",
+				title: '客服群',
+				onSuccess : function(result) {
+				},
+				onFail : function(err) {
+					console.log('onFail')
+				}
+			})
+		},
+		//重新登录
+		openLogin() {
+			var num = 10;
+			var that = this;
+			this.disabled = true;
+			this.showBtnCunt = this.showBtnCunt + 1;
+			var intterval = setInterval(function() {
+				num--;
+				if (num == 0) {
+					that.text = '重试';
+					that.disabled = false;
+					if (that.showBtnCunt >= 2) {
+						that.$alert('数据加载过慢,请联系客服', '温馨提示', {
+							confirmButtonText: '确定',
+							callback: action => {}
+						});
+					}
+					clearInterval(intterval);
+					return;
+				}
+				that.text = num;
+			}, 1000);
+			this.login(this.corpId);
+		},
+		login(corpId) {
+			var that = this;
+			this.loading = true;
+     		this.$setCache('corpId',corpId)
+			this.$dd.runtime.permission.requestAuthCode({
+				corpId: corpId, // 企业id
+				onSuccess: function(info) {
+					that.$axios('post', '/api/ding/login', { authCode: info.code, corpId: corpId }).then(res => {
+						var is = false;
+						if (res.data.code == 1) {
+							var { token, user } = res.data.data;
+							if (user.is_official==1) {
+								that.$setUserData(user);
+								that.$router.replace({ path: '/index' });
+							}else{
+								that.$router.replace({ path: '/noAccess' });
+							}
+						}else if(res.data.code==2001){
+							that.dialogFormVisible=true;
+						}
+					}).finally(() => {
+						that.loading = false;
+					});
+				}
+			});
+		},
+		GetRequest(urlStr) {
+			if (typeof urlStr == 'undefined') {
+				var url = decodeURI(location.search); //获取url中"?"符后的字符串
+			} else {
+				var url = '?' + urlStr.split('?')[1];
+			}
+			var theRequest = new Object();
+			var strs;
+			if (url.indexOf('?') != -1) {
+				var str = url.substr(1);
+				strs = str.split('&');
+				for (var i = 0; i < strs.length; i++) {
+					theRequest[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1]);
+				}
+			}
+			return theRequest;
+		},
+	}
+};
+</script>
+
+<style scoped="scoped">
+.refresh {
+	margin-top: 100px;
+	width: 100px;
+}
+.appImg {
+	width: 200px;
+	height: 200px;
+}
+.noData {
+	text-align: center;
+	position: fixed;
+	left: 0;
+	top: 0;
+	right: 0;
+	bottom: 0;
+}
+.data-all {
+	margin-bottom: 10%;
+	color: #595959;
+}
+</style>

+ 134 - 0
src/main.js

@@ -0,0 +1,134 @@
+import Vue from 'vue'
+import App from './App.vue'
+import router from './router'
+import store from './store'
+import ElementUI from 'element-ui';
+import moment from 'moment' // 时间库
+import 'element-ui/lib/theme-chalk/index.css';
+import * as dd from 'dingtalk-jsapi';
+import VConsole from 'vconsole'
+import './icons' // icon
+import axios from 'axios'
+import service from './api/axios'
+import echarts from 'echarts'
+import NProgress from 'nprogress';
+import 'nprogress/nprogress.css'
+import { getToken, setToken,getUserData,setUserData,getTyps,setTyps,getIsCreator,supremeAuthority,authoritys,getTypsName,generateUUID,getCache,setCache,removeCache} from './api/auth';
+import * as socketApi from './api/websocket'
+
+// 头像
+import userImage from '@/components/UserImage'
+import noData from '@/components/noData'
+Vue.component('userImage', userImage)
+Vue.component('noData', noData)
+Vue.use(ElementUI);
+if (process.env.NODE_ENV === 'development') {
+  new VConsole()
+}
+Vue.prototype.$echarts = echarts
+Vue.prototype.$dd = dd;
+Vue.prototype.$getToken = getToken
+Vue.prototype.$setToken = setToken
+Vue.prototype.$getUserData = getUserData
+Vue.prototype.$setUserData = setUserData
+Vue.prototype.$getTyps = getTyps
+Vue.prototype.$setTyps = setTyps
+Vue.prototype.$getTypsName = getTypsName
+Vue.prototype.$getIsCreator = getIsCreator
+Vue.prototype.$supremeAuthority = supremeAuthority
+Vue.prototype.$authoritys = authoritys
+Vue.prototype.$moment = moment
+Vue.prototype.$appId = process.env.VUE_APP_APPID
+Vue.prototype.$socketApi = socketApi   //长连接
+Vue.prototype.$generateUUID = generateUUID   //UID 唯一标识
+Vue.prototype.$getCache = getCache
+Vue.prototype.$setCache = setCache
+Vue.prototype.$removeCache = removeCache
+
+Vue.prototype.$http = service;
+var CancelToken = axios.CancelToken;
+Vue.$httpRequestList = [];
+Vue.prototype.$axios = (type, url, data,heaStr) => {
+	if(url!='/api/ding/login'&& url!='/api/integral/types'){
+	    var Accept='';
+		switch(heaStr){
+		   case 'v2':
+		     Accept='application/vnd.test.v2+json'
+		     break;
+		   case 'v3':
+		     Accept='application/vnd.test.v3+json'
+		     break;
+		   case 'v4':
+		     Accept='application/vnd.test.v4+json'
+		     break;
+		}
+		if(getToken()){
+			return new Promise((resolve, reject) => {   //封装ajax
+			    var aa = {
+			        method: type,
+			        url: url,
+					headers:{
+					  'Accept':Accept
+					},
+			        cancelToken: new CancelToken(c => {  //强行中断请求要用到的
+			            Vue.$httpRequestList.push(c);
+			        })
+			    }
+			    var json = (type == 'get') ? Object.assign(aa, { params: data }) : Object.assign(aa, { data: data });
+			    var ajax = Vue.prototype.$http(json).then(res => {
+			        resolve(res);
+			    }).catch(error => {   //中断请求和请求出错的处理
+			            if (error == "interrupt") {
+			                console.log('已中断请求');
+			                return;
+			            } else {
+			                reject(error);
+			            }
+			        })
+			    return ajax;
+			})
+		}else{return Promise.reject('无token')}
+	}else{
+		return new Promise((resolve, reject) => {   //封装ajax
+		    var aa = {
+		        method: type,
+		        url: url,
+		        cancelToken: new CancelToken(c => {  //强行中断请求要用到的
+		            Vue.$httpRequestList.push(c);
+		        })
+		    }
+		    var json = (type == 'get') ? Object.assign(aa, { params: data }) : Object.assign(aa, { data: data });
+		    var ajax = Vue.prototype.$http(json).then(res => {
+		        resolve(res);
+		    }).catch(error => {   //中断请求和请求出错的处理
+		            if (error.message == "interrupt") {
+		                console.log('已中断请求');
+		                return;
+		            } else {
+		                reject(error);
+		            }
+		        })
+		    return ajax;
+		})
+	}
+};
+
+router.beforeEach((to, from, next) => {   //路由切换检测是否强行中断,
+    NProgress.start();
+	if(Vue.$httpRequestList.length>0){        //强行中断时才向下执行
+        Vue.$httpRequestList.forEach(item=>{
+            item('interrupt');//给个标志,中断请求
+        })  
+    }
+    next();    
+});
+router.afterEach(() => {
+  NProgress.done();
+});
+
+Vue.config.productionTip = false
+new Vue({
+  router,
+  store,
+  render: h => h(App)
+}).$mount('#app')

+ 30 - 0
src/noAccess.vue

@@ -0,0 +1,30 @@
+<template>
+	<div class="noData flex-box flex-center-center">
+		<img  src="./assets/image/APP2.png" class="appImg"/>
+		<div>
+			<div>当前用户未授权进入系统,请联系管理员为您【启用积分管理】,<br/>如需咨询客服,请到您企业专属的功道云服务群咨询</div>
+		</div>
+	</div>
+</template>
+
+<script>
+</script>
+
+<style scoped="scoped">
+	.appImg{
+		width: 280px;
+		margin-right: 30px;
+	}
+	.noData{
+		text-align: center;
+		position: fixed;
+		left: 0;
+		top: 0;
+		right: 0;
+		bottom: 0;
+	}
+	.codeImg{
+		width: 200px;
+		height: 200px;
+	}
+</style>

+ 403 - 0
src/router/index.js

@@ -0,0 +1,403 @@
+import Vue from 'vue'
+import VueRouter from 'vue-router'
+
+//解决重复点击导航栏报错问题
+const originalPush = VueRouter.prototype.push
+VueRouter.prototype.push = function push(location) {
+	return originalPush.call(this, location).catch(err => err)
+}
+
+Vue.use(VueRouter)
+
+const routes = [{
+		path: '/index',
+		name: '初始页',
+		component: () => import( /* webpackChunkName: "index" */ '@/index'),
+		redirect: "home",
+		children: [{
+				path: '/home',
+				name: '首页',
+				id: '0',
+				component: () => import( /* webpackChunkName: "home" */ '@/home'),
+				meta: {
+					icon: 'icon-shezhi_zuzhijiagou',
+					groupCode: 'home',
+				}
+			},
+			{
+				path: '/inform',
+				name: '通知',
+				component: () => import( /* webpackChunkName: "award_punish" */'@/inform'),
+				meta: {
+					icon: 'icon-shezhi_zuzhijiagou',
+					groupCode: 'home',
+				}
+			},
+			{
+				path: '/award_punish',
+				name: '我奖扣的',
+				component: () => import( /* webpackChunkName: "award_punish" */'@/views/abPoint/award_punish.vue'),
+				meta: {
+					icon: 'icon-shezhi_zuzhijiagou',
+					groupCode: 'abPoint',
+					jurisdiction: ['employee'] //什么权限隐藏
+				}
+			},
+			{
+				path: '/apply_list',
+				name: '我申请的',
+				component: () => import( /* webpackChunkName: "apply_list" */ '@/views/abPoint/apply_list.vue'),
+				meta: {
+					icon: 'icon-shezhi_zuzhijiagou',
+					groupCode: 'abPoint',
+					jurisdiction: ['creator']
+				}
+			},
+			{
+				path: '/my_issue',
+				name: '我发布的',
+				component: () => import( /* webpackChunkName: "my_issue" */ '@/views/task/my_issue.vue'),
+				meta: {
+					icon: 'icon-PC_gongzuotai_renwu',
+					groupCode: 'task',
+					jurisdiction: ['employee']
+				}
+			},
+			{
+				path: '/get_task',
+				name: '领任务',
+				component: () => import( /* webpackChunkName: "get_task" */ '@/views/task/get_task.vue'),
+				meta: {
+					icon: 'icon-PC_gongzuotai_renwu',
+					groupCode: 'task',
+				}
+			},
+			{
+				path: '/my_task',
+				name: '我的任务',
+				component: () => import( /* webpackChunkName: "my_task" */ '@/views/task/my_task.vue'),
+				meta: {
+					icon: 'icon-PC_gongzuotai_renwu',
+					groupCode: 'task',
+					jurisdiction: ['creator']
+				}
+			},
+			{
+				path: '/myExamine',
+				name: '我审批的',
+				component: () => import( /* webpackChunkName: "myExamine" */ '@/views/task/myExamine'),
+				meta: {
+					icon: 'icon-PC_gongzuotai_renwu',
+					groupCode: 'task',
+					jurisdiction: ['employee'] //什么权限隐藏
+				}
+			},
+			{
+				path: '/allTask',
+				name: '全部任务',
+				component: () => import( /* webpackChunkName: "allTask" */ '@/views/task/allTask'),
+				meta: {
+					icon: 'icon-PC_gongzuotai_renwu',
+					groupCode: 'task',
+					jurisdiction: ['employee'] //什么权限隐藏
+				}
+			},
+			{
+				path: '/dept_rank',
+				name: '阶段排名',
+				component: () => import( /* webpackChunkName: "dept_rank" */ '@/views/ranking/dept_rank.vue'),
+				meta: {
+					icon: 'icon-shezhi_zuzhijiagou',
+					groupCode: 'ranking',
+				}
+			},
+			{
+				path: '/total_rank',
+				name: '累计B分排名',
+				component: () => import( /* webpackChunkName: "total_rank" */ '@/views/ranking/total_rank.vue'),
+				meta: {
+					icon: 'icon-shezhi_jiaose',
+					groupCode: 'ranking',
+				}
+			},
+			{
+				path: '/custom_rank',
+				name: '自定义分组B分排名',
+				component: () => import( /* webpackChunkName: "custom_rank" */
+					'@/views/ranking/custom_rank.vue'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'ranking',
+				}
+			},
+			{
+				path: '/each_rank',
+				name: '各项B分统计',
+				component: () => import( /* webpackChunkName: "each_rank" */
+					'@/views/ranking/each_rank.vue'),
+				meta: {
+					icon: 'icon-shezhi_jiaose',
+					groupCode: 'ranking',
+				}
+			},
+			{
+				path: '/manager_statistics',
+				name: '管理者奖扣',
+				component: () => import( /* webpackChunkName: "manager_statistics" */
+					'@/views/ranking/manager_statistics.vue'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'ranking',
+					jurisdiction: ['employee']
+				}
+			},
+			{
+				path: '/integral_event',
+				name: '积分事件',
+				component: () => import( /* webpackChunkName: "integral_event" */
+					'@/views/ranking/integral_event.vue'),
+				meta: {
+					icon: 'icon-shezhi_jifenguize',
+					groupCode: 'ranking',
+					groupName: "统计",
+				}
+			},
+			{
+				path: '/individual_statistics',
+				name: '个人统计',
+				component: () => import( /* webpackChunkName: "individual_statistics" */
+					'@/views/ranking/individual_statistics.vue'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'ranking',
+				}
+			},
+			{
+				path: '/department_statistics',
+				name: '部门统计',
+				component: () => import( /* webpackChunkName: "department_statistics" */
+					'@/views/ranking/department_statistics.vue'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'ranking',
+					jurisdiction: ['employee']
+				}
+			},
+			{
+				path: '/lotteryTicket_statistics',
+				name: '奖票统计',
+				component: () => import( /* webpackChunkName: "lotteryTicket_statistics" */
+					'@/views/ranking/lotteryTicket_statistics'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'ranking',
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
+			{
+				path: '/balanceA',
+				name: 'A分余额',
+				component: () => import( /* webpackChunkName: "balanceA" */
+					'@/views/ranking/balanceA'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'ranking',
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
+			{
+				path: '/framework',
+				name: '组织架构',
+				component: () => import( /* webpackChunkName: "framework" */ '@/views/set/framework.vue'),
+				meta: {
+					icon: 'icon-shezhi_zuzhijiagou',
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
+			{
+				path: '/jurisdiction',
+				name: '角色权限',
+				component: () => import( /* webpackChunkName: "jurisdiction" */ '@/views/set/jurisdiction.vue'),
+				meta: {
+					icon: 'icon-shezhi_jiaose',
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
+			{
+				path: '/rule',
+				name: '积分规则',
+				component: () => import( /* webpackChunkName: "rule" */ '@/views/set/rule.vue'),
+				meta: {
+					icon: 'icon-shezhi_jifenguize',
+					groupCode: 'set',
+					groupName: "设置",
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
+			{
+				path: '/initialPoint',
+				name: '初始分',
+				component: () => import( /* webpackChunkName: "initialPoint" */ '@/views/set/initialPoint.vue'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
+			{
+				path: '/check',
+				name: '考勤积分',
+				component: () => import( /* webpackChunkName: "check" */ '@/views/set/check.vue'),
+				meta: {
+					icon: 'icon-kaoqin_kaoqinyuebaobiao',
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
+			{
+				path: '/voluntarilyPoint',
+				name: '自动积分',
+				component: () => import( /* webpackChunkName: "voluntarilyPoint" */
+					'@/views/set/voluntarilyPoint.vue'),
+				meta: {
+					icon: 'icon-shezhi_zidongjifen',
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
+			{
+				path: '/log',
+				name: '日志设置',
+				component: () => import( /* webpackChunkName: "log" */ '@/views/set/log.vue'),
+				meta: {
+					icon: 'icon-shezhi_xitongpeizhi',
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
+			{
+				path: '/systemLayout',
+				name: '系统配置',
+				component: () => import( /* webpackChunkName: "systemLayout" */ '@/views/set/systemLayout.vue'),
+				meta: {
+					icon: 'icon-shezhi_xitongpeizhi',
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
+			// {
+			// 	path: '/buy',
+			// 	name: '内购',
+			// 	component: () => import( /* webpackChunkName: "buy" */ '@/views/set/buy.vue'),
+			// 	meta: {
+			// 		icon: 'icon-shezhi_xitongpeizhi',
+			// 		groupCode: 'set',
+			// 		jurisdiction: ['dept_manager', 'employee']
+			// 	}
+			// },
+			{
+				path: '/update_notice',
+				name: '公告列表',
+				component: () => import( /* webpackChunkName: "update_notice" */
+					'@/views/subassembly/update_notice.vue'),
+				hidden: true, //侧边栏隐藏
+				meta: {
+					icon: 'icon-shezhi_gongdaolbiao',
+					groupCode: 'abPoint',
+				}
+			},
+			{
+				path: '/approval_list',
+				name: '待我审批',
+				component: () => import( /* webpackChunkName: "approval_list" */
+					'@/views/workbench/approval_list.vue'),
+				meta: {
+					icon: 'icon-shezhi_gongdaolbiao',
+					groupCode: 'workbench',
+				}
+			},
+			{
+				path: '/approval_batch',
+				name: '批量审批',
+				component: () => import( /* webpackChunkName: "approval_batch" */
+					'@/views/workbench/approval_batch.vue'),
+				meta: {
+					icon: 'icon-shezhi_gongdaolbiao',
+					groupCode: 'workbench',
+				}
+			},
+			{
+				path: '/alreadySp',
+				name: '已审批',
+				component: () => import( /* webpackChunkName: "alreadySp" */
+					'@/views/workbench/alreadySp.vue'),
+				meta: {
+					icon: 'icon-shezhi_gongdaolbiao',
+					groupCode: 'workbench',
+				}
+			},
+			{
+				path: '/flBox',
+				name: '功勋点管理',
+				component: () => import( /* webpackChunkName: "flBox" */'@/views/welfare/flBox.vue'),
+				meta: {
+					icon: 'icon-shezhi_gongdaolbiao',
+					groupCode: 'welfare',
+				}
+			},
+			{
+				path: '/prize',
+				name: '奖品管理',
+				component: () => import( /* webpackChunkName: "approval_list" */'@/views/welfare/prize.vue'),
+				meta: {
+					icon: 'icon-shezhi_gongdaolbiao',
+					groupCode: 'welfare',
+				}
+			},
+			{
+				path: '/conversion',
+				name: '兑换管理',
+				component: () => import( /* webpackChunkName: "approval_list" */'@/views/welfare/conversion.vue'),
+				meta: {
+					icon: 'icon-shezhi_gongdaolbiao',
+					groupCode: 'welfare',
+				}
+			},
+		]
+	},
+	{
+		path: '/',
+		name: '初始化',
+		component: () => import( /* webpackChunkName: "init" */ '@/init'),
+	},
+	{
+		path: '/noAccess',
+		name: '无权限',
+		component: () => import( /* webpackChunkName: "noAccess" */ '@/noAccess'),
+	},
+	{
+		path: '/deptRankSwiper',
+		name: '轮播',
+		component: () => import( /* webpackChunkName: "deptRankSwiper" */ '@/views/ranking/deptRankSwiper.vue'),
+	},
+	{
+		path: '/hint',
+		name: '提示页',
+		component: () => import( /* webpackChunkName: "hint" */ '@/hint'),
+	},
+	{
+		path: '/dome',
+		name: '虚拟列表',
+		component: () => import( /* webpackChunkName: "hint" */ '@/dome'),
+	},
+]
+
+const router = new VueRouter({
+	// mode: 'history',
+	base: process.env.BASE_URL,
+	routes
+})
+
+export default router

+ 22 - 0
src/store/index.js

@@ -0,0 +1,22 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+	state: {
+		config: {}
+	},
+	getters:{
+		 config: state => state.config,
+	},
+	mutations: {
+		CONFING: (state, data) => {
+			state.config = data
+		},
+	},
+	actions: {
+		setConfig({commit}, data) {
+			commit('CONFING', data);
+		},
+	},
+})

+ 411 - 0
src/views/abPoint/apply_list.vue

@@ -0,0 +1,411 @@
+<template>
+	<div class="all padding-20">
+		<el-tabs v-model="tabs">
+			<el-tab-pane label="待审批" name="waiting"></el-tab-pane>
+			<el-tab-pane label="申请通过" name="complete"></el-tab-pane>
+			<el-tab-pane label="被驳回" name="refuse"></el-tab-pane>
+		</el-tabs>
+
+		<el-row style="margin-bottom: 15px;">
+			<el-col :span="12"><el-button type="primary" @click="dialogVisible = true">申请积分</el-button></el-col>
+			<el-col :span="6" :offset="6">
+				<el-input v-model="formData.keyword" placeholder="输入申请内容" @keyup.enter.native="searchFun">
+					<el-button slot="append" @click="searchFun" size="medium" icon="el-icon-search"></el-button>
+				</el-input>
+			</el-col>
+		</el-row>
+
+		<el-table :data="dataList" stripe fit v-loading="table_loading" v-if="tabs == 'complete'" @row-click="openDetail">
+			<el-table-column label="申请内容" prop="remark">
+				<template slot-scope="scope">
+					<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.remark.customize || scope.row.remark.rule }}</span>
+				</template>
+			</el-table-column>
+			<el-table-column label="积分" prop="review_point" width="120">
+				<template slot-scope="scope">
+					<span :class="{ green: scope.row.review_point < 0, red: scope.row.review_point > 0 }">
+						<span v-show="scope.row.review_point > 0">+</span>
+						{{ scope.row.review_point }} {{ scope.row.pt_id == 3 ? 'B分' : scope.row.pt_id == 2 ? 'A分' : scope.row.pt_id == 1 ? '绩效分' : '' }}
+					</span>
+				</template>
+			</el-table-column>
+			<el-table-column label="时间" prop="event_time" width="150"></el-table-column>
+			<template slot="empty">
+				<div class="nopoint_box" v-if="!formData.keyword">
+					<div class="noimg"></div>
+					<span class="title">
+						你还没有申请积分 现在
+						<el-button type="text" @click="dialogVisible = true">申请积分</el-button>
+					</span>
+				</div>
+				<div class="nopoint_box" v-else>
+					<div class="noimg"></div>
+					<span class="title">暂无数据</span>
+				</div>
+			</template>
+		</el-table>
+
+		<el-table :data="dataList" stripe fit v-loading="table_loading" v-show="tabs == 'waiting'" @row-click="openDetail">
+			<el-table-column label="申请内容" prop="remark">
+				<template slot-scope="scope">
+					{{ scope.row.remark.customize || scope.row.remark.rule }}
+				</template>
+			</el-table-column>
+			<el-table-column label="时间" prop="event_time" width="150"></el-table-column>
+			<template slot="empty">
+				<div class="nopoint_box" v-if="!formData.keyword">
+					<div class="noimg"></div>
+					<span class="title">
+						你还没有申请积分 现在
+						<el-button type="text" @click="dialogVisible = true">申请积分</el-button>
+					</span>
+				</div>
+				<div class="nopoint_box" v-else>
+					<div class="noimg"></div>
+					<span class="title">暂无数据</span>
+				</div>
+			</template>
+		</el-table>
+
+		<el-table :data="dataList" stripe fit v-loading="table_loading" v-show="tabs == 'refuse'" @row-click="openDetail">
+			<el-table-column label="申请内容" prop="remark">
+				<template slot-scope="scope">
+					{{ scope.row.remark.customize || scope.row.remark.rule }}
+				</template>
+			</el-table-column>
+			<el-table-column label="时间" prop="event_time" width="150"></el-table-column>
+			<template slot="empty">
+				<div class="nopoint_box" v-if="!formData.keyword">
+					<div class="noimg"></div>
+					<span class="title">
+						你还没有申请积分 现在
+						<el-button type="text" @click="dialogVisible = true">申请积分</el-button>
+					</span>
+				</div>
+				<div class="nopoint_box" v-else>
+					<div class="noimg"></div>
+					<span class="title">暂无数据</span>
+				</div>
+			</template>
+		</el-table>
+
+		<center style="margin-top: 15px;">
+			<el-pagination
+				background
+				@size-change="handleSizeChange"
+				@current-change="handleCurrentChange"
+				:current-page="formData.page"
+				:page-sizes="[10, 20, 50, 100]"
+				layout="total, sizes, prev, pager, next"
+				:page-size="pageLimit"
+				:total="total"
+			></el-pagination>
+		</center>
+
+		<el-drawer :visible.sync="detailShow" :with-header="false" :size="'600px'">
+			<div class="drawer_title">申请详情</div>
+			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
+				<el-row :gutter="10" style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
+					<el-col :span="24" class="flex-box flex-v-ce">
+						<userImage 
+							:user_name="detail_info.employee_name" 
+							:img_url="detail_info.img_url" 
+							width="50px" 
+							height="50px" 
+							fontSize="1">
+						</userImage>
+						<div class="user_text">
+							<p style="margin-left: 10px;">{{ detail_info.employee_name }}</p>
+							<div v-show="detail_info.review_point != 0">
+								<p v-if="detail_info.status == 1">
+									<span
+										v-show="
+											(detail_info.review_point >= 0 && detail_info.item_prize_type == 1) ||
+												(detail_info.review_point >= 0 && detail_info.item_prize_type == -1) ||
+												(detail_info.review_point >= 0 && detail_info.item_prize_type == 0)
+										"
+										style="color:#f56c6c;padding-left:8px"
+									>
+										+{{ detail_info.review_point }}
+									</span>
+									<span
+										v-show="
+											(detail_info.review_point <= 0 && detail_info.item_prize_type == 2) ||
+												(detail_info.review_point <= 0 && detail_info.item_prize_type == -1) ||
+												(detail_info.review_point <= 0 && detail_info.item_prize_type == 0)
+										"
+										style="color:#67C23A;padding-left:8px"
+									>
+										{{ detail_info.review_point }}
+									</span>
+									<span>{{ detail_info.pt_id == 1 ? '绩效分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 3 ? 'B分' : '' }}</span>
+								</p>
+							</div>
+						</div>
+						<p class="user_text text_ccc">{{ detail_info.review_status_mark }}</p>
+					</el-col>
+				</el-row>
+				<el-row :gutter="10" v-for="(item, index) in detail_info.detail" :key="index">
+					<el-col :span="4">{{ item.key }}</el-col>
+					<el-col :span="20" v-if="item.key == '附件'">
+						<el-image
+							v-for="(items, indexs) in item.value"
+							:key="indexs"
+							style="width: 100px; height: 100px;margin:2px;"
+							:src="items"
+							:preview-src-list="item.value"
+						></el-image>
+					</el-col>
+					<el-col :span="20" v-else>{{ item.value }}</el-col>
+				</el-row>
+
+				<el-row :gutter="10" v-if="detail_info.files != null && detail_info.files > 0">
+					<el-col :span="4">图片</el-col>
+					<el-col :span="20"><el-image v-for="(item, index) in detail_info.files" :key="index" style="width: 100px; height: 100px" :src="item"></el-image></el-col>
+				</el-row>
+				<div v-show="detail_info.process">
+					<Steps :process="detail_info.process"></Steps>
+				</div>
+				<div class="btn_danger flex-box flex-center-center" v-if="detail_info.applyor_id == userId && detail_info.can_refuse == '1' && detail_info.source_type == 2">
+					<el-button type="danger" class="danger" @click="revocation" :loading="cx_loading">撤销</el-button>
+				</div>
+			</div>
+		</el-drawer>
+
+		<applicationIntegrationPopup title="申请积分" :isBreak="isBreak" :ruleOnoff="ruleOnoff" :visible.sync="dialogVisible" v-if="dialogVisible"></applicationIntegrationPopup>
+	</div>
+</template>
+
+<script>
+import moment from 'moment';
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import applicationIntegrationPopup from '@/components/applicationIntegrationPopup';
+import Steps from '@/components/Steps'; 
+import {getToken } from '@/api/auth';
+export default {
+	data() {
+		return {
+			ruleOnoff: false,
+			tabs: 'waiting',
+			dataList: [],
+			table_loading: false,
+			detailShow: false,
+			detail_loading: false,
+			formData: {
+				type: 'waiting',
+				pt_id: 0,
+				page: 1,
+				page_size: 10,
+				keyword: ''
+			},
+			total: 0,
+			pageLimit: 10,
+			point_types: this.$getTyps(),
+			detail_info: {},
+
+			dialogVisible: false,
+			itemIndex: 0,
+			selectId: '',
+			userId: '',
+			cx_loading: false,
+			
+			isBreak:false,//是否打开缓存的未完成奖扣
+		};
+	},
+	components: {
+		EmployeeSelector,
+		applicationIntegrationPopup,
+		Steps
+	},
+	watch: {
+		tabs(val) {
+			this.dataList = [];
+			this.total = 0;
+			this.formData.page = 1;
+			this.formData.keyword = '';
+			this.formData.type = val;
+			this.get_list();
+		}
+	},
+	mounted() {
+		this.cheakAx()
+		this.userId = this.$getUserData().id;
+		this.get_list();
+		setTimeout(() => {
+			let apply_list=this.$getCache('apply_list')
+			if(apply_list&&apply_list.length>0){
+				this.isBreak=true;
+				this.dialogVisible=true;
+			}else{
+				this.isBreak=false;
+			}
+		}, 1000)
+	},
+	methods: {
+		cheakAx() {
+			this.$axios('get', '/api/integral/site/config')
+				.then(res => {
+					let data = res.data.data;
+					if(data.specified_rule_item){
+						this.ruleOnoff = data.specified_rule_item == 1 ? true : false;
+					}else{
+						this.ruleOnoff = false
+					}
+				})
+		},
+		// 撤销奖扣
+		revocation() {
+			var that = this;
+			this.$confirm('撤销此项数据将不可恢复,是否撤销?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				let data = { review_id: that.selectId };
+				that.cx_loading = true;
+				that.$axios('post', '/api/integral/review/destroy', data)
+					.then(res => {
+						if (res.data.code == 1) {
+							that.get_list();
+						} else {
+							that.$message.error(res.data.data.msg);
+						}
+					})
+					.finally(() => {
+						that.cx_loading = false;
+						that.detailShow = false;
+					});
+			});
+		},
+		handleCurrentChange(val) {
+			this.formData.page = val;
+			this.get_list();
+		},
+		handleSizeChange(val) {
+			this.pageLimit = val;
+			this.formData.page_size = this.pageLimit;
+			this.get_list();
+		},
+		searchFun() {
+			this.dataList = [];
+			this.total = 0;
+			this.formData.page = 1;
+			this.get_list();
+		},
+		get_list() {
+			this.table_loading = true;
+			this.$axios('get', '/api/integral/review/apply/list', this.formData)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.dataList = res.data.data.list;
+						this.total = res.data.data.total;
+					}
+				})
+				.finally(() => {
+					this.table_loading = false;
+				});
+		},
+		openDetail(item) {
+			this.selectId = item.id;
+			let data = {
+				review_id: item.id
+			};
+			this.detailShow = true;
+			this.detail_loading = true;
+			this.$axios('get', '/api/integral/review', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.detail_info = res.data.data;
+					} else {
+						this.$message.error(res.data.data.msg);
+					}
+				})
+				.finally(() => {
+					this.detail_loading = false;
+				});
+		}
+	}
+};
+</script>
+
+<style scoped lang="scss">
+.btn_danger {
+	margin-top: 20px;
+}
+.btn_danger .danger {
+	width: 120px;
+}
+.box {
+	background-color: #ffffff;
+	padding: 20px;
+	min-height: calc(100vh - 160px);
+}
+.detail_popup {
+	padding: 20px;
+	height: 90vh;
+	overflow-y: auto;
+
+	.row_title {
+		position: relative;
+		margin: 0 0 20px 0;
+		padding-top: 12px;
+		font-size: 16px;
+		color: #303133;
+		line-height: 22px;
+	}
+	.row_title:before {
+		position: absolute;
+		top: 0;
+		content: ' ';
+		width: 100%;
+		border-top: 1px #f8f8f8 solid;
+	}
+	.el-row {
+		margin-bottom: 10px;
+		font-size: 14px;
+		.el-col-4 {
+			color: #606266;
+		}
+	}
+	.examine_steps {
+		.el-step {
+			flex-basis: auto !important;
+		}
+	}
+}
+
+// 滚动条样式
+.detail_popup::-webkit-scrollbar-track {
+	-webkit-box-shadow: inset 0 0 5px rgba(255, 255, 255, 0.3);
+	border-radius: 5px;
+	background-color: rgba(216, 216, 216, 0.8);
+}
+.detail_popup::-webkit-scrollbar {
+	width: 5px;
+	background-color: rgba(201, 201, 201, 0);
+}
+.detail_popup::-webkit-scrollbar-thumb {
+	border-radius: 5px;
+	-webkit-box-shadow: inset 0 0 5px rgb(153, 145, 145) (160, 154, 154);
+	background-color: rgb(168, 167, 167);
+}
+
+.drawer_title {
+	font-size: 18px;
+	padding: 20px;
+	border-bottom: 1px #efefef solid;
+}
+.user_text {
+	margin: 0;
+	line-height: 25px;
+	display: flex;
+}
+.text_ccc {
+	font-size: 16px;
+	color: #26a2ff;
+	margin-left: 10px;
+}
+::v-deep .el-table tr:hover {
+	cursor: pointer;
+}
+</style>

+ 550 - 0
src/views/abPoint/award_punish.vue

@@ -0,0 +1,550 @@
+<template>
+	<div class="all padding-20">
+		<el-tabs v-model="tabs">
+			<el-tab-pane label="奖扣成功" name="success"></el-tab-pane>
+			<el-tab-pane label="待审批" name="waiting"></el-tab-pane>
+			<el-tab-pane label="被驳回" name="refuse"></el-tab-pane>
+		</el-tabs>
+		<el-row style="margin-bottom: 15px;">
+			<el-col :span="12">
+				<el-button type="primary" @click="point_b">奖扣B分</el-button>
+				<el-button type="primary" @click="point_a" plain>奖扣A分</el-button>
+				<!-- <div class="red">未成功提交列表</div> -->
+			</el-col>
+			<el-col :span="6" :offset="6">
+				<el-input v-model="keyword" placeholder="输入同事姓名/内容" @keyup.enter.native="getData">
+					<el-button slot="append" @click="getData" icon="el-icon-search"></el-button>
+				</el-input>
+			</el-col>
+		</el-row>
+
+		<el-table v-if="tabs == 'success'" res="table1" :data="dataList" stripe fit v-loading="table_loading" @row-click="open_detail">
+			<el-table-column label="姓名" prop="employee_id" align="left">
+				<template slot-scope="scope">
+					<div class="flex-box flex-contet-conter" >
+						<userImage :img_url="scope.row.employee_img_url" :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
+						<span style="margin-left: 10px; line-height: 50px;">{{ scope.row.employee_name }}</span>
+					</div>
+				</template>
+			</el-table-column>
+			
+			<el-table-column show-overflow-tooltip label="奖扣内容">
+				<template slot-scope="scope">
+					<span class="font-flex-word" style="max-width: 200px;">{{  scope.row.remark_data.customize}}</span>
+				</template>
+			</el-table-column>
+			<el-table-column  label="积分" width="120">
+				<template slot-scope="scope">
+					<span :class="{green: scope.row.point < 0, red: scope.row.point > 0 }">
+						<span v-show="scope.row.point > 0">+</span>
+						{{ scope.row.point }} {{ point_name(scope.row.pt_id) }}
+					</span>
+				</template>
+			</el-table-column>
+			
+			<el-table-column label="奖扣时间" width="150">
+				<template slot-scope="scope">
+					{{ cuttString(scope.row.create_time) }}
+				</template>
+			</el-table-column>
+			<template slot="empty">
+				<noData></noData>
+			</template>
+		</el-table>
+
+		<el-table v-else :data="dataList2" res="table2" stripe fit v-loading="table_loading" @row-click="open_detail1">
+			<el-table-column label="姓名" prop="employee_id" align="left">
+				<template slot-scope="scope">
+					<div class="flex-box flex-contet-conter">
+						<userImage :img_url="scope.row.employee_img_url" :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
+						<span style="margin-left: 10px; line-height: 50px;">{{ scope.row.employee_name }}</span>
+					</div>
+				</template>
+			</el-table-column>
+			<el-table-column show-overflow-tooltip label="奖扣内容">
+				<template slot-scope="scope">
+					{{ scope.row.remark.customize }}
+				</template>
+			</el-table-column>
+			<el-table-column label="奖扣时间" width="150">
+				<template slot-scope="scope">
+					{{ cuttString(scope.row.event_time) }}
+				</template>
+			</el-table-column>
+			<template slot="empty">
+				<noData></noData>
+			</template>
+		</el-table>
+
+		<center style="margin-top: 15px;">
+			<el-pagination
+				background
+				@size-change="handleSizeChange"
+				@current-change="handleCurrentChange"
+				:current-page="formData.page"
+				:page-sizes="[10, 20, 50, 100]"
+				layout="total, sizes, prev, pager, next"
+				:page-size="pageLimit"
+				:total="formData.total"
+			></el-pagination>
+		</center>
+
+		<el-drawer title="奖扣详情" :visible.sync="drawer" ref="drawer" :with-header="false" :size="'600px'" direction="rtl">
+			<div class="drawer_title">奖扣详情</div>
+			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
+				<el-row :gutter="10" style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
+					<el-col :span="24">
+						<div class="flex-box flex-v-ce">
+							<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px" height="50px" fontSize="1"></userImage>
+							<span style="line-height:50px; margin-left:10px;margin:0px 10px;">{{ detail_info.employee_name }}</span>
+							<span class="red point" v-show="detail_info.point >= 0 && detail_info.point"> +{{ detail_info.point }}</span>
+							<span class="green point" v-show="detail_info.point < 0 && detail_info.point"> {{ detail_info.point }}</span>
+							<span v-show="detail_info.point" style="margin-left: 5px;"> {{ detail_info.pt_id == 1 ? '绩效分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 3 ? 'B分' : '' }}</span>
+						</div>
+					</el-col>
+				</el-row>
+
+				<el-row :gutter="10">
+					<el-col :span="4">任务描述</el-col>
+					<el-col :span="20" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize || detail_info.remark.rule) }}</el-col>
+				</el-row>
+
+				<el-row :gutter="10">
+					<el-col :span="4">规则分类</el-col>
+					<el-col :span="20">{{ detail_info.rule_list }}</el-col>
+				</el-row>
+
+				<el-row :gutter="10" v-show="detail_info.rule_list">
+					<el-col :span="4">事件时间</el-col>
+					<el-col :span="20">{{ detail_info.date }}</el-col>
+				</el-row>
+				<el-row :gutter="10" v-show="detail_info.source_type_mark">
+				  <el-col :span="4" style="margin-bottom:5px;">来源类型</el-col>
+				  <el-col :span="20">{{ detail_info.source_type_mark }}</el-col>
+				</el-row>
+
+				<el-row :gutter="10" v-show="!detail_info.rule_id">
+					<el-col :span="4">记录人</el-col>
+					<el-col :span="20">{{ detail_info.employee_name }}</el-col>
+				</el-row>
+
+				<el-row :gutter="10" :v-if="detail_info.files">
+					<el-col v-for="(item, index) in detail_info.files" :key="index" :span="4">{{ index == 0 ? '图片' : '' }}</el-col>
+					<el-col :span="20">
+						<el-image
+							v-for="(item, index) in detail_info.files"
+							:key="index"
+							style="width: 100px; height: 100px;margin-right:8px"
+							:src="item"
+							:preview-src-list="detail_info.files"
+						></el-image>
+					</el-col>
+				</el-row>
+
+				<div v-show="detail_info.rule_item_id">
+					<p class="row_title">规则依据</p>
+					<el-row :gutter="10">
+						<el-col :span="4">规则分类</el-col>
+						<el-col :span="19">{{ detail_info.rule_list }}</el-col>
+					</el-row>
+					<el-row v-if="detail_info.remark && detail_info.remark.rule">
+						<el-col :span="4">积分规则</el-col>
+						<el-col :span="19">{{ detail_info.remark.rule }}</el-col>
+					</el-row>
+					<el-row v-if="detail_info.rule_item">
+						<el-col :span="4">积分</el-col>
+						<el-col :span="19" v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{ detail_info.rule_item.min_point }}</el-col>
+						<el-col :span="19" v-show="detail_info.rule_item.min_point != detail_info.rule_item.max_point">
+							{{ detail_info.rule_item.min_point }} ~ {{ detail_info.rule_item.max_point }}
+						</el-col>
+					</el-row>
+				</div>
+
+				<div v-show="detail_info.process">
+					<Steps :process="detail_info.process"></Steps>
+				</div>
+				<div class="btn_danger flex-box flex-center-center" v-if="detail_info.process.length==1&&(detail_info.event_type==3||detail_info.event_type==4)">
+				  <el-button type="danger" class="danger" @click="revocation" :loading="cx_loading">撤销</el-button>
+				</div>
+			</div>
+		</el-drawer>
+
+		<el-drawer title="奖扣详情" :visible.sync="detailShow" :with-header="false" :size="'600px'" direction="rtl">
+			<div class="drawer_title">奖扣详情</div>
+			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
+				<el-row :gutter="10" style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
+					<el-col :span="24" >
+						<div class="flex-box flex-v-ce">
+						<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px" height="50px" fontSize="1"></userImage>
+						<span style="line-height:50px; margin-left:10px;margin:0px 10px;">{{ detail_info.employee_name }}</span>
+						<span class="red point" v-show="detail_info.point >= 0 && detail_info.point">+{{ detail_info.point }}</span>
+						<span class="green point" v-show="detail_info.point < 0 && detail_info.point">{{ detail_info.point }}</span>
+						<span v-show="detail_info.point" style="margin-left: 5px;">{{ detail_info.pt_id == 1 ? '绩效分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 3 ? 'B分' : '' }}</span>
+						</div>
+					</el-col>
+				</el-row>
+
+				<el-row :gutter="10" v-show="detail_info.source_type_mark">
+					<el-col :span="4">来源类型</el-col>
+					<el-col :span="20">{{ detail_info.source_type_mark }}</el-col>
+				</el-row>
+
+				<el-row :gutter="10" v-for="(item, index) in detail_info.detail" :key="index">
+					<el-col :span="4">{{ item.key }}</el-col>
+					<el-col :span="20" v-if="item.key == '附件'">
+						<el-image  style="width: 100px; height: 100px;margin-right:8px" v-for="(item2, index2) in item.value" :key="index2" :src="item2" :preview-src-list="item.value"></el-image>
+					</el-col>
+					<el-col :span="20" v-else>{{ item.value }}</el-col>
+				</el-row>
+
+				<el-row :gutter="10" :v-if="detail_info.files">
+					<el-col v-for="(item, index) in detail_info.files" :key="index" :span="4">{{ index == 0 ? '图片' : '' }}</el-col>
+					<el-col :span="20">
+						<el-image
+							v-for="(item, index) in detail_info.files"
+							:key="index"
+							style="width: 100px; height: 100px;margin-right:8px"
+							:src="item"
+							:preview-src-list="detail_info.files"
+						></el-image>
+					</el-col>
+				</el-row>
+
+
+				<div v-show="detail_info.rule_id">
+					<p class="row_title">规则依据</p>
+					<el-row :gutter="10">
+						<el-col :span="4">规则分类</el-col>
+						<el-col :span="19">{{ detail_info.rule_name }}</el-col>
+					</el-row>
+					<el-row v-if="detail_info.item_name">
+						<el-col :span="4">积分规则</el-col>
+						<el-col :span="19">{{ detail_info.item_name }}</el-col>
+					</el-row>
+					<el-row v-if="detail_info.item_id > 0">
+						<el-col :span="4">积分</el-col>
+						<el-col :span="19" v-show="detail_info.item_min_point == detail_info.item_max_point">{{ detail_info.item_min_point }}</el-col>
+						<el-col :span="19" v-show="detail_info.item_min_point != detail_info.item_max_point">
+							{{ detail_info.item_min_point }} ~ {{ detail_info.item_max_point }}
+						</el-col>
+					</el-row>
+				</div>
+				<div v-show="detail_info.process">
+					<Steps :process="detail_info.process"></Steps>
+				</div>
+				<div class="btn_danger flex-box flex-center-center" v-if="detail_info.applyor_id==userId&&detail_info.status==0&&detail_info.source_type==3">
+				  <el-button type="danger" class="danger" @click="revocation2" :loading="cx_loading">撤销</el-button>
+				</div>
+			</div>
+		</el-drawer>
+
+		<bonusPointsPopup :isBreak="isBreak" :title="popuTitle" :visible.sync="popupVisible" :ruleOnoff="ruleOnoff" :refresh.sync="refreshData" :integralType.sync="integralType">
+			<div style=" position: absolute;top: 0px;right: 0;" class="yellow">最多只能选择30人</div>
+		</bonusPointsPopup>
+	</div>
+</template>
+
+<script>
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import bonusPointsPopup from '@/components/bonusPointsPopup';
+import Steps from '@/components/Steps'; 
+import {getToken } from '@/api/auth';
+export default {
+	data() {
+		return {
+			ruleOnoff: false,
+			refreshData: '',
+			popuTitle: '奖扣A分',
+			popupVisible: false,
+			integralType: 0,
+			table_loading: false,
+			formData: {
+				page: 1,
+				page_size: 10,
+				total: 0
+			},
+			tabs: 'success',
+			dataList: [],
+			dataList2: [],
+			pageLimit: 10,
+			keyword: '',
+			rule_list: [],
+			drawer: false,
+			detail_loading: false,
+			detail_info: {
+				process:[]
+			},
+			detailShow: false,
+			employee_name: this.$getCache('SET_EMPLOYEE_MAP'),
+			userId:'',
+			cx_loading:false,
+			selectId:'',//打开详情ID
+			
+			// 长连接
+			isBreak:false,//是否打开缓存的未完成奖扣
+		};
+	},
+	components: {
+		EmployeeSelector,
+		bonusPointsPopup,
+		Steps
+	},
+	mounted() {
+		this.cheakAx()
+		this.userId=this.$getUserData().id
+		this.getData()
+		setTimeout(() => {
+			let award_punish=this.$getCache('award_punish')
+			if(award_punish&&award_punish.obj.length>0){
+				this.isBreak=true;
+				award_punish.type==3? this.point_b():this.point_a()
+			}else{
+				this.isBreak=false;
+			}
+		}, 1000)
+	},
+	watch: {
+		tabs(val) {
+			this.dataList = [];
+			this.dataList2 = [];
+			this.formData.total = 0;
+			this.keyword = '';
+			this.formData.page = 1;
+			this.formData.page_size = 10;
+			this.getData();
+		},
+		refreshData(val) {
+			this.getData();
+		}
+	},
+	methods: {
+		cheakAx() {
+			this.$axios('get', '/api/integral/site/config')
+				.then(res => {
+					let data = res.data.data;
+					if(data.specified_rule_item){
+						this.ruleOnoff = data.specified_rule_item == 1 ? true : false;
+					}else{
+						this.ruleOnoff = false
+					}
+				})
+		},
+		// 撤销待审批
+		revocation2(){
+			var that=this;
+			this.$confirm('撤销此项数据将不可恢复,是否撤销?', '提示', {
+				  confirmButtonText: '确定',
+				  cancelButtonText: '取消',
+				  type: 'warning'
+				}).then(() => {
+					let data = {
+						review_id: that.selectId,
+					};
+					that.cx_loading = true;
+					that.$axios('post', '/api/integral/review/destroy', data).then(res => {
+						if (res.data.code == 1) {
+							that.getData()
+						} else {
+							that.$message.error(res.data.data.msg);
+						}
+					}).finally(() => {
+						that.detailShow = false;
+						that.cx_loading = false;
+					});
+				})
+		},
+		// 撤销奖扣
+		revocation(){
+			var that=this;
+			this.$confirm('撤销此项数据将不可恢复,是否撤销?', '提示', {
+				  confirmButtonText: '确定',
+				  cancelButtonText: '取消',
+				  type: 'warning'
+				}).then(() => {
+					let data = {
+						target_id: that.selectId,
+						type:1
+					};
+					that.cx_loading = true;
+					that.$axios('post', '/api/integral/review/prize/destroy', data).then(res => {
+						if (res.data.code == 1) {
+							that.getData()
+						} else {
+							that.$message.error(res.data.data.msg);
+						}
+					}).finally(() => {
+						that.cx_loading = false;
+						that.drawer = false;
+					});
+				})
+		},
+		getEmployeeName(id) {
+			for (const key in this.employee_name) {
+				if (this.employee_name[key].id == id) {
+					return this.employee_name[key].name;
+				}
+			}
+		},
+		open_detail1(item) {
+			this.detailShow = true;
+			this.selectId=item.id
+			let data = {
+				review_id: item.id
+			};
+			this.detail_loading = true;
+			this.$axios('get', '/api/integral/review', data).then(res => {
+				if (res.data.code == 1) {
+					this.detail_info = res.data.data;
+				} else {
+					this.$message.error(res.data.data.msg);
+				}
+			})
+			.finally(() => {
+				this.detail_loading = false;
+			});
+		},
+		open_detail(item) {
+			this.drawer = true;
+			let data = {event_id: item.id};
+			this.selectId=item.id
+			this.detail_loading = true;
+			this.$axios('get', '/api/integral/statistics/integral/info', data).then(res => {
+				if (res.data.code == 1) {
+					this.detail_info = res.data.data;
+				} else {
+					this.$message.error(res.data.data.msg);
+				}
+			})
+			.finally(() => {
+				this.detail_loading = false;
+			});
+		},
+
+		cuttString(data) {
+			return data.substring(0, 10);
+		},
+		point_a() {
+			this.popupVisible = false;
+			this.integralType = 2;
+			this.popuTitle = '奖扣A分';
+			this.popupVisible = true;
+		},
+		point_b() {
+			this.popupVisible = false;
+			this.integralType = 3;
+			this.popuTitle = '奖扣B分';
+			this.popupVisible = true;
+		},
+		point_name(id) {
+			return this.$getTyps(id).name;
+		},
+		handleCurrentChange(val) {
+			this.formData.page = val;
+			this.getData();
+		},
+		handleSizeChange(val) {
+			this.pageLimit = val;
+			this.formData.page_size = this.pageLimit;
+			this.getData();
+		},
+		getData() {
+			this.table_loading = true;
+			let data = {};
+			if (this.tabs == 'success') {
+				data = {
+					page: this.formData.page,
+					page_size: this.formData.page_size,
+					recorder_id:this.userId,
+					source_type: '1',
+					keyword: this.keyword
+				};
+			} else if (this.tabs == 'waiting') {
+				data = {
+					page: this.formData.page,
+					page_size: this.formData.page_size,
+					keyword: this.keyword,
+					pt_id: '0',
+					type: 'waiting'
+				};
+			} else {
+				data = {
+					page: this.formData.page,
+					page_size: this.formData.page_size,
+					keyword: this.keyword,
+					pt_id: '0',
+					type: 'refuse'
+				};
+			}
+			this.$axios('get', this.tabs == 'success' ? '/api/integral/statistics/integral' : '/api/integral/review/entry/list', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						if(this.tabs == 'success'){
+							this.dataList = res.data.data.list;
+						}else{
+							this.dataList2 = res.data.data.list;
+						}
+						
+						this.formData.total = res.data.data.total;
+					}
+				})
+				.finally(() => {
+					this.table_loading = false;
+				});
+		}
+	}
+};
+</script>
+
+<style scoped lang="scss">
+ .btn_danger{
+	 margin-top: 20px;
+ }
+ .btn_danger .danger{
+ 	width: 120px;
+ }
+.box {
+	background-color: #ffffff;
+	padding: 20px;
+	min-height: calc(100vh - 160px);
+}
+.examine_steps {
+	.el-step {
+		flex-basis: auto !important;
+	}
+}
+.detail_popup {
+	padding: 20px;
+	height: calc(100vh - 100px);
+	overflow: auto;
+	.row_title {
+		position: relative;
+		margin: 0 0 20px 0;
+		padding-top: 12px;
+		font-size: 16px;
+		color: #303133;
+		line-height: 22px;
+	}
+	.row_title:before {
+		position: absolute;
+		top: 0;
+		content: ' ';
+		width: 100%;
+		border-top: 1px #f8f8f8 solid;
+	}
+	.el-row {
+		margin-bottom: 10px;
+		font-size: 14px;
+		.el-col-4 {
+			color: #606266;
+		}
+	}
+}
+.drawer_title {
+	font-size: 18px;
+	padding: 20px;
+	border-bottom: 1px #efefef solid;
+}
+::v-deep .el-table tr:hover {
+	cursor: pointer;
+}
+</style>

+ 257 - 0
src/views/common/repeatTaskDetailsPopup.vue

@@ -0,0 +1,257 @@
+<template>
+	<div>
+		<!-- 重复任务详情弹窗 -->
+		<el-drawer :visible.sync="Delay_to_open" :with-header="false" :size="'500px'" :before-close="handleClose" :custom-class="'drawer_details'">
+			<div class="details_title">{{ title }}</div>
+			<div class="details_content" v-if="workDetailData" v-loading="loading">
+				<ul>
+					<li class="flex-box">
+						<div class="label">任务内容</div>
+						<div class="content_text">{{ workDetailData.name }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">任务描述</div>
+						<div class="content_text">{{ workDetailData.remark }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData">
+						<div class="label">执行周期</div>
+						<div class="content_text">
+							{{ workDetailData.task_expire_day }}{{ workDetailData.task_cycle == 1 ? '天' : workDetailData.task_cycle == 2 ? '周' : '月' }}
+						</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config">
+						<div class="label">任务积分</div>
+						<div class="content_text">
+							{{ workDetailData.point_config.base_point }}
+							<span>{{ workDetailData.pt_id == 2 ? 'A分' : workDetailData.pt_id == 3 ? 'B分' : '' }}</span>
+						</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.file_list && workDetailData.file_list.length > 0">
+						<div class="label">附件</div>
+						<div class="content_text">
+							<el-image
+								v-for="(item, index) in workDetailData.file_list"
+								:key="index"
+								style="width: 100px; height: 100px;margin-right:8px"
+								:src="item"
+								:preview-src-list="workDetailData.file_list"
+							></el-image>
+						</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">发布人</div>
+						<div class="content_text">{{ workDetailData.owner_name }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">创建时间</div>
+						<div class="content_text">{{ workDetailData.create_time }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">截止时间</div>
+						<div class="content_text">
+							<span v-if="workDetailData.task_cycle == '1'">每天{{ dayTime(workDetailData.task_cycle_value) }}截止</span>
+							<span v-if="workDetailData.task_cycle == '2'">
+								<span>每周{{ weekList[workDetailData.task_cycle_value - 1] }}截止</span>
+							</span>
+							<span v-if="workDetailData.task_cycle == '3'">每月{{ workDetailData.task_cycle_value }}号截止</span>
+						</div>
+					</li>
+
+					<template slot-scope="scope">
+						<span v-if="scope.row.task_cycle == '1'">每天0点自动发布,{{ dayTime(scope.row.task_cycle_value) }}截止</span>
+						<span v-if="scope.row.task_cycle == '2'">
+							<span>每周一自动发布,周{{ weekList[scope.row.task_cycle_value - 1] }}截止</span>
+						</span>
+						<span v-if="scope.row.task_cycle == '3'">每月1号自动发布,{{ scope.row.task_cycle_value }}号截止</span>
+					</template>
+					<li class="flex-box" v-if="workDetailData.point_config && workDetailData.point_config.ahead_award_point">
+						<div class="label">提前奖分</div>
+						<div class="content_text">{{ workDetailData.point_config.ahead_award_point }}/天</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config && workDetailData.point_config.ahead_award_point_limit">
+						<div class="label">奖分上限</div>
+						<div class="content_text">{{ workDetailData.point_config.ahead_award_point_limit }}</div>
+					</li>
+
+					<li class="flex-box" v-if="workDetailData.point_config && workDetailData.point_config.timeout_deduction_point">
+						<div class="label">逾期扣分</div>
+						<div class="content_text">{{ workDetailData.point_config.timeout_deduction_point }}/天</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config && workDetailData.point_config.timeout_deduction_point_limit">
+						<div class="label">扣分上限</div>
+						<div class="content_text">{{ workDetailData.point_config.timeout_deduction_point_limit }}</div>
+					</li>
+				</ul>
+				<div v-show="workDetailData.point_config && workDetailData.point_config.item_info">
+					<p class="row_title">规则依据</p>
+					<el-row :gutter="10" v-if="workDetailData.point_config.rule_info">
+						<el-col :span="4">规则分类</el-col>
+						<el-col :span="19">{{ workDetailData.point_config.rule_info.name }}</el-col>
+					</el-row>
+					<el-row v-if="workDetailData.point_config.item_info">
+						<el-col :span="4">积分规则</el-col>
+						<el-col :span="19">{{ workDetailData.point_config.item_info.remark }}</el-col>
+					</el-row>
+					<el-row v-if="workDetailData.point_config.item_info">
+						<el-col :span="4">积分</el-col>
+						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point == workDetailData.point_config.item_info.max_point">
+							{{ workDetailData.point_config.item_info.min_point }} {{ $getTypsName(workDetailData.pt_id) }}
+						</el-col>
+						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point != workDetailData.point_config.item_info.max_point">
+							{{ workDetailData.point_config.item_info.min_point }} ~ {{ workDetailData.point_config.item_info.max_point }} {{ $getTypsName(workDetailData.pt_id) }}
+						</el-col>
+					</el-row>
+				</div>
+				<el-row style=" margin-bottom: 20px;">
+					<el-col :span="24" style="line-height: 30px;">审批人</el-col>
+					<el-col :span="24">
+						<div style="display:flex">
+							<userImage :user_name="workDetailData.reviewer_name" width="50px" height="50px" style=" margin-right: 15px;" fontSize="1"></userImage>
+							<p style="margin: 0; line-height: 50px;">{{ workDetailData.reviewer_name }}</p>
+						</div>
+					</el-col>
+				</el-row>
+				<el-row v-if="workDetailData.target_info">
+					<el-col :span="24" style="line-height: 30px;">执行人</el-col>
+					<el-col :span="24">
+						<div v-for="(item, index) in workDetailData.target_info" :key="index" style="margin-bottom: 10px;display:flex;">
+							<userImage :user_name="item.name" width="50px" height="50px" style=" margin-right: 15px;" fontSize="1"></userImage>
+							<p style="margin: 0; line-height: 50px;">{{ item.name }}</p>
+						</div>
+					</el-col>
+				</el-row>
+			</div>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+export default {
+	name: 'repeatTaskDetailsPopup',
+	props: {
+		title: {
+			type: String,
+			default: ''
+		},
+		visible: {
+			type: Boolean,
+			default: false
+		},
+		id: {
+			type: Number,
+			default: 0
+		}
+	},
+	data() {
+		return {
+			Delay_to_open: false, //打开抽屉
+
+			loading: false,
+			workDetailData: {
+				point_config:{
+					rule_info:''
+				}
+			},
+			weekList: ['一', '二', '三', '四', '五', '六', '日']
+		};
+	},
+	mounted() {
+		this.getData();
+		this.Delay_to_open = this.visible; //更换打开抽屉时机,避免打开两次
+	},
+	methods: {
+		dayTime(item) {
+			return item > 9 ? item + ': 00' : '0' + item + ': 00';
+		},
+		// 关闭弹窗
+		handleClose() {
+			this.$emit('update:visible', false);
+		},
+		// 获取数据
+		getData() {
+			let self = this;
+			self.loading = true;
+			let data = { schedule_id: this.id };
+			self.$axios('get', '/api/integral/schedule', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.workDetailData = res.data.data;
+					}
+				})
+				.finally(() => {
+					self.loading = false;
+				});
+		}
+	}
+};
+</script>
+<style lang="scss" scoped="scoped">
+.details_content {
+	& .d_userMessage {
+		margin-left: 10px;
+	}
+	& .d_userMessage div:nth-child(1) {
+		font-size: 16px;
+		margin-bottom: 8px;
+	}
+	& .d_userMessage div:nth-child(2) {
+		font-size: 12px;
+		color: #909399;
+	}
+	& .d_progress {
+		padding: 12px 0;
+		border-bottom: 1px solid #f1f1f1;
+		margin-bottom: 10px;
+	}
+	& ul {
+		padding: 12px 0;
+		border-bottom: 1px solid #f1f1f1;
+		& li {
+			padding: 6px 0;
+		}
+		& .label {
+			width: 80px;
+			text-align: left;
+			color: #909399;
+		}
+		& .content_text {
+			flex: 1;
+		}
+	}
+}
+.fontColorF {
+	color: #909399;
+}
+.details_content {
+	padding: 20px;
+	height: calc(100vh - 60px);
+	overflow: auto;
+	.row_title {
+		position: relative;
+		margin: 0 0 20px 0;
+		padding-top: 12px;
+		font-size: 16px;
+		color: #303133;
+		line-height: 22px;
+	}
+	.row_title:before {
+		position: absolute;
+		top: 0;
+		content: ' ';
+		width: 100%;
+		border-top: 1px #f8f8f8 solid;
+	}
+	.el-row {
+		margin-bottom: 10px;
+		font-size: 14px;
+		.el-col-4 {
+			color: #606266;
+		}
+	}
+}
+.details_title {
+	font-size: 18px;
+	padding: 20px;
+	border-bottom: 1px #efefef solid;
+}
+</style>

+ 689 - 0
src/views/common/rewardTask.vue

@@ -0,0 +1,689 @@
+<template>
+	<div>
+		<!-- 悬赏任务弹窗 -->
+		<el-dialog :title="showTitle" :visible.sync="dialogVisible" :close-on-click-modal="false" :before-close="closeDialog" width="600px" top="3%">
+			<div v-loading="forTheTaskLoading">
+				<el-form :model="formData" ref="formData" label-width="80px">
+					<el-form-item
+						label="任务内容"
+						prop="task_name"
+						:rules="[{ required: true, message: '请填写任务内容', trigger: 'blur' }, { min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }]"
+					>
+						<el-input
+							type="textarea"
+							rows="3"
+							maxlength="20"
+							show-word-limit
+							v-model="formData.task_name"
+							placeholder="请输入任务内容(限20字)"
+							class="reward_textarea"
+						></el-input>
+					</el-form-item>
+					<el-form-item label="积分类型" prop="pt_id" :rules="[{ required: true, message: '请选择积分类型', trigger: 'blur' }]">
+						<el-radio-group v-model="formData.pt_id">
+							<el-radio v-for="(item, index) in point_types" :key="index" v-show="item.code !== 'JX'" :label="item.id">{{ item.name }}</el-radio>
+						</el-radio-group>
+					</el-form-item>
+					
+					
+					
+					<el-form-item label="指定规则">
+						 <el-switch  v-model="isSelectType"></el-switch>
+					</el-form-item>
+					<!-- 选择分类 -->
+					<el-form-item class="test_cascader_id" label="选择分类"	v-if="!isSelectType"
+						prop="rule_value"
+						:rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]"
+					>
+						<el-cascader
+							v-model="formData.rule_value"
+							ref="ruleCascader"
+							:popper-class="'ruleClass'"
+							filterable
+							clearable
+							:options="trees_ab.rule_tree_all"
+							@change="ruleChange"
+							:props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"
+						></el-cascader>
+					</el-form-item>
+					<!-- 选择规则 -->
+					<el-form-item :label="trees_PtId(formData.pt_id) +'规则'" v-else prop="tree_echo" :rules="[{ required: true, message: '请选择规则', trigger: 'blur' }]"
+					>
+						<el-cascader
+							v-model="formData.tree_echo"
+							ref="ruleItem"
+							:popper-class="'itemClass'"
+							filterable
+							clearable
+							:options="formData.pt_id == 2 ? trees_ab.A : trees_ab.B"
+							@change="ruleItemChange"
+							:show-all-levels="false"
+							:props="{ children: 'child', label: 'name', value: 'id' }"
+						></el-cascader>
+					</el-form-item>
+					
+					
+<!-- 					<el-form-item
+						:label="trees_PtId(formData.pt_id) +'规则'"
+						prop="tree_echo"
+					>
+						<el-cascader
+							v-model="formData.tree_echo"
+							ref="ruleItem"
+							:popper-class="'itemClass'"
+							filterable
+							clearable
+							:options="formData.pt_id == 2 ? trees_ab.A : trees_ab.B"
+							@change="ruleItemChange"
+							:show-all-levels="false"
+							:props="{ children: 'child', label: 'name', value: 'id' }"
+						></el-cascader>
+					</el-form-item> -->
+					
+					
+					
+					
+					<el-form-item prop="range_type" v-if="formData.range_type != 0">
+						<div style="line-height: 24px;" v-show="formData.range_type == 1">
+							{{ min }}
+							<span class="blue">{{ trees_PtId(formData.pt_id) }}</span>
+						</div>
+						<div style="line-height: 24px;" v-show="formData.range_type == 2">
+							{{ min }} ~ {{ max }}
+							<span class="blue">{{ trees_PtId(formData.pt_id) }}</span>
+						</div>
+						<div style="line-height: 24px;">{{ treeName }}</div>
+					</el-form-item>
+
+					<el-form-item label="任务积分" prop="base_point" :rules="[{ required: true, message: '请填写任务积分', trigger: 'blur' }]">
+						<el-input-number v-if="formData.range_type == 0" v-model.number="formData.base_point"></el-input-number>
+						<el-input-number v-else :disabled="formData.range_type == 1" v-model.number="formData.base_point" :min="min" :max="max"></el-input-number>
+					</el-form-item>
+					<el-form-item label="审批人" prop="reviewer_id" :rules="[{ required: true, message: '请选择审批人', trigger: 'change' }]">
+						<el-row>
+							<el-col :span="18">
+								<el-input auto-complete="off" v-model="reviewerName" placeholder="请选择审批人"></el-input>
+								<div @click="show_reviewer_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+							</el-col>
+						</el-row>
+						<el-dialog title="选择审批人" width="640px" :visible.sync="show_reviewer_selector" append-to-body :before-close="handleClose">
+							<EmployeeSelector
+								v-if="show_reviewer_selector"
+								ref="members"
+								:multi="false"
+								:use_Administrator_list="true"
+								:selected="reviewer_selected"
+								@confirm="reviewer_confirm"
+							/>
+							<span slot="footer" class="dialog-footer">
+								<el-button @click="show_reviewer_selector = false">取 消</el-button>
+								<el-button type="primary" @click="submitMembers('members')">确 定</el-button>
+							</span>
+						</el-dialog>
+					</el-form-item>
+
+
+					<el-form-item label="截止日期" prop="expire_time" v-if="formData.task_cycle == 0" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-date-picker
+							v-model="formData.expire_time"
+							type="datetime"
+							placeholder="选择日期时间"
+							format="yyyy-MM-dd HH:mm"
+							value-format="yyyy-MM-dd HH:mm"
+							default-time="18:00"
+						></el-date-picker>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 1" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns1" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 2" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns2" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 3" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns3" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="任务备注" prop="task_remark" :rules="[{ max: 300, message: '长度不能超过 300 个字', trigger: 'blur' }]">
+						<el-input type="textarea" :rows="5" v-model="formData.task_remark" maxlength="300" show-word-limit placeholder="请输入任务内容(限300字)"></el-input>
+					</el-form-item>
+					<el-form-item label="图片">
+						<upload
+							:headers="Xtoken"
+							class="avatar-uploader"
+							:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
+							:show-file-list="true"
+							:file-list="fileList"
+							:on-success="handleFilesSuccess"
+							:on-preview="onFilePreView"
+							:before-upload="beforeUpload"
+							:on-remove="onFileRemove"
+							:limit="3"
+							:multiple="true"
+							ref="clearPicture"
+						>
+							<el-button size="small" type="primary">点击上传</el-button>
+							(最多选择3张)
+						</upload>
+					</el-form-item>
+					<el-form-item label="重复周期" prop="task_cycle">
+						<el-select v-model="formData.task_cycle" placeholder="请选择重复周期">
+							<el-option v-for="(item, index) in task_cycle_arr" :key="index" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+					<el-form-item label="谁可以看" prop="dept_ids">
+						<el-cascader
+							size="medium"
+							class="date-picker-width"
+							v-model="dept_name"
+							@change="handleChange"
+							:options="dept_tree"
+							collapse-tags
+							:props="{ checkStrictly: true, value: 'id', label: 'name', multiple: true, children: '_child' }"
+							ref="dept"
+							clearable
+							placeholder="全公司"
+						></el-cascader>
+						<span style="color:#b5b7bb;padding-left:10px;">选中的部门可查看或领取任务</span>
+					</el-form-item>
+
+					<div style="margin-left: 80px; margin-bottom: 8px;">以天为单位,每 提前/逾期 一天 加分/扣分</div>
+					<el-form-item label="提前奖分" prop="ahead_award_point">
+						<el-input v-model="formData.ahead_award_point" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入每日奖分" style="width: 150px;"></el-input>
+						B分/每天, 奖分上限 &nbsp;
+						<el-input
+							v-model="formData.ahead_award_point_limit"
+							oninput="value=value.replace(/[^\d]/g,'')"
+							placeholder="请输入奖分上限"
+							style="width: 150px;"
+						></el-input>
+						B分
+					</el-form-item>
+					<el-form-item label="逾期扣分" prop="timeout_deduction_point">
+						<el-input
+							v-model="formData.timeout_deduction_point"
+							oninput="value=value.replace(/[^\d]/g,'')"
+							placeholder="请输入每日扣分"
+							style="width: 150px;"
+						></el-input>
+						B分/每天, 扣分上限 &nbsp;
+						<el-input
+							v-model="formData.timeout_deduction_point_limit"
+							oninput="value=value.replace(/[^\d]/g,'')"
+							placeholder="请输入扣分上限"
+							style="width: 150px;"
+						></el-input>
+						B分
+					</el-form-item>
+					<el-form-item v-show="false" prop="ahead_award_point_limit"></el-form-item>
+					<el-form-item v-show="false" prop="timeout_deduction_point_limit"></el-form-item>
+					<el-form-item>
+						<div class="flex-box-end">
+							<el-button @click="resetForm('formData')">取消</el-button>
+							<el-button type="primary" @click="sub('formData')">提交</el-button>
+						</div>
+					</el-form-item>
+				</el-form>
+			</div>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import moment from 'moment';
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import upload from '@/components/upload';
+export default {
+	name: 'bonusPoints',
+	props: {
+		employee_not_select: {
+			type: Array,
+			default: () => {
+				return [];
+			}
+		},
+		dialogVisible: {
+			type: Boolean,
+			default: false
+		},
+		showTitle: {
+			type: String,
+			default: ''
+		},
+		trees_ab: {
+			type: Object,
+			default: ()=>{
+				return {};
+			}
+		},
+	},
+	data() {
+		return {
+			isSelectType:false,//是否选择分类
+			//图片附件
+			Xtoken: { 'X-Token': this.$getToken() },
+			fileList: [],
+			max: 0,
+			min: 0,
+			treeName: '',
+
+			dept_name: [],
+			dept_tree: [],
+			forTheTaskLoading: false,
+			formData: {
+				task_type: '1',
+				pt_id: 3,
+				task_name: '',
+				task_remark: '',
+				base_point: '0',
+				range_type: 0,
+				rule_id: 0,
+				rule_value:[],
+				file_list: [],
+				tree_echo: [],//用于编辑任务时的规则回显
+				expire_time: moment().format('YYYY-MM-DD 18:00'),
+				task_expire_day: '',
+				targets: [],
+				reviewer_id: '',
+				task_cycle: 0,
+				timeout_deduction_point: null,
+				timeout_deduction_point_limit: null,
+				ahead_award_point: null,
+				ahead_award_point_limit: null,
+				dept_ids: []
+			},
+			point_types: [],
+			// 审批人
+			reviewerName: null,
+			reviewer_not_select: [],
+			reviewer_selected: { dept: [], employee: [] },
+			show_reviewer_selector: false,
+
+			// 重复周期
+			task_cycle_arr: [{ value: 0, name: '不重复' }, { value: 1, name: '每天重复' }, { value: 2, name: '每周重复' }, { value: 3, name: '每月重复' }],
+			// 周期时间
+			columns1: [
+				{ name: '01:00', value: 1 },
+				{ name: '02:00', value: 2 },
+				{ name: '03:00', value: 3 },
+				{ name: '04:00', value: 4 },
+				{ name: '05:00', value: 5 },
+				{ name: '06:00', value: 6 },
+				{ name: '07:00', value: 7 },
+				{ name: '08:00', value: 8 },
+				{ name: '09:00', value: 9 },
+				{ name: '10:00', value: 10 },
+				{ name: '11:00', value: 11 },
+				{ name: '12:00', value: 12 },
+				{ name: '13:00', value: 13 },
+				{ name: '14:00', value: 14 },
+				{ name: '15:00', value: 15 },
+				{ name: '16:00', value: 16 },
+				{ name: '17:00', value: 17 },
+				{ name: '18:00', value: 18 },
+				{ name: '19:00', value: 19 },
+				{ name: '20:00', value: 20 },
+				{ name: '21:00', value: 21 },
+				{ name: '22:00', value: 22 },
+				{ name: '23:00', value: 23 },
+				{ name: '24:00', value: 24 }
+			],
+			columns2: [
+				{ name: '周一', value: 1 },
+				{ name: '周二', value: 2 },
+				{ name: '周三', value: 3 },
+				{ name: '周四', value: 4 },
+				{ name: '周五', value: 5 },
+				{ name: '周六', value: 6 },
+				{ name: '周日', value: 7 }
+			],
+			columns3: [
+				{ name: '1号', value: 1 },
+				{ name: '2号', value: 2 },
+				{ name: '3号', value: 3 },
+				{ name: '4号', value: 4 },
+				{ name: '5号', value: 5 },
+				{ name: '6号', value: 6 },
+				{ name: '7号', value: 7 },
+				{ name: '8号', value: 8 },
+				{ name: '9号', value: 9 },
+				{ name: '10号', value: 10 },
+				{ name: '11号', value: 11 },
+				{ name: '12号', value: 12 },
+				{ name: '13号', value: 13 },
+				{ name: '14号', value: 14 },
+				{ name: '15号', value: 15 },
+				{ name: '16号', value: 16 },
+				{ name: '17号', value: 17 },
+				{ name: '18号', value: 18 },
+				{ name: '19号', value: 19 },
+				{ name: '20号', value: 20 },
+				{ name: '21号', value: 21 },
+				{ name: '22号', value: 22 },
+				{ name: '23号', value: 23 },
+				{ name: '24号', value: 24 },
+				{ name: '25号', value: 25 },
+				{ name: '26号', value: 26 },
+				{ name: '27号', value: 27 },
+				{ name: '28号', value: 28 },
+				{ name: '29号', value: 29 },
+				{ name: '30号', value: 30 },
+				{ name: '31号', value: 31 }
+			],
+
+			// 部门可见
+			deptVisibleName: null,
+			dept_not_select: [],
+			dept_employee_list: [],
+			dept_selected: { dept: [], employee: [] },
+			show_employee_selector: false
+		};
+	},
+	components: { EmployeeSelector, upload },
+	watch: {
+		isSelectType(val) {
+			let item = this.formData;
+			this.max = 0;
+			this.min = 0;
+			this.treeName = '';
+			item.tree_echo = [];
+			item.task_remark = '';
+			item.base_point = '0';
+			item.range_type = 0;
+			item.rule_id='';
+			item.item_id = 0;
+			item.rule_value=[];
+		},
+		'formData.task_cycle'(val) {
+			if (val) {
+				this.formData.task_expire_day = 1;
+			} else {
+				this.formData.expire_time = moment().format('YYYY-MM-DD 18:00');
+			}
+		},
+		'formData.pt_id'(val) {
+			let item = this.formData
+			item.tree_echo = []
+			this.max = 0;
+			this.min = 0;
+			this.treeName = ''
+			item.task_remark = '';
+			item.base_point = '0';
+			item.range_type = 0;
+			item.item_id = 0;
+			item.rule_id='';
+			item.rule_value=[];
+		}
+	},
+	mounted() {
+		this.point_types = this.$getCache('types');
+		this.getDepartment();
+	},
+	methods: {
+		// 规则分类变化关闭dewn
+		ruleChange(value) {
+			console.log(value)
+			const item = this.formData;
+			if (value.length > 0) {
+				item.rule_id = value[value.length - 1];
+			} else {
+				item.rule_id = '';
+				item.rule_value = '';
+			}
+			this.$refs.ruleCascader.dropDownVisible=false;
+		},
+		
+		trees_PtId(id) {
+			return id == 2 ? 'A分' : 'B分'
+		},
+		ruleItemChange(val){
+			let item = this.formData
+			if(val.length>0){
+				let data = this.$refs.ruleItem.getCheckedNodes()[0].data;//当前选中的节点数据
+				item.task_remark = data.name;
+				this.max = data.max_point * 1;
+				this.min = data.min_point * 1;
+				this.treeName = data.name;
+				item.base_point = data.min_point;
+				item.range_type = data.range_type;
+				item.rule_id = data.pid;
+				item.item_id = data.id;
+			}else{
+				item.task_remark = '';
+				this.treeName = '';
+				this.max = 0;
+				this.min = 0;
+				item.base_point = '0';
+				item.range_type = 0;
+				item.rule_id = 0;
+				item.item_id = 0;
+			}
+		},
+
+		handleChange(val) {
+			let data = [];
+			for (let i in val) {
+				data.push(val[i][val[i].length - 1]);
+			}
+			this.formData.dept_ids = data;
+		},
+		submitMembers(name) {
+			this.$refs[name].confirm(); //调用组件的confirm();
+		},
+		//关闭
+		handleClose(done) {
+			done();
+		},
+		sub(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					this.saveFun(formName);
+				}
+			});
+		},
+		resetForm(formName) {
+			this.$emit('update:dialogVisible', false);
+			this.$refs[formName].resetFields();
+			this.executorName = '';
+			this.reviewerName = '';
+			this.deptVisibleName = '';
+			this.treeName = '';
+			this.fileList = [];
+			this.dept_name = [];
+			this.formData.dept_ids=[];
+			this.formData.range_type=0;
+			this.formData.rule_id=0;
+			this.formData.item_id=0;
+			this.formData.tree_echo = [],
+			this.reviewer_selected = { dept: [], employee: [] };
+			this.dept_selected = { dept: [], employee: [] };
+			console.log(this.formData)
+		},
+		ahead_timeout(item, arr, codes, code) {
+			if (item) {
+				if (arr) {
+					if (Number(item) > Number(arr)) {
+						this.$message.warning(code + '上限不能小于每日' + code);
+						return true;
+					}
+				} else {
+					this.$message.warning(codes + '不为0时,' + code + '上限不能为空');
+					return true;
+				}
+			}
+		},
+		deletedata(data, arr) {
+			data[arr] && data[arr] != 0 ? '' : delete data[arr];
+		},
+		// 提交
+		saveFun(formName) {
+			// 没有选择重复任务的时候
+			// /api/integral/task/publish
+			// 选择重复任务之后
+			// /api/integral/schedule/publish/task
+			let self = this;
+			let data = JSON.parse(JSON.stringify(self.formData));
+			if (data.task_cycle == 0) {
+				delete data.task_cycle;
+				delete data.task_expire_day;
+				delete data.targets;
+				data.task_remark ? '' : delete data.task_remark;
+			} else {
+				delete data.expire_time;
+				data.task_remark ? '' : delete data.task_remark;
+			}
+			if (!data.ahead_award_point && data.ahead_award_point_limit) {
+				this.$message.warning('奖分上限不为0时每日奖分不能为空');
+				return;
+			} else if (data.ahead_award_point && !data.ahead_award_point_limit) {
+				this.$message.warning('每日奖分不为0时奖分上限不能为空');
+				return;
+			}
+			if (!data.timeout_deduction_point && data.timeout_deduction_point_limit) {
+				this.$message.warning('扣分上限不为0时每日扣分不能为空');
+				return;
+			} else if (data.timeout_deduction_point && !data.timeout_deduction_point_limit) {
+				this.$message.warning('每日扣分不为0时扣分上限不能为空');
+				return;
+			}
+			if (this.ahead_timeout(data.ahead_award_point, data.ahead_award_point_limit, '提前奖分', '奖分')) return;
+			if (this.ahead_timeout(data.timeout_deduction_point, data.timeout_deduction_point_limit, '逾期扣分', '扣分')) return;
+			if (!this.$getIsCreator('creator') || this.$getUserData().point_config.point_limit.length != 0) {
+				let entry_limit = Number(this.$getUserData().point_config.point_limit[1].point);
+				if (entry_limit > 0) {
+					if (data.ahead_award_point > entry_limit || data.timeout_deduction_point > entry_limit) {
+						this.$message.warning('每日奖扣分 不能超过您的奖扣分权限(您的奖扣分权限:' + entry_limit + '分)');
+						return;
+					}
+					if (data.ahead_award_point_limit > entry_limit * 10 || data.timeout_deduction_point_limit > entry_limit * 10) {
+						this.$message.warning('奖扣分上限不能超过' + entry_limit * 10 + '分(您的奖扣分权限' + entry_limit + '分*10)');
+						return;
+					}
+				}
+			}
+			let add = ['ahead_award_point', 'ahead_award_point_limit', 'timeout_deduction_point', 'timeout_deduction_point_limit'];
+			add.forEach(item => {
+				this.deletedata(data, item);
+			});
+
+			this.forTheTaskLoading = true;
+			self.$axios('post', self.formData.task_cycle == 0 ? '/api/integral/task/publish' : '/api/integral/schedule/publish/task', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.$parent.get_list();
+						this.resetForm('formData');
+						self.$message.success(res.data.msg);
+					} else {
+						self.$message.error(res.data.msg);
+					}
+				})
+				.finally(() => {
+					setTimeout(() => {
+						this.forTheTaskLoading = false;
+					}, 300);
+				});
+		},
+		// 审核人
+		reviewer_confirm(data) {
+			this.reviewer_selected = { dept: [], employee: [] };
+			this.formData.reviewer_id = '';
+			this.reviewerName = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				this.reviewer_selected = data;
+				this.formData.reviewer_id = data.employee[0].id;
+				this.reviewerName = data.employee[0].name;
+			}
+			this.show_reviewer_selector = false;
+		},
+		// 审核人 end
+		// 部门可见
+		dept_confirm(data) {
+			this.dept_selected = { dept: [], employee: [] };
+			this.formData.dept_ids = [];
+			this.deptVisibleName = '';
+			if (data.dept !== null && data.dept.length != 0) {
+				this.dept_selected = data;
+				data.dept.forEach(element => {
+					this.formData.dept_ids.push(element.dept_id);
+					this.deptVisibleName += element.dept_name + ',';
+				});
+			}
+			this.show_employee_selector = false;
+		},
+		// 部门可见 end
+		closeDialog() {
+			this.resetForm('formData');
+		},
+
+		//获取部门
+		getDepartment() {
+			this.$axios('get', '/api/department/tree').then(res => {
+				this.dept_tree = this.getTreeData(res.data.data.list);
+			});
+		},
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i]._child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i]._child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i]._child);
+				}
+			}
+			return data;
+		},
+		handleFilesSuccess(response, file, fileList) {
+			this.fileFun(file, fileList)
+		},
+		onFilePreView(file) {
+			if (file.response) {
+				window.open(file.response.url, '_blank');
+			}
+		},
+		onFileRemove(file, fileList) {
+			this.fileFun(file, fileList)
+		},
+		fileFun(file, fileList){
+			this.fileList = fileList;
+			this.formData.file_list = []
+			fileList.forEach((item, index) => {
+				this.formData.file_list.push(item.url);
+			});
+		},
+		// 附件上传
+		beforeUpload(file) {
+			const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
+			const isLt2M = file.size / 1024 / 1024 < 1;
+			if (!isJPG) {
+				this.$message.error('上传头像图片只能是 JPEG,PNG,JPG 格式!');
+			}
+			if (!isLt2M) {
+				this.$message.error('上传头像图片大小不能超过 2MB!');
+			}
+			return isJPG && isLt2M;
+		},
+		
+	}
+};
+</script>
+<style lang="scss">
+// .el-cascader-menu .el-cascader-menu__wrap .el-scrollbar__view li.el-cascader-node {
+//   height: auto;
+//   max-width: 500px;
+//   .el-cascader-node__label {
+//     white-space: initial;
+//     overflow: initial;
+//     text-overflow: initial;
+//   }
+// }
+</style>

+ 773 - 0
src/views/common/rewardTaskAmend.vue

@@ -0,0 +1,773 @@
+<template>
+	<div>
+		<!-- 悬赏任务弹窗 -->
+		<el-dialog :title="showTitle" :visible.sync="dialogVisible" :close-on-click-modal="false" :before-close="closeDialog" width="600px" top="5%">
+			<div v-loading="forTheTaskLoading">
+				<el-form :model="formData" ref="formData" label-width="80px">
+					<el-form-item
+						label="任务内容"
+						prop="task_name"
+						:rules="[{ required: true, message: '请填写任务内容', trigger: 'blur' }, { min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }]"
+					>
+						<el-input type="textarea" rows="3" maxlength="20" show-word-limit v-model="formData.task_name" placeholder="请输入任务内容(限20字)" class="reward_textarea"></el-input>
+					</el-form-item>
+					<el-form-item label="积分类型" prop="pt_id" :rules="[{ required: true, message: '请选择积分类型', trigger: 'blur' }]">
+						<el-radio-group v-model="formData.pt_id" @change="from_ptId">
+							<el-radio v-for="(item, index) in point_types" :key="index" v-show="item.code !== 'JX'" :label="item.id">{{ item.name }}</el-radio>
+						</el-radio-group>
+					</el-form-item>
+					
+					<el-form-item label="指定规则">
+						 <el-switch  v-model="isSelectType" @change="isSelectTypeC"></el-switch>
+					</el-form-item>
+					<!-- 选择分类 -->
+					<el-form-item class="test_cascader_id" label="选择分类"	v-if="!isSelectType"
+						prop="rule_value"
+						:rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]"
+					>
+						<el-cascader
+							v-model="formData.rule_value"
+							ref="ruleCascader"
+							:popper-class="'ruleClass'"
+							filterable
+							clearable
+							:options="trees_ab.rule_tree_all"
+							@change="ruleChange2"
+							:props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"
+						></el-cascader>
+					</el-form-item>
+					<!-- 选择规则 -->
+					<el-form-item :label="trees_PtId(formData.pt_id) +'规则'" v-else	prop="tree_echo" :rules="[{ required: true, message: '请选择规则', trigger: 'blur' }]"
+					>
+						<el-cascader
+							v-model="formData.tree_echo"
+							ref="ruleItem"
+							:popper-class="'itemClass'"
+							filterable
+							clearable
+							:options="formData.pt_id == 2 ? trees_ab.A : trees_ab.B"
+							@change="ruleItemChange"
+							:show-all-levels="false"
+							:props="{ children: 'child', label: 'name', value: 'id' }"
+						></el-cascader>
+					</el-form-item>
+					
+					<el-form-item prop="range_type" v-if="formData.range_type != 0">
+						<div style="line-height: 24px;" v-show="formData.range_type == 1">
+							{{ min }}
+							<span class="blue">{{ trees_PtId(formData.pt_id) }}</span>
+						</div>
+						<div style="line-height: 24px;" v-show="formData.range_type == 2">
+							{{ min }} ~ {{ max }}
+							<span class="blue">{{ trees_PtId(formData.pt_id) }}</span>
+						</div>
+						<div style="line-height: 24px;">{{ treeName }}</div>
+					</el-form-item>
+
+					<el-form-item label="任务积分" prop="base_point" :rules="[{ required: true, message: '请填写任务积分', trigger: 'blur' }]">
+						<el-input-number v-if="formData.range_type == 0" v-model.number="formData.base_point"></el-input-number>
+						<el-input-number v-else :disabled="formData.range_type == 1" v-model.number="formData.base_point" :min="min" :max="max"></el-input-number>
+					</el-form-item>
+					<el-form-item label="审批人" prop="reviewer_id" :rules="[{ required: true, message: '请选择审批人', trigger: 'change' }]">
+						<el-row>
+							<el-col :span="18">
+								<el-input auto-complete="off" v-model="reviewerName" placeholder="请选择审批人"></el-input>
+								<div @click="show_reviewer_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+							</el-col>
+						</el-row>
+						<el-dialog title="选择审批人" width="640px" :visible.sync="show_reviewer_selector" append-to-body :before-close="handleClose">
+							<EmployeeSelector
+								v-if="show_reviewer_selector"
+								ref="members"
+								:multi="false"
+								:isCreatorSelect="true"
+								:employee_list="reviewer_employee_list"
+								:use_Administrator_list="true"
+								:selected="reviewer_selected"
+								@confirm="reviewer_confirm"
+							/>
+							<span slot="footer" class="dialog-footer">
+								<el-button @click="show_reviewer_selector = false">取 消</el-button>
+								<el-button type="primary" @click="submitMembers('members')">确 定</el-button>
+							</span>
+						</el-dialog>
+					</el-form-item>
+
+
+					<el-form-item label="截止日期" prop="expire_time" v-if="formData.task_cycle == 0" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-date-picker
+							v-model="formData.expire_time"
+							type="datetime"
+							placeholder="选择日期时间"
+							format="yyyy-MM-dd HH:mm"
+							value-format="yyyy-MM-dd HH:mm"
+							default-time="18:00"
+						></el-date-picker>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 1" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns1" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 2" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns2" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 3" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns3" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="任务描述" prop="task_remark" :rules="[{ max: 300, message: '长度不能超过 300 个字', trigger: 'blur' }]">
+						<el-input type="textarea" :rows="5" v-model="formData.task_remark" maxlength="300" show-word-limit placeholder="请输入任务内容(限300字)"></el-input>
+					</el-form-item>
+					
+					<el-form-item label="图片">
+						<upload
+							:headers="Xtoken"
+							class="avatar-uploader"
+							:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
+							:show-file-list="true"
+							:file-list="fileList"
+							:on-success="handleFilesSuccess"
+							:on-preview="onFilePreView"
+							:before-upload="beforeUpload"
+							:on-remove="onFileRemove"
+							:limit="3"
+							:multiple="true"
+							ref="clearPicture"
+						>
+							<el-button size="small" type="primary">点击上传</el-button>
+							(最多选择3张)
+						</upload>
+					</el-form-item>
+					<el-form-item label="谁可以看" prop="dept_ids">
+						<el-cascader
+							size="medium"
+							class="date-picker-width"
+							v-model="dept_name"
+							@change="handleChange"
+							:options="dept_tree"
+							collapse-tags
+							:props="{ checkStrictly: true, value: 'id', label: 'name', multiple: true, children: '_child' }"
+							ref="depts"
+							clearable
+							placeholder="全公司"
+						></el-cascader>
+						<span style="color:#b5b7bb;padding-left:10px;">选中的部门可查看或领取任务</span>
+					</el-form-item>
+
+					<div style="margin-left: 80px; margin-bottom: 8px;">以天为单位,每 提前/逾期 一天 加分/扣分</div>
+					<el-form-item label="提前奖分" prop="ahead_award_point">
+						<el-input v-model="formData.ahead_award_point" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入每日奖分" style="width: 150px;"></el-input> B分/每天,
+						奖分上限 &nbsp;<el-input v-model="formData.ahead_award_point_limit" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入奖分上限" style="width: 150px;"></el-input> B分
+					</el-form-item>
+					<el-form-item label="逾期扣分"  prop="timeout_deduction_point" >
+						<el-input v-model="formData.timeout_deduction_point" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入每日扣分" style="width: 150px;"></el-input> B分/每天,
+						扣分上限 &nbsp;<el-input v-model="formData.timeout_deduction_point_limit" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入扣分上限" style="width: 150px;"></el-input> B分
+					</el-form-item>
+					<el-form-item v-show="false" prop="ahead_award_point_limit" ></el-form-item>
+					<el-form-item v-show="false" prop="timeout_deduction_point_limit" ></el-form-item>
+
+					<el-form-item>
+						<div class="flex-box-end">
+							<el-button @click="resetForm('formData')">取消</el-button>
+							<el-button type="primary" @click="sub('formData')">确认修改</el-button>
+						</div>
+					</el-form-item>
+				</el-form>
+			</div>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import moment from 'moment';
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import upload from '@/components/upload';
+export default {
+	name: 'bonusPoints',
+	props: {
+		rewardTaskAmendData: {
+			type: Object
+		},
+		employee_not_select: {
+			type: Array,
+			default: () => {
+				return [];
+			}
+		},
+		dialogVisible: {
+			type: Boolean,
+			default: false
+		},
+		showTitle: {
+			type: String,
+			default: ''
+		},
+		trees_ab: {
+			type: Object,
+			default: ()=>{
+				return {};
+			}
+		}
+	},
+	data() {
+		return {
+			isSelectType:false,//是否选择分类
+			//图片附件
+			Xtoken: { 'X-Token': this.$getToken() },
+			fileList: [],
+			max: 0,
+			min: 0,
+			treeName: '',
+
+			dept_name: [],
+			dept_tree: [],
+			forTheTaskLoading: false,
+			formData: {
+				tree_echo: [],//用于编辑任务时的规则回显
+				file_list: [],
+				range_type: 0,
+				rule_id: 0,
+				rule_value:[],
+				id: 0,
+				task_type: '1',
+				pt_id: 2,
+				task_name: '',
+				task_remark: '',
+				base_point: '0',
+				expire_time: moment().format('YYYY-MM-DD 18:00'),
+				task_expire_day: '',
+				targets: [],
+				reviewer_id: '',
+				task_cycle: 0,
+				timeout_deduction_point: null,
+				timeout_deduction_point_limit: null,
+				ahead_award_point: null,
+				ahead_award_point_limit: null,
+				dept_ids: null
+			},
+			point_types: [],
+			arr:[],
+			// 审批人
+			reviewerName: null,
+			reviewer_not_select: [],
+			reviewer_employee_list: [],
+			reviewer_selected: { dept: [], employee: [] },
+			show_reviewer_selector: false,
+
+			// 重复周期
+			task_cycle_arr: [{ value: 0, name: '不重复' }, { value: 1, name: '每天重复' }, { value: 2, name: '每周重复' }, { value: 3, name: '每月重复' }],
+			// 周期时间
+			columns1: [
+				{ name: '01:00', value: 1 },
+				{ name: '02:00', value: 2 },
+				{ name: '03:00', value: 3 },
+				{ name: '04:00', value: 4 },
+				{ name: '05:00', value: 5 },
+				{ name: '06:00', value: 6 },
+				{ name: '07:00', value: 7 },
+				{ name: '08:00', value: 8 },
+				{ name: '09:00', value: 9 },
+				{ name: '10:00', value: 10 },
+				{ name: '11:00', value: 11 },
+				{ name: '12:00', value: 12 },
+				{ name: '13:00', value: 13 },
+				{ name: '14:00', value: 14 },
+				{ name: '15:00', value: 15 },
+				{ name: '16:00', value: 16 },
+				{ name: '17:00', value: 17 },
+				{ name: '18:00', value: 18 },
+				{ name: '19:00', value: 19 },
+				{ name: '20:00', value: 20 },
+				{ name: '21:00', value: 21 },
+				{ name: '22:00', value: 22 },
+				{ name: '23:00', value: 23 },
+				{ name: '24:00', value: 24 }
+			],
+			columns2: [
+				{ name: '周一', value: 1 },
+				{ name: '周二', value: 2 },
+				{ name: '周三', value: 3 },
+				{ name: '周四', value: 4 },
+				{ name: '周五', value: 5 },
+				{ name: '周六', value: 6 },
+				{ name: '周日', value: 7 }
+			],
+			columns3: [
+				{ name: '1号', value: 1 },
+				{ name: '2号', value: 2 },
+				{ name: '3号', value: 3 },
+				{ name: '4号', value: 4 },
+				{ name: '5号', value: 5 },
+				{ name: '6号', value: 6 },
+				{ name: '7号', value: 7 },
+				{ name: '8号', value: 8 },
+				{ name: '9号', value: 9 },
+				{ name: '10号', value: 10 },
+				{ name: '11号', value: 11 },
+				{ name: '12号', value: 12 },
+				{ name: '13号', value: 13 },
+				{ name: '14号', value: 14 },
+				{ name: '15号', value: 15 },
+				{ name: '16号', value: 16 },
+				{ name: '17号', value: 17 },
+				{ name: '18号', value: 18 },
+				{ name: '19号', value: 19 },
+				{ name: '20号', value: 20 },
+				{ name: '21号', value: 21 },
+				{ name: '22号', value: 22 },
+				{ name: '23号', value: 23 },
+				{ name: '24号', value: 24 },
+				{ name: '25号', value: 25 },
+				{ name: '26号', value: 26 },
+				{ name: '27号', value: 27 },
+				{ name: '28号', value: 28 },
+				{ name: '29号', value: 29 },
+				{ name: '30号', value: 30 },
+				{ name: '31号', value: 31 }
+			],
+
+			// 部门可见
+			deptVisibleName: null,
+			dept_not_select: [],
+			dept_employee_list: [],
+			dept_selected: { dept: [], employee: [] },
+			show_employee_selector: false,
+			chapterArr: [],
+
+			oneruleId: [],
+			echoGather: []
+		};
+	},
+	components: { EmployeeSelector, upload },
+	watch: {
+		'formData.task_cycle'(val) {
+			if (val) {
+				this.formData.task_expire_day = 1;
+			} else {
+				this.formData.expire_time = moment().format('YYYY-MM-DD 18:00');
+			}
+		},
+		rewardTaskAmendData(val) {
+			this.formData.id = this.rewardTaskAmendData.id; //任务id
+			this.formData.range_type = 0;
+			this.formData.pt_id = this.rewardTaskAmendData.pt_id; //积分种类id
+			this.formData.task_name = this.rewardTaskAmendData.task_name; //任务名
+			this.formData.task_remark = this.rewardTaskAmendData.task_remark; //任务详细描述
+			this.formData.base_point = this.rewardTaskAmendData.point_config.base_point; //任务参考积分
+			this.formData.expire_time = this.rewardTaskAmendData.expire_time; //截至时间
+			this.reviewerName = this.rewardTaskAmendData.reviewer_name; //审批者id
+			this.formData.reviewer_id = this.rewardTaskAmendData.reviewer_id;
+			this.reviewer_selected.employee = [
+				{ id: this.rewardTaskAmendData.reviewer_id, img_url: this.rewardTaskAmendData.img_url, name: this.rewardTaskAmendData.reviewer_name }
+			];
+			let add = ['ahead_award_point', 'ahead_award_point_limit', 'timeout_deduction_point', 'timeout_deduction_point_limit']
+			add.forEach(item =>{
+				this.deductionPoint(item)
+			})
+			let department_infoName = '';
+			let deptIDs = [];
+			this.dept_selected = { dept: [], employee: [] };
+			for (let i in this.rewardTaskAmendData.department_info) {
+				deptIDs.push(this.rewardTaskAmendData.department_info[i].id);
+				let department_infoDept = {};
+				department_infoDept.dept_id = this.rewardTaskAmendData.department_info[i].id;
+				department_infoDept.dept_name = this.rewardTaskAmendData.department_info[i].name;
+				department_infoDept.avatar = 'static/images/e66f.jpg';
+				this.dept_selected.dept.push(department_infoDept);
+				department_infoName += this.rewardTaskAmendData.department_info[i].name + ',';
+			}
+			this.deptVisibleName = department_infoName;
+			this.formData.dept_ids = deptIDs; //可见范围
+
+			let deptIDdata = deptIDs;
+			for (let i in deptIDdata) {
+				this.getTreeDatas(this.dept_tree, deptIDdata[i]);
+			}
+			this.dept_name = this.echoGather;
+
+			let filtList = []
+			this.rewardTaskAmendData.task_file_list.forEach((item, index) =>{
+				filtList.push({name: item ,url:item, response: { url:item }})
+			})
+			this.fileList = filtList
+			this.fileFun('', filtList)
+			if(this.rewardTaskAmendData.point_config.item_info){
+				let itemInfo = this.rewardTaskAmendData.point_config.item_info
+				// 获取规则的上级分类
+				this.arr=[itemInfo.id];
+				this.ruleChange(itemInfo.rule_id)
+				this.formData.tree_echo = this.arr
+				this.isSelectType=true;
+				this.$nextTick(_=>{
+					this.arr=[];
+					this.ruleItemChange(this.formData.tree_echo)
+				})
+			}else if(this.rewardTaskAmendData.rule_id){//指定了分类
+				this.isSelectType=false;
+				this.formData.rule_id = this.rewardTaskAmendData.rule_id;
+				this.formData.rule_value = this.returnRuleVal(this.rewardTaskAmendData.rule_id,[]);
+			}
+		}
+	},
+	mounted() {
+		this.point_types = this.$getCache('types');
+		this.getDepartment();
+	},
+	methods: {
+		// 规则分类变化关闭dewn
+		ruleChange2(value) {
+			const item = this.formData;
+			if (value.length > 0) {
+				item.rule_id = value[value.length - 1];
+			} else {
+				item.rule_id = '';
+				item.rule_value = '';
+			}
+			this.$refs.ruleCascader.dropDownVisible=false;
+		},
+		isSelectTypeC(){
+			let item = this.formData;
+			this.max = 0;
+			this.min = 0;
+			this.treeName = '';
+			item.tree_echo = [];
+			item.task_remark = '';
+			item.base_point = '0';
+			item.range_type = 0;
+			item.item_id = 0;
+			item.rule_id=0;
+			item.rule_value=[];
+		},
+		returnRuleVal(rule_id,arr){
+			arr.unshift(rule_id)
+			let list = this.trees_ab.rule_tree.filter(x => x.id == rule_id)
+			if(list[0].pid != 0){
+				this.returnRuleVal(list[0].pid,arr)
+			}
+			return arr;
+		},
+		ruleChange(aid){
+			this.arr.unshift(aid);
+			let list = this.trees_ab.rule_tree.filter(x => x.id == aid)
+			if(list[0].pid == 0){
+				return false
+			}else{
+				this.ruleChange(list[0].pid)
+			}
+		},
+		from_ptId(val){
+			let item = this.formData
+			item.tree_echo = []
+			this.max = 0;
+			this.min = 0;
+			this.treeName = ''
+			item.task_remark = '';
+			item.base_point = '0';
+			item.range_type = 0;
+			item.rule_id=0;
+			item.rule_value=[];
+		},
+		handleFilesSuccess(response, file, fileList) {
+			this.fileFun(file, fileList)
+		},
+		onFilePreView(file) {
+			if (file.response) {
+				window.open(file.response.url, '_blank');
+			}
+		},
+		onFileRemove(file, fileList) {
+			this.fileFun(file, fileList)
+		},
+		fileFun(file, fileList){
+			this.fileList = fileList;
+			this.formData.file_list = []
+			fileList.forEach((item, index) => {
+				this.formData.file_list.push(item.url);
+			});
+		},
+		// 附件上传
+		beforeUpload(file) {
+			const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
+			const isLt2M = file.size / 1024 / 1024 < 1;
+			if (!isJPG) {
+				this.$message.error('上传头像图片只能是 JPEG,PNG,JPG 格式!');
+			}
+			if (!isLt2M) {
+				this.$message.error('上传头像图片大小不能超过 2MB!');
+			}
+			return isJPG && isLt2M;
+		},
+		
+		trees_PtId(id) {
+			return id == 2 ? 'A分' : 'B分'
+		},
+		ruleItemChange(val){
+			let item = this.formData
+			if(val.length>0){
+				let data = this.$refs.ruleItem.getCheckedNodes()[0].data;//当前选中的节点数据
+				item.task_remark = data.name;
+				this.treeName = data.name;
+				this.max = data.max_point * 1;
+				this.min = data.min_point * 1;
+				item.base_point = data.min_point;
+				item.range_type = data.range_type;
+				item.rule_id = data.pid;
+				item.item_id = data.id;
+			}else{
+				item.task_remark = '';
+				this.treeName = '';
+				this.max = 0;
+				this.min = 0;
+				item.base_point = '0';
+				item.range_type = 0;
+				item.rule_id = 0;
+				item.item_id = 0;
+			}
+		},
+
+
+
+		deductionPoint(item){
+			if (this.rewardTaskAmendData.point_config[item] != '0') {
+				this.formData[item] = this.rewardTaskAmendData.point_config[item];
+			} else {
+				this.formData[item] = '';
+			}
+		},
+		handleChange(val) {
+			let data = [];
+			for (let i in val) {
+				data.push(val[i][val[i].length - 1]);
+			}
+			this.formData.dept_ids = data;
+		},
+
+		submitMembers(name) {
+			this.$refs[name].confirm(); //调用组件的confirm();
+		},
+		//关闭
+		handleClose(done) {
+			done();
+		},
+		sub(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					this.saveFun(formName);
+				}
+			});
+		},
+		resetForm(formName) {
+			this.echoGather = [];
+			this.$emit('update:dialogVisible', false);
+			this.$refs[formName].resetFields();
+			this.fileList = [];
+			this.executorName = '';
+			this.reviewerName = '';
+			this.dept_name = [];
+			this.treeName = '';
+			this.formData.tree_echo = [],
+			this.dept_selected = { dept: [], employee: [] };
+			this.formData.range_type=0;
+			this.formData.rule_id=0;
+			this.formData.item_id=0;
+		},
+		ahead_timeout(item,arr,codes,code){
+			if(item){
+				if(arr){
+					if(Number(item) > Number(arr)){
+						this.$message.warning(code +'上限不能小于每日'+ code)
+						return true
+					}
+				}else{
+					this.$message.warning( codes + '不为0时,'+ code +'上限不能为空')
+					return true
+				}
+			}
+		},
+		deletedata(data,arr){
+			data[arr] && data[arr] != 0 ?  '' : delete data[arr]
+		},
+		// 提交
+		saveFun(formName) {
+			let self = this;
+			let data = JSON.parse(JSON.stringify(self.formData));
+			data.task_remark ? '' : delete data.task_remark;
+			data.timeout_deduction_point ? '' : delete data.timeout_deduction_point;
+			// if(data.timeout_deduction_point == ""){
+			//   data.timeout_deduction_point = null
+			// }
+			// if(data.task_remark == ""){
+			//   data.task_remark = null
+			// }
+			// if(data.task_cycle == 0){
+			//   delete data.task_cycle
+			//   delete data.task_expire_day
+			//   delete data.targets
+			//   data.task_remark?'':delete data.task_remark
+			//   data.timeout_deduction_point?'':delete data.timeout_deduction_point
+			// }else{
+			//   delete data.expire_time
+			//   data.task_remark?'':delete data.task_remark
+			//   data.timeout_deduction_point?'':delete data.timeout_deduction_point
+			// }
+			
+			if(!data.ahead_award_point && data.ahead_award_point_limit){
+				this.$message.warning('奖分上限不为0时每日奖分不能为空')
+				return
+			}else if(data.ahead_award_point && !data.ahead_award_point_limit){
+				this.$message.warning('每日奖分不为0时奖分上限不能为空')
+				return
+			}
+			if(!data.timeout_deduction_point && data.timeout_deduction_point_limit){
+				this.$message.warning('扣分上限不为0时每日扣分不能为空')
+				return
+			}else if(data.timeout_deduction_point && !data.timeout_deduction_point_limit){
+				this.$message.warning('每日扣分不为0时扣分上限不能为空')
+				return
+			}
+			if(this.ahead_timeout(data.ahead_award_point,data.ahead_award_point_limit,'提前奖分','奖分')) return
+			if(this.ahead_timeout(data.timeout_deduction_point,data.timeout_deduction_point_limit,'逾期扣分','扣分')) return
+			
+			if(!this.$getIsCreator('creator')||this.$getUserData().point_config.point_limit.length!=0){
+				let entry_limit =  Number(this.$getUserData().point_config.point_limit[1].point)
+				if(entry_limit > 0){
+					if(data.ahead_award_point > entry_limit || data.timeout_deduction_point > entry_limit ){
+						this.$message.warning('每日奖扣分 不能超过您的奖扣分权限(您的奖扣分权限:' + entry_limit + '分)')
+						return
+					}
+					if(data.ahead_award_point_limit > entry_limit*10 || data.timeout_deduction_point_limit > entry_limit*10 ){
+						this.$message.warning('奖扣分上限不能超过' + entry_limit*10 + '分(您的奖扣分权限' + entry_limit + '分*10)')
+						return
+					}
+				}
+			}
+			
+			let add = ['ahead_award_point', 'ahead_award_point_limit', 'timeout_deduction_point', 'timeout_deduction_point_limit']
+			add.forEach(item =>{
+				this.deletedata(data,item)
+			})
+
+			this.forTheTaskLoading = true;
+			self.$axios('post', '/api/integral/task/update', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.$parent.get_list();
+						this.resetForm('formData')
+						// this.dept_selected = { dept: [], employee: [] };
+						// self.executorName = '';
+						// self.reviewerName = '';
+						// this.dept_name = [];
+						// self.$emit('update:dialogVisible', false);
+						// self.$refs[formName].resetFields();
+						self.$message.success(res.data.msg);
+					} else {
+						self.$message.error(res.data.msg);
+					}
+				})
+				.finally(() => {
+					this.echoGather = [];
+					setTimeout(() => {
+						this.forTheTaskLoading = false;
+					}, 300);
+				});
+		},
+		// // 执行者
+		// approval_confirm(data){
+		//   this.approval_selected = {dept: [],employee:[]}
+		//   this.formData.targets = []
+		//   this.executorName = ''
+		//   if (data.employee !== null && data.employee.length != 0) {
+		//     this.approval_selected = data
+		//     data.employee.forEach(element => {
+		// 			this.formData.targets.push(element.id)
+		// 			this.executorName += (element.name+',')
+		//     });
+		//   }
+		// },
+		// 执行者 end
+		// 审核人
+		reviewer_confirm(data) {
+			this.reviewer_selected = { dept: [], employee: [] };
+			this.formData.reviewer_id = '';
+			this.reviewerName = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				this.reviewer_selected = data;
+				this.formData.reviewer_id = data.employee[0].id;
+				this.reviewerName = data.employee[0].name;
+			}
+			this.show_reviewer_selector = false;
+		},
+		// 审核人 end
+		// 部门可见
+		dept_confirm(data) {
+			this.dept_selected = { dept: [], employee: [] };
+			this.formData.dept_ids = [];
+			this.deptVisibleName = '';
+			if (data.dept !== null && data.dept.length != 0) {
+				this.dept_selected = data;
+				data.dept.forEach(element => {
+					this.formData.dept_ids.push(element.dept_id);
+					this.deptVisibleName += element.dept_name + ',';
+				});
+			}
+		},
+		// 部门可见 end
+		closeDialog() {
+			this.echoGather = [];
+			this.resetForm('formData')
+		},
+
+		//获取部门
+		getDepartment() {
+			this.$axios('get', '/api/department/tree').then(res => {
+				this.dept_tree = this.getTreeData(res.data.data.list);
+			});
+		},
+
+		getTreeDatas(data, item) {
+			for (let i in data) {
+				if (data[i].id == item) {
+					if (data[i].parentid == 1) {
+						this.oneruleId.unshift(data[i].id);
+						this.echoGather.push(this.oneruleId);
+						this.oneruleId = [];
+						break;
+					} else {
+						this.oneruleId.unshift(data[i].id);
+						this.getTreeDatas(this.dept_tree, data[i].parentid);
+					}
+				} else {
+					if (data[i]._child) {
+						this.getTreeDatas(data[i]._child, item);
+					}
+				}
+			}
+			return;
+		},
+
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i]._child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i]._child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i]._child);
+				}
+			}
+			return data;
+		}
+	}
+};
+</script>
+
+<style></style>

+ 272 - 0
src/views/common/rewardTaskDetailsPopup.vue

@@ -0,0 +1,272 @@
+<template>
+	<div>
+		<!-- 悬赏任务详情弹窗 -->
+		<el-drawer :visible.sync="Delay_to_open" :with-header="false" :size="'500px'" :before-close="handleClose" :custom-class="'drawer_details'">
+			<div class="details_title">{{ title }}</div>
+			<div class="details_content" v-if="workDetailData" v-loading="loading">
+				<el-row>
+					<el-col :span="24">
+						<div class="flex-box flex-v-ce">
+							<userImage
+								style="margin-right: 15px;"
+								width="50px"
+								height="50px"
+								:user_name="workDetailData.owner_name"
+								:img_url="workDetailData.owner_img_url"
+							></userImage>
+							<div>
+								<div style="line-height: 25px;">
+									我悬赏的{{ $getTypsName(workDetailData.pt_id) }}任务
+									<span v-if="workDetailData.point_config.base_point > 0" class="red">+{{ workDetailData.point_config.base_point }}</span>
+									<span v-else class="green">{{ workDetailData.point_config.base_point }}</span>
+									{{ $getTypsName(workDetailData.pt_id) }}
+								</div>
+								<div style="color: #909399; line-height: 25px;">
+									<b>{{ workDetailData.receiver_name }}</b>
+									{{ workDetailData.status_mark }}
+								</div>
+							</div>
+						</div>
+					</el-col>
+				</el-row>
+				<ul>
+					<li class="flex-box">
+						<div class="label">任务内容</div>
+						<div class="content_text">{{ workDetailData.task_name }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.status == 2 && workDetailData.receiver_id != 0">
+						<div class="label">领取人</div>
+						<div class="content_text">{{ workDetailData.receiver_name }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.status == 3 && workDetailData.receiver_id != 0">
+						<div class="label">完成人</div>
+						<div class="content_text">{{ workDetailData.receiver_name }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.task_remark">
+						<div class="label">任务备注</div>
+						<div class="content_text">{{ workDetailData.task_remark }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.task_file_list && workDetailData.task_file_list.length > 0">
+						<div class="label"></div>
+						<div class="content_text">
+							<el-image
+								v-for="(item, index) in workDetailData.task_file_list"
+								:key="index"
+								style="width: 100px; height: 100px;margin-right:8px"
+								:src="item"
+								:preview-src-list="workDetailData.task_file_list"
+							></el-image>
+						</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">任务类型</div>
+						<div class="content_text">{{workDetailData.type_mark}}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config">
+						<div class="label">任务积分</div>
+						<div class="content_text">{{workDetailData.point_config.base_point}}{{$getTypsName(workDetailData.pt_id)}}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">审批人</div>
+						<div class="content_text">{{ workDetailData.reviewer_name }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.owner_name">
+						<div class="label">发布人</div>
+						<div class="content_text">{{ workDetailData.owner_name }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.create_time">
+						<div class="label">发布时间</div>
+						<div class="content_text">{{ workDetailData.create_time }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">截止时间</div>
+						<div class="content_text">{{ workDetailData.end_time }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config.timeout_deduction_point">
+						<div class="label">逾期扣分</div>
+						<div class="content_text">{{ workDetailData.point_config.timeout_deduction_point }}/天</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config.ahead_award_point">
+						<div class="label">提前奖分</div>
+						<div class="content_text">{{ workDetailData.point_config.ahead_award_point }}/天</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.department_info">
+						<div class="label">可见范围</div>
+						<div class="content_text" v-if="workDetailData.department_info.length>0">
+						<span v-for="(item,index) in workDetailData.department_info" :key="index">
+							{{item.name}}
+							<span v-if="(workDetailData.department_info.length - 1) > index"> ,</span>
+						</span>
+						</div>
+							<div class="content_text" v-else>全公司</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.remark">
+						<div class="label">完成备注</div>
+						<div class="content_text">{{ workDetailData.complete_task.remark }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.files && workDetailData.complete_task.files.length > 0">
+						<div class="label"></div>
+						<div class="content_text">
+						<el-image
+							v-for="(item, index) in workDetailData.complete_task.files"
+							:key="index"
+							style="width: 100px; height: 100px;margin-right:8px"
+							:src="item"
+							:preview-src-list="workDetailData.complete_task.files"
+						></el-image>
+						</div>
+					</li>
+        </ul>
+				<div v-show="workDetailData.point_config && workDetailData.point_config.item_info">
+					<p class="row_title">规则依据</p>
+					<el-row :gutter="10" v-if="workDetailData.point_config.rule_info">
+						<el-col :span="4">规则分类</el-col>
+						<el-col :span="19">{{ workDetailData.point_config.rule_info.name }}</el-col>
+					</el-row>
+					<el-row v-if="workDetailData.point_config.item_info">
+						<el-col :span="4">积分规则</el-col>
+						<el-col :span="19">{{ workDetailData.point_config.item_info.remark }}</el-col>
+					</el-row>
+					<el-row v-if="workDetailData.point_config.item_info">
+						<el-col :span="4">积分</el-col>
+						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point == workDetailData.point_config.item_info.max_point">{{ workDetailData.point_config.item_info.min_point }} {{$getTypsName(workDetailData.pt_id)}}</el-col>
+						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point != workDetailData.point_config.item_info.max_point">
+							{{ workDetailData.point_config.item_info.min_point }} ~ {{ workDetailData.point_config.item_info.max_point }}
+              {{$getTypsName(workDetailData.pt_id)}}
+						</el-col>
+					</el-row>
+				</div>
+			</div>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+export default {
+	name: 'repeatTaskDetailsPopup',
+	props: {
+		title: {
+			type: String,
+			default: ''
+		},
+		visible: {
+			type: Boolean,
+			default: false
+		},
+		id: {
+			type: Number,
+			default: 0
+		}
+	},
+	data() {
+		return {
+			Delay_to_open: false, //打开抽屉
+
+			loading: false,
+			workDetailData: {
+				point_config: { base_point: '' }
+			}
+		};
+	},
+	components: {},
+	watch: {},
+	mounted() {
+		this.getData();
+		this.Delay_to_open = this.visible; //更换打开抽屉时机,避免打开两次
+	},
+	methods: {
+		// 关闭弹窗
+		handleClose() {
+			this.$emit('update:visible', false);
+		},
+		// 获取数据
+		getData() {
+			let self = this;
+			self.loading = true;
+			let data = { task_id: this.id };
+			self.$axios('get', '/api/integral/task', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.workDetailData = res.data.data;
+					}
+				})
+				.finally(() => {
+					self.loading = false;
+				});
+		}
+	}
+};
+</script>
+<style lang="scss" scoped="scoped">
+.details_content {
+	& .d_userMessage {
+		margin-left: 10px;
+	}
+	& .d_userMessage div:nth-child(1) {
+		font-size: 16px;
+		margin-bottom: 8px;
+	}
+	& .d_userMessage div:nth-child(2) {
+		font-size: 12px;
+		color: #909399;
+	}
+	& .d_progress {
+		padding: 12px 0;
+		border-bottom: 1px solid #f1f1f1;
+		margin-bottom: 10px;
+	}
+	& ul {
+		padding: 12px 0;
+		border-bottom: 1px solid #f1f1f1;
+		& li {
+			padding: 6px 0;
+		}
+		& .label {
+			width: 80px;
+			text-align: left;
+			color: #909399;
+		}
+		& .content_text {
+			flex: 1;
+		}
+	}
+}
+.fontColorF {
+	color: #909399;
+}
+.yellow {
+	color: #e6a23c;
+}
+.details_content {
+	padding: 20px;
+	height: calc(100vh - 60px);
+	overflow: auto;
+	.row_title {
+		position: relative;
+		margin: 0 0 20px 0;
+		padding-top: 12px;
+		font-size: 16px;
+		color: #303133;
+		line-height: 22px;
+	}
+	.row_title:before {
+		position: absolute;
+		top: 0;
+		content: ' ';
+		width: 100%;
+		border-top: 1px #f8f8f8 solid;
+	}
+	.el-row {
+		margin-bottom: 10px;
+		font-size: 14px;
+		.el-col-4 {
+			color: #606266;
+		}
+	}
+}
+.details_title {
+	font-size: 18px;
+	padding: 20px;
+	border-bottom: 1px #efefef solid;
+}
+</style>

+ 609 - 0
src/views/common/taskDetailsPopup.vue

@@ -0,0 +1,609 @@
+<template>
+	<div>
+		<!-- 任务详情弹窗 -->
+		<el-drawer :visible.sync="Delay_to_open" :with-header="false" :size="'500px'" :before-close="handleClose" :custom-class="'drawer_details'">
+			<div class="details_title">{{ title }}</div>
+			<div class="details_content" v-if="workDetailData" v-loading="loading">
+				<div class="flex-box flex-v-ce">
+					<userImage class="user_img person_imghead" width="46px" height="46px" :user_name="workDetailData.employee_name" :img_url="workDetailData.img_url"></userImage>
+					<div class="d_userMessage">
+						<div>{{ workDetailData.employee_name }}</div>
+						<div v-if="detailType != 2 && workDetailData.dept_list[0]">{{ workDetailData.dept_list[0].dept_name }}</div>
+					</div>
+					<div style="margin-left: 5px;" class="flex-box flex-v-ce">
+						<div v-if="workDetailData.point_config.base_point > 0" class="red">+{{ workDetailData.point_config.base_point }}</div>
+						<div v-else class="green">{{ workDetailData.point_config.base_point }}</div>
+						<div style="margin-left: 5px;">{{ $getTypsName(workDetailData.pt_id) }}</div>
+					</div>
+				</div>
+				<ul>
+					<li class="flex-box">
+						<div class="label">任务内容</div>
+						<div class="content_text">{{ workDetailData.task_name }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">任务备注</div>
+						<textarea class="flex-1" disabled="disabled" v-model="workDetailData.task_remark" style="border: none;height:100px"></textarea>
+					</li>
+					<li class="flex-box" v-if="workDetailData.task_file_list && workDetailData.task_file_list.length > 0">
+						<div class="label"></div>
+						<div class="content_text">
+						<el-image
+							v-for="(item, index) in workDetailData.task_file_list"
+							:key="index"
+							style="width: 100px; height: 100px;margin-right:8px"
+							:src="item"
+							:preview-src-list="workDetailData.task_file_list"
+						></el-image>
+						</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">积分种类</div>
+						<div class="content_text">{{ workDetailData.pt_name }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">任务积分</div>
+						<div class="content_text">{{ workDetailData.point_config.base_point }}{{ workDetailData.pt_name }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config.review_point">
+						<div class="label">最终分</div>
+						<div class="content_text">{{ workDetailData.point_config.review_point }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">审批人</div>
+						<div class="content_text">{{ workDetailData.reviewer_name }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">发布人</div>
+						<div class="content_text">{{ workDetailData.publisher_name }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.create_time">
+						<div class="label">发布时间</div>
+						<div class="content_text">{{ workDetailData.create_time }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">截止时间</div>
+						<div class="content_text">{{ workDetailData.expire_time }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config.ahead_award_point > 0">
+						<div class="label">提前奖分</div>
+						<div class="content_text">{{ workDetailData.point_config.ahead_award_point }} B分/天</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config.timeout_deduction_point > 0">
+						<div class="label">逾期扣分</div>
+						<div class="content_text">{{ workDetailData.point_config.timeout_deduction_point }} B分/天</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.time">
+						<div class="label">完成时间</div>
+						<div class="content_text">{{ workDetailData.complete_task.time }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.remark">
+						<div class="label">完成备注</div>
+						<div class="content_text">{{ workDetailData.complete_task.remark }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.files && workDetailData.complete_task.files.length > 0">
+						<div class="label"></div>
+						<div class="content_text">
+						<el-image
+							v-for="(item, index) in workDetailData.complete_task.files"
+							:key="index"
+							style="width: 100px; height: 100px;margin-right:8px"
+							:src="item"
+							:preview-src-list="workDetailData.complete_task.files"
+						></el-image>
+						</div>
+					</li>
+				</ul>
+				
+				<div v-show="workDetailData.point_config && workDetailData.point_config.item_info">
+					<p class="row_title">规则依据</p>
+					<el-row :gutter="10" v-if="workDetailData.point_config.rule_info">
+						<el-col :span="4">规则分类</el-col>
+						<el-col :span="19">{{ workDetailData.point_config.rule_info.name }}</el-col>
+					</el-row>
+					<el-row v-if="workDetailData.point_config.item_info">
+						<el-col :span="4">积分规则</el-col>
+						<el-col :span="19">{{ workDetailData.point_config.item_info.remark }}</el-col>
+					</el-row>
+					<el-row v-if="workDetailData.point_config.item_info">
+						<el-col :span="4">积分</el-col>
+						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point == workDetailData.point_config.item_info.max_point">{{ workDetailData.point_config.item_info.min_point }} {{workDetailData.pt_name}}</el-col>
+						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point != workDetailData.point_config.item_info.max_point">
+							{{ workDetailData.point_config.item_info.min_point }} ~ {{ workDetailData.point_config.item_info.max_point }} {{workDetailData.pt_name}}
+						</el-col>
+					</el-row>
+				</div>
+				<div v-show="showWork" style="border-top: 2px solid #f8f8f8;">
+					<div class="d_progress">
+						<div class="flex-box ">
+							<div class="flex-1">工作进度({{ workDetailData.progress }}%)</div>
+            				<div class="fontColorF addJf" @click="sliderShow" v-if="workDetailData.employee_id == userId && workDetailData.status==1">+更新进度</div>
+						</div>
+						<el-progress :percentage="workDetailData.progress"></el-progress>
+					</div>
+					<div>
+						<el-tabs v-model="activeName">
+							<el-tab-pane label="工作记录" name="work">
+								<div class="flex-box">
+									<div class="flex-1"></div>
+									<div class="fontColorF addJf" @click="isOne = true" v-if="workDetailData.employee_id == userId && workDetailData.status < 3 ">+记一条工作记录</div>
+								</div>
+								<div class="work_box" style="padding-top:10px">
+									<div class="work_item" v-for="(item, index) in text_list" :key="index" style="margin: 0 0 15px 0">
+										<div class="flex-box">
+											<userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
+											<div style="width: 100%;" class="d_name">
+												<div class="flex-box flex-d-center">
+													<div class="flex-1">{{ item.recorder }} 
+														<span v-if="item.point * 1 > 0">+{{ item.point }}</span>
+														<span v-if="item.point * 1 < 0">{{ item.point }}</span>
+													</div>
+													<div class="d_date fontColorF">{{ item.time }} <span class="delete_jfjl" v-if="item.recorder_id == userId && workDetailData.status < 3 " @click="deletejf_cli(index,0)"><i class="el-icon-delete"></i></span> </div>
+												</div>
+												<div class="fontColorB" style="margin-top: 5px;word-break: break-all;">{{ item.remark }}</div>
+											</div>
+										</div>
+									</div>
+									<div v-if="text_list.length==0" class="fontColorF" style="text-align: center;">暂无工作记录</div>
+								</div>
+							</el-tab-pane>
+							<el-tab-pane label="记分记录" name="participation">
+								<div class="flex-box" style="padding-bottom: 10px;border-bottom: 1px solid #f1f1f1;">
+									<div class="flex-1 blue">
+										<span v-if="point_total > 0">合计:+{{ point_total }}</span>
+										<span v-else>合计:{{ point_total }}</span>
+									</div>
+            						<div class="fontColorF addJf" @click="isIntegral = true" v-if="keepTheScore">+记分</div>
+								</div>
+								<div class="work_box" style="padding-top:10px">
+									<div class="work_item" v-for="(item, index) in point_list" :key="index" style="margin: 0 0 15px 0">
+										<div class="flex-box">
+											<userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
+											<div style="width: 100%;" class="d_name">
+												<div class="flex-box flex-d-center">
+													<div class="flex-1">{{ item.recorder }}
+														<span class="red" v-if="item.point * 1 > 0">+{{ item.point }}</span>
+														<span class="green" v-if="item.point * 1 < 0">{{ item.point }}</span>
+													</div>
+													<div class="d_date fontColorF">{{ item.time }} <span class="delete_jfjl" v-if="userId == item.recorder_id && workDetailData.status < 3" @click="deletejf_cli(index,1)"><i class="el-icon-delete"></i></span> </div>
+												</div>
+												<div class="fontColorB" style="margin-top: 5px;word-break: break-all;">{{ item.remark }}</div>
+											</div>
+										</div>
+									</div>
+									<div v-if="point_list.length==0" class="fontColorF" style="text-align: center;">暂无积分记录</div>
+								</div>
+							</el-tab-pane>
+						</el-tabs>
+					</div>
+				</div>
+			</div>
+		</el-drawer>
+		
+		<!-- 更新进度 -->
+		<el-dialog title="更新进度" :close-on-click-modal="false" :visible.sync="isSlider" :before-close="publicClose" width="40%">
+			<div class="slider">
+			<div class="fontColorF">拖动滑杆更新进度</div>
+			<el-slider v-model="progress"></el-slider>
+			</div>
+			<span slot="footer">
+			<el-button @click="publicClose()">取消</el-button>
+			<el-button type="primary" @click="sliderSend">完成</el-button>
+			</span>
+		</el-dialog>
+		<!-- 记一条 -->
+		<el-dialog title="记一条" :close-on-click-modal="false" :visible.sync="isOne" destroy-on-close :before-close="publicClose" width="40%">
+			<div class="flex-box">
+				<div style="width: 80px;">工作记录</div>
+				<el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="textarea"></el-input>
+			</div>
+			<span slot="footer">
+				<el-button @click="publicClose()">取消</el-button>
+				<el-button type="primary" @click="onerecord">完成</el-button>
+			</span>
+		</el-dialog>
+		<!-- 记分记录 -->
+		<el-dialog title="记分" :visible.sync="isIntegral" :before-close="publicClose" width="40%" destroy-on-close :close-on-click-modal="false">
+			<el-form :model="integral" ref="integral" label-width="80px" :rules="formRules">
+				<el-form-item label="记录"  prop="text" :rules="[{ required: true, message: '记录不能为空'}]">
+					<el-input type="textarea" :rows="3" v-model="integral.text"></el-input>
+				</el-form-item>
+				<!-- 记分不能为空 -->
+				<el-form-item label="记分"  prop="num" >
+				<!-- <el-form-item label="记分"  prop="num" :rules="[{ required: false, message: '记分不能为空'},{ type: 'number', message: '积分必须为数字值'}]"> -->
+					<div class="num" :class="[integral.type=='1'?'add':'jian']"></div>
+					<el-input placeholder="请输入内容" type="Number" v-model.number="integral.num" @input="(val)=>{integral.num = val.replace(/[^\d]/g, '')}" >
+						<el-select v-model="integral.type" slot="prepend" placeholder="请选择" style="width: 80px;">
+							<el-option label="奖分" value="1"></el-option>
+							<el-option label="扣分" value="2"></el-option>
+						</el-select>
+					</el-input>
+				</el-form-item>
+			</el-form>
+			<span slot="footer">
+				<el-button @click="publicClose()">取消</el-button>
+				<el-button type="primary" @click="integralSend('integral')">完成</el-button>
+			</span>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+const validatorNoZero = (rule, value, callback) => {//设置记分的验证
+	if (value === 0) {
+		return callback(new Error("记分不能为0"));
+	} else if (value === '') {
+		return callback(new Error("记分不能为空"));
+	}else if (isNaN(value)){
+		return callback(new Error("积分必须为数字值"));
+	}else{
+		callback();
+	}
+};
+export default {
+	name: 'taskDetailsPopup',
+	props: {
+		title: {
+			type: String,
+			default: ''
+		},
+		visible: {
+			type: Boolean,
+			default: false
+		},
+		id: {
+			type: Number,
+			default: 0
+		},
+		showWork: {
+			type: Boolean,
+			default: true
+		},
+		detailType: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			Delay_to_open: false, //打开抽屉
+
+			loading: false,
+			workDetailData: {
+				process: [],
+				dept_list: [],
+				point_config: {
+					base_point: '0'
+				}
+			},
+			// itemId: getId,
+			isOne: false,
+			text_list: [],
+			isIntegral: false,
+			
+			point_total: 0,
+			point_list: [],
+			activeName: 'work',
+			getDataUrl: '/api/integral/work',
+			params: {},
+
+
+			userId: this.$getUserData().id,
+			isSlider: false,//更新进度弹窗
+			  progress: 0,//更新进度modus
+			  isOne: false,//记一条
+			  textarea: '',//记录一条内容
+			  isIntegral:false,//记分记录
+			integral:{
+				text:'',
+				num:0,
+				type:"1",
+			},
+			formRules:{//记分验证
+				num: [
+				{
+					required: true,
+					validator: validatorNoZero,
+					trigger: "blur"
+				}
+				],
+			},
+			keepTheScore: false,
+			employeeMe: {},
+		};
+	},
+	mounted() {
+		this.detailType == 2 ? (this.getDataUrl = '/api/integral/schedule') : (this.getDataUrl = '/api/integral/work');
+		this.$nextTick(() => {
+			this.getData();
+			this.Delay_to_open = this.visible; //更换打开抽屉时机,避免打开两次
+		});
+	},
+	methods: {
+		employee_me(data){
+			let params = {
+				id: data.employee_id
+			};
+			this.$axios('get', '/api/employee/info', params)
+			.then(res => {
+				this.employeeMe = res.data.data
+				this.keepTheScore = this.keepThe_score(data)
+			})
+		},
+		keepThe_score(cer){
+			if(cer.status > 2){
+				return false
+			}
+			if(this.userId == cer.reviewer_id){
+				return true
+			}
+			return this.employeeMe.employee_detail.superior_list.some(x =>{
+				if(this.userId == x.id){
+					return true
+				}
+			})
+		},
+		deletejf_cli(cor,cur){
+			this.$confirm('确定永久删除此项?', '提示', {
+			confirmButtonText: '确定',
+			cancelButtonText: '取消',
+			type: 'warning'
+			}).then(() => {
+				let lier = cur == 1 ? this.point_list : this.text_list
+				let libf = cur == 1 ? this.text_list : this.point_list
+				lier.splice(cor,1)
+				let data = {
+					work_id: this.workDetailData.id,
+            		process: []
+				}
+				data.process =lier.concat(libf)
+				if (data.process.length == 0) {
+					data.process = "[1]"
+				} else {
+					data.process = JSON.stringify(data.process);
+				}
+				this.$axios('post', '/api/integral/work', data).then(res =>{
+					if(res.data.code == 1){
+						this.getData();
+					}
+				})
+			}).catch(() => {});
+		},
+		//记分记录
+		integralSend(formName){
+			this.$refs[formName].validate((valid) => {
+				if (valid) {
+					var items = this.workDetailData.process.list || [];
+					var process = {
+							img_url: this.$getUserData().img_url,
+							point: this.integral.type == "1" ? this.integral.num : '-' + this.integral.num,
+							recorder_id: this.$getUserData().id,
+							recorder: this.$getUserData().name,
+							remark: this.integral.text,
+							time: this.$moment().format('YYYY-MM-DD HH:mm')
+					}
+					var data = {
+						work_id: this.workDetailData.id,
+						process: [],
+					}
+					items.unshift(process);
+					data.process = JSON.stringify(items);
+					this.$axios('post','/api/integral/work',data).then(res => {
+						if (res.data.code == 1) {
+							this.publicClose();
+							this.getData();
+						}
+					})
+				}
+			})
+		},
+		//记一条
+		onerecord(){
+			if(!this.textarea){
+				this.$message.error("请输入备注内容");
+				return
+			}
+			var items = this.workDetailData.process.list || [];
+			var process = {
+				img_url: this.$getUserData().img_url,
+				point: 0,
+				recorder_id: this.$getUserData().id,
+				recorder: this.$getUserData().name,
+				remark: this.textarea,
+				time: this.$moment().format('YYYY-MM-DD HH:mm')
+			}
+			var data={
+				work_id:this.workDetailData.id,
+				process:[],
+			}
+			items.unshift(process);
+			data.process=JSON.stringify(items);
+			this.$axios('post', '/api/integral/work', data).then(res => {
+				if (res.data.code == 1) {
+					this.publicClose();
+					this.getData();
+				}
+			})
+		},
+		//更新进度
+		sliderShow(){
+			this.progress = this.workDetailData.progress
+			this.isSlider = true
+		},
+		sliderSend(){
+			var self = this;
+			let data = {
+				work_id: self.workDetailData.id,
+				progress: self.progress,
+			}
+			self.$axios('post','/api/integral/work',data).then(res => {
+				if (res.data.code == 1) {
+					this.getData();
+					self.isSlider = false;
+				}
+			})
+		},
+		publicClose(){
+			this.textarea = '';
+			this.integral = {
+				text: '',
+				num: 0,
+				type: "1",
+			};
+			this.isSlider = false;
+			this.isOne = false;
+			this.isIntegral = false;
+		},
+		// 关闭弹窗
+		handleClose() {
+			this.$emit('update:visible', false);
+		},
+		// 删除
+		delItem() {
+			console.log('删除');
+		},
+		// 获取数据
+		getData() {
+			this.loading = true;
+			let data = this.detailType == 2 ? { schedule_id: this.id } : { work_id: this.id };
+			this.$axios('get', this.getDataUrl, data).then(res => {
+					this.workDetailData = res.data.data;
+					this.employee_me(res.data.data)
+					let text_list = []
+					let point_list = []
+					this.point_total = 0
+					if (this.workDetailData.process.list && this.workDetailData.process.list.length > 0) {
+					  for (let i in this.workDetailData.process.list) {
+					    this.point_total += this.workDetailData.process.list[i].point * 1
+					    if (this.workDetailData.process.list[i].point != 0) {
+					      point_list.push(this.workDetailData.process.list[i])
+					    } else {
+							if(this.workDetailData.process.list[i].recorder_id == this.workDetailData.employee_id) {
+								text_list.push(this.workDetailData.process.list[i])
+							}
+					    }
+					  }
+					}
+					setTimeout(()=>{
+					  this.text_list=text_list;
+					  this.point_list=point_list;
+					},500)
+			}).finally(() => {
+				this.loading = false;
+			});
+		}
+	}
+};
+</script>
+<style lang="scss" scoped="scoped">
+.details_content {
+	& .d_userMessage {
+		margin-left: 10px;
+	}
+	& .d_userMessage div:nth-child(1) {
+		font-size: 16px;
+	}
+	& .d_userMessage div:nth-child(2) {
+		font-size: 12px;
+		color: #909399;
+	}
+	& .d_progress {
+		padding: 12px 0;
+		border-bottom: 1px solid #f1f1f1;
+		margin-bottom: 10px;
+	}
+	& ul {
+		padding: 12px 0;
+		border-bottom: 1px solid #f1f1f1;
+		& li {
+			padding: 6px 0;
+		}
+		& .label {
+			width: 80px;
+			text-align: left;
+			color: #909399;
+		}
+		& .content_text {
+			flex: 1;
+		}
+	}
+}
+.fontColorF {
+	color: #909399;
+}
+.details_content {
+	padding: 20px;
+	height: calc(100vh - 60px);
+	overflow: auto;
+	padding-bottom: 100px;
+	.row_title {
+		position: relative;
+		margin: 0 0 20px 0;
+		padding-top: 12px;
+		font-size: 16px;
+		color: #303133;
+		line-height: 22px;
+	}
+	.row_title:before {
+		position: absolute;
+		top: 0;
+		content: ' ';
+		width: 100%;
+		border-top: 1px #f8f8f8 solid;
+	}
+	.el-row {
+		margin-bottom: 10px;
+		font-size: 14px;
+		.el-col-4 {
+			color: #606266;
+		}
+	}
+}
+.details_title {
+	font-size: 18px;
+	padding: 20px;
+	border-bottom: 1px #efefef solid;
+}
+.d_name{
+	margin-left: 10px;
+}
+.d_content{
+	margin-left: 50px;
+}
+.addJf{
+	font-size: 13px;
+	cursor: pointer;
+	margin-bottom: 5px;
+	padding: 5px;
+	transition: all .3s;
+}
+.addJf:hover{
+	color: #26a2ff !important;
+}
+.num{
+	position: absolute;
+	height: 22px;
+	width: 20px;
+	z-index: 999;
+	left: 85px;
+	line-height: 40px !important;
+}
+.add:before{
+	position: absolute;
+	content: "+";
+	color: #f56c6c;
+}
+.jian:before{
+	position: absolute;
+	content: "-";
+	color: #67c23a;
+}
+.delete_jfjl{
+	transition: .3s all;
+	cursor: pointer;
+	margin: 0 0 0 10px;
+}
+.delete_jfjl:hover{
+	color: #26a2ff;
+}
+</style>

+ 625 - 0
src/views/common/temporaryTask.vue

@@ -0,0 +1,625 @@
+<template>
+	<div>
+		<!-- 临时任务弹窗 -->
+		<el-dialog :title="showTitle" :visible.sync="dialogVisible" :close-on-click-modal="false" :before-close="closeDialog" width="600px" top="3%">
+			<div>
+				<el-form :model="formData" ref="formData" label-width="80px" v-loading="taskload">
+					<el-form-item
+						label="任务内容"
+						prop="task_name"
+						:rules="[{ required: true, message: '请填写任务内容', trigger: 'blur' }, { min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }]"
+					>
+						<el-input type="textarea" rows="3" maxlength="20" show-word-limit v-model="formData.task_name" placeholder="请输入任务内容(限20字)"></el-input>
+					</el-form-item>
+
+					<el-form-item label="积分类型" prop="pt_id" :rules="[{ required: true, message: '请选择积分类型', trigger: 'blur' }]">
+						<el-radio-group v-model="formData.pt_id">
+							<el-radio v-for="(item, index) in point_types" :key="index" v-show="item.code !== 'JX'" :label="item.id">{{ item.name }}</el-radio>
+						</el-radio-group>
+					</el-form-item>
+					
+					<el-form-item label="指定规则">
+						 <el-switch  v-model="isSelectType"></el-switch>
+					</el-form-item>
+					<!-- 选择分类 -->
+					<el-form-item class="test_cascader_id" label="选择分类"	v-if="!isSelectType"
+						prop="rule_value"
+						:rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]"
+					>
+						<el-cascader
+							v-model="formData.rule_value"
+							ref="ruleCascader"
+							:popper-class="'ruleClass'"
+							filterable
+							clearable
+							:options="trees_ab.rule_tree_all"
+							@change="ruleChange"
+							:props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"
+						></el-cascader>
+					</el-form-item>
+					<!-- 选择规则 -->
+					<el-form-item :label="trees_PtId(formData.pt_id) +'规则'" v-else	prop="tree_echo" :rules="[{ required: true, message: '请选择规则', trigger: 'blur' }]"
+					>
+						<el-cascader
+							v-model="formData.tree_echo"
+							ref="ruleItem"
+							:popper-class="'itemClass'"
+							filterable
+							clearable
+							:options="formData.pt_id == 2 ? trees_ab.A : trees_ab.B"
+							@change="ruleItemChange"
+							:show-all-levels="false"
+							:props="{ children: 'child', label: 'name', value: 'id' }"
+						></el-cascader>
+					</el-form-item>
+					
+					
+					
+					<el-form-item prop="range_type" v-if="formData.range_type != 0">
+						<div style="line-height: 24px;" v-show="formData.range_type == 1">
+							{{ min }}
+							<span class="blue">{{ trees_PtId(formData.pt_id) }}</span>
+						</div>
+						<div style="line-height: 24px;" v-show="formData.range_type == 2">
+							{{ min }} ~ {{ max }}
+							<span class="blue">{{ trees_PtId(formData.pt_id) }}</span>
+						</div>
+						<div style="line-height: 24px;">{{ treeName }}</div>
+					</el-form-item>
+
+					<el-form-item label="任务积分" prop="base_point" :rules="[{ required: true, message: '请填写任务积分', trigger: 'change' }]">
+						<el-input-number v-if="formData.range_type == 0" v-model.number="formData.base_point"></el-input-number>
+						<el-input-number v-else :disabled="formData.range_type == 1" v-model.number="formData.base_point" :min="min" :max="max"></el-input-number>
+					</el-form-item>
+
+					<el-form-item label="执行人" prop="targets" :rules="[{ required: true, message: '请选择执行人', trigger: 'change' }]">
+						<el-row>
+							<el-col :span="18">
+								<el-input auto-complete="off" v-model="executorName" placeholder="请选择执行人"></el-input>
+								<div @click="show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+							</el-col>
+						</el-row>
+
+						<el-dialog title="选择执行人员" width="640px" :visible.sync="show_employee_selector" append-to-body :before-close="handleClose">
+							<EmployeeSelector
+								v-if="show_employee_selector"
+								ref="members"
+								:isCreatorSelect="true"
+								:employee_list="employee_list"
+								:user_no_select="false"
+								:selected="approval_selected"
+								@confirm="approval_confirm"
+							/>
+							<span slot="footer" class="dialog-footer">
+								<el-button @click="show_employee_selector = false">取 消</el-button>
+								<el-button type="primary" @click="submitEmployee('members')">确 定</el-button>
+							</span>
+						</el-dialog>
+					</el-form-item>
+					<el-form-item label="审批人" prop="reviewer_id" :rules="[{ required: true, message: '请选择审批人', trigger: 'change' }]">
+						<el-row>
+							<el-col :span="18">
+								<el-input auto-complete="off" v-model="reviewerName" placeholder="请选择审批人"></el-input>
+								<div @click="show_reviewer_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+							</el-col>
+						</el-row>
+						<el-dialog title="选择审批人员" width="640px" :visible.sync="show_reviewer_selector" append-to-body :before-close="handleClose">
+							<EmployeeSelector
+								v-if="show_reviewer_selector"
+								ref="members1"
+								:isChecKedAll="false"
+								:use_Administrator_list="true"
+								:multi="false"
+								:selected="reviewer_selected"
+								@confirm="reviewer_confirm"
+							/>
+							<span slot="footer" class="dialog-footer">
+								<el-button @click="show_reviewer_selector = false">取 消</el-button>
+								<el-button type="primary" @click="submitEmployee('members1')">确 定</el-button>
+							</span>
+						</el-dialog>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="expire_time" v-if="formData.task_cycle == 0" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-date-picker
+							v-model="formData.expire_time"
+							type="datetime"
+							placeholder="选择日期时间"
+							format="yyyy-MM-dd HH:mm"
+							value-format="yyyy-MM-dd HH:mm"
+							default-time="18:00"
+						></el-date-picker>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 1" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns1" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 2" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns2" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 3" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns3" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="任务备注" prop="task_remark" :rules="[{ max: 300, message: '长度不能超过 300 个字', trigger: 'blur' }]">
+						<el-input type="textarea" :rows="5" maxlength="300" show-word-limit v-model="formData.task_remark" placeholder="请输入任务内容(限300字)"></el-input>
+					</el-form-item>
+
+					<el-form-item label="图片">
+						<upload
+							:headers="Xtoken"
+							class="avatar-uploader"
+							:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
+							:show-file-list="true"
+							:file-list="fileList"
+							:on-success="handleFilesSuccess"
+							:on-preview="onFilePreView"
+							:before-upload="beforeUpload"
+							:on-remove="onFileRemove"
+							:limit="3"
+							:multiple="true"
+							ref="clearPicture"
+						>
+							<el-button size="small" type="primary">点击上传</el-button>
+							(最多选择3张)
+						</upload>
+					</el-form-item>
+
+					<el-form-item label="重复周期" prop="task_cycle">
+						<el-select v-model="formData.task_cycle" placeholder="请选择重复周期">
+							<el-option v-for="(item, index) in task_cycle_arr" :key="index" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<div style="margin-left: 80px; margin-bottom: 8px;">以天为单位,每 提前/逾期 一天 加分/扣分</div>
+					<el-form-item label="提前奖分" prop="ahead_award_point">
+						<el-input v-model="formData.ahead_award_point" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入每日奖分" style="width: 150px;"></el-input>
+						B分/每天, 奖分上限 &nbsp;
+						<el-input
+							v-model="formData.ahead_award_point_limit"
+							oninput="value=value.replace(/[^\d]/g,'')"
+							placeholder="请输入奖分上限"
+							style="width: 150px;"
+						></el-input>
+						B分
+					</el-form-item>
+					<el-form-item label="逾期扣分" prop="timeout_deduction_point">
+						<el-input
+							v-model="formData.timeout_deduction_point"
+							oninput="value=value.replace(/[^\d]/g,'')"
+							placeholder="请输入每日扣分"
+							style="width: 150px;"
+						></el-input>
+						B分/每天, 扣分上限 &nbsp;
+						<el-input
+							v-model="formData.timeout_deduction_point_limit"
+							oninput="value=value.replace(/[^\d]/g,'')"
+							placeholder="请输入扣分上限"
+							style="width: 150px;"
+						></el-input>
+						B分
+					</el-form-item>
+
+					<el-form-item>
+						<div class="flex-box-end">
+							<el-button @click="resetForm('formData')">取消</el-button>
+							<el-button type="primary" @click="sub('formData')">提交</el-button>
+						</div>
+					</el-form-item>
+				</el-form>
+			</div>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import moment from 'moment';
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import upload from '@/components/upload';
+export default {
+	name: 'temporaryTask',
+	props: {
+		employee_not_select: {
+			type: Array,
+			default: () => {
+				return [];
+			}
+		},
+		dialogVisible: {
+			type: Boolean,
+			default: false
+		},
+		showTitle: {
+			type: String,
+			default: ''
+		},
+		trees_ab: {
+			type: Object,
+			default: ()=>{
+				return {};
+			}
+		}
+	},
+	data() {
+		return {
+			isSelectType:false,//是否选择分类
+			//图片附件
+			Xtoken: { 'X-Token': this.$getToken() },
+			fileList: [],
+			// treesAb: [],
+			max: 0,
+			min: 0,
+			treeName: '',
+
+			taskload: false,
+			formData: {
+				task_name: '',
+
+				base_point: '0',
+				task_remark: '',
+				pt_id: 3,
+
+				tree_echo: [], //用于编辑任务时的规则回显
+				range_type: 0,
+				rule_id: '',
+				rule_value:[],
+				file_list: [],
+				
+				task_expire_day: 1,
+				expire_time: moment().format('YYYY-MM-DD 18:00'),
+				weight: 0,
+				package_id: 0,
+				targets: [],
+				reviewer_id: '',
+				task_cycle: 0,
+				timeout_deduction_point: null,
+				timeout_deduction_point_limit: null,
+				ahead_award_point: null,
+				ahead_award_point_limit: null
+			},
+			point_types: [],
+			// 执行者
+			executorName: null,
+			show_employee_selector: false,
+			approval_selected: { dept: [], employee: [] },
+			approval_not_select: [],
+			employee_list: this.$getUserData().employee_detail.manage_scope,
+			// 审批人
+			reviewerName: null,
+			reviewer_not_select: [],
+			reviewer_selected: { dept: [], employee: [] },
+			show_reviewer_selector: false,
+
+			// 重复周期
+			task_cycle_arr: [{ value: 0, name: '不重复' }, { value: 1, name: '每天重复' }, { value: 2, name: '每周重复' }, { value: 3, name: '每月重复' }],
+			// 周期时间
+			columns1: [
+				{ name: '01:00', value: 1 },
+				{ name: '02:00', value: 2 },
+				{ name: '03:00', value: 3 },
+				{ name: '04:00', value: 4 },
+				{ name: '05:00', value: 5 },
+				{ name: '06:00', value: 6 },
+				{ name: '07:00', value: 7 },
+				{ name: '08:00', value: 8 },
+				{ name: '09:00', value: 9 },
+				{ name: '10:00', value: 10 },
+				{ name: '11:00', value: 11 },
+				{ name: '12:00', value: 12 },
+				{ name: '13:00', value: 13 },
+				{ name: '14:00', value: 14 },
+				{ name: '15:00', value: 15 },
+				{ name: '16:00', value: 16 },
+				{ name: '17:00', value: 17 },
+				{ name: '18:00', value: 18 },
+				{ name: '19:00', value: 19 },
+				{ name: '20:00', value: 20 },
+				{ name: '21:00', value: 21 },
+				{ name: '22:00', value: 22 },
+				{ name: '23:00', value: 23 },
+				{ name: '24:00', value: 24 }
+			],
+			columns2: [
+				{ name: '周一', value: 1 },
+				{ name: '周二', value: 2 },
+				{ name: '周三', value: 3 },
+				{ name: '周四', value: 4 },
+				{ name: '周五', value: 5 },
+				{ name: '周六', value: 6 },
+				{ name: '周日', value: 7 }
+			],
+			columns3: [
+				{ name: '1号', value: 1 },
+				{ name: '2号', value: 2 },
+				{ name: '3号', value: 3 },
+				{ name: '4号', value: 4 },
+				{ name: '5号', value: 5 },
+				{ name: '6号', value: 6 },
+				{ name: '7号', value: 7 },
+				{ name: '8号', value: 8 },
+				{ name: '9号', value: 9 },
+				{ name: '10号', value: 10 },
+				{ name: '11号', value: 11 },
+				{ name: '12号', value: 12 },
+				{ name: '13号', value: 13 },
+				{ name: '14号', value: 14 },
+				{ name: '15号', value: 15 },
+				{ name: '16号', value: 16 },
+				{ name: '17号', value: 17 },
+				{ name: '18号', value: 18 },
+				{ name: '19号', value: 19 },
+				{ name: '20号', value: 20 },
+				{ name: '21号', value: 21 },
+				{ name: '22号', value: 22 },
+				{ name: '23号', value: 23 },
+				{ name: '24号', value: 24 },
+				{ name: '25号', value: 25 },
+				{ name: '26号', value: 26 },
+				{ name: '27号', value: 27 },
+				{ name: '28号', value: 28 },
+				{ name: '29号', value: 29 },
+				{ name: '30号', value: 30 },
+				{ name: '31号', value: 31 }
+			]
+		};
+	},
+	components: { EmployeeSelector, upload },
+	watch: {
+		'formData.task_cycle'(val) {
+			if (val) {
+				this.formData.task_expire_day = 1;
+			} else {
+				this.formData.expire_time = moment().format('YYYY-MM-DD 18:00');
+			}
+		},
+		isSelectType(val) {
+			let item = this.formData;
+			this.max = 0;
+			this.min = 0;
+			this.treeName = '';
+			item.tree_echo = [];
+			item.task_remark = '';
+			item.base_point = '0';
+			item.range_type = 0;
+			item.rule_id='';
+			item.item_id = 0;
+			item.rule_value=[];
+		},
+		'formData.pt_id'(val) {
+			let item = this.formData;
+			this.max = 0;
+			this.min = 0;
+			this.treeName = '';
+			item.tree_echo = [];
+			item.task_remark = '';
+			item.base_point = '0';
+			item.range_type = 0;
+			item.rule_id='';
+			item.rule_value=[];
+		}
+	},
+	mounted() {
+		this.point_types = this.$getCache('types');
+	},
+	methods: {
+		trees_PtId(id) {
+			return id == 2 ? 'A分' : 'B分';
+		},
+		ruleItemChange(val) {
+			let item = this.formData;
+			if (val.length > 0) {
+				let data = this.$refs.ruleItem.getCheckedNodes()[0].data; //当前选中的节点数据
+				item.task_remark = data.name;
+				this.treeName = data.name;
+				this.max = data.max_point * 1;
+				this.min = data.min_point * 1;
+				item.base_point = data.min_point;
+				item.range_type = data.range_type;
+				item.rule_id = data.pid;
+				item.item_id = data.id;
+			} else {
+				item.task_remark = '';
+				this.treeName = '';
+				this.max = 0;
+				this.min = 0;
+				item.base_point = '0';
+				item.range_type = 0;
+				item.rule_id = 0;
+				item.item_id = 0;
+			}
+		},
+		// 规则分类变化关闭dewn
+		ruleChange(value) {
+			console.log(value)
+			const item = this.formData;
+			if (value.length > 0) {
+				item.rule_id = value[value.length - 1];
+			} else {
+				item.rule_id = '';
+				item.rule_value = '';
+			}
+			this.$refs.ruleCascader.dropDownVisible=false;
+		},
+		
+		handleFilesSuccess(response, file, fileList) {
+			this.fileFun(file, fileList);
+		},
+		onFilePreView(file) {
+			if (file.response) {
+				window.open(file.response.url, '_blank');
+			}
+		},
+		onFileRemove(file, fileList) {
+			this.fileFun(file, fileList);
+		},
+		fileFun(file, fileList) {
+			this.fileList = fileList;
+			this.formData.file_list = [];
+			fileList.forEach((item, index) => {
+				this.formData.file_list.push(item.url);
+			});
+		},
+		// 附件上传
+		beforeUpload(file) {
+			const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
+			const isLt2M = file.size / 1024 / 1024 < 1;
+			if (!isJPG) {
+				this.$message.error('上传头像图片只能是 JPEG,PNG,JPG 格式!');
+			}
+			if (!isLt2M) {
+				this.$message.error('上传头像图片大小不能超过 2MB!');
+			}
+			return isJPG && isLt2M;
+		},
+		submitEmployee(name) {
+			this.$refs[name].confirm(); //调用组件的confirm();
+		},
+		//关闭
+		handleClose(done) {
+			done();
+		},
+		sub(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					this.saveFun(formName);
+				}
+			});
+		},
+		resetForm(formName) {
+			this.$emit('update:dialogVisible', false);
+			this.$refs[formName].resetFields();
+			this.formData.file_list = [];
+			this.formData.range_type = 0;
+			this.formData.rule_id = 0;
+			this.formData.item_id = 0;
+
+			this.fileList = [];
+			(this.formData.tree_echo = []), (this.max = 0), (this.min = 0), (this.treeName = '');
+			this.executorName = '';
+			this.reviewerName = '';
+			this.approval_selected = { dept: [], employee: [] };
+			this.reviewer_selected = { dept: [], employee: [] };
+		},
+		ahead_timeout(item, arr, codes, code) {
+			if (item) {
+				if (arr) {
+					if (Number(item) > Number(arr)) {
+						this.$message.warning(code + '上限不能小于每日' + code);
+						return true;
+					}
+				} else {
+					this.$message.warning(codes + '不为0时,' + code + '上限不能为空');
+					return true;
+				}
+			}
+		},
+		deletedata(data, arr) {
+			data[arr] && data[arr] != 0 ? '' : delete data[arr];
+		},
+		// 提交
+		saveFun(formName) {
+			// 没有选择重复任务的时候
+			// /api/integral/work/publish
+			// 选择重复任务之后
+			// /api/integral/schedule/publish/work
+			let self = this;
+			let data = JSON.parse(JSON.stringify(self.formData));
+			if (data.task_cycle == 0) {
+				delete data.task_cycle;
+				delete data.task_expire_day;
+				data.task_remark ? '' : delete data.task_remark;
+			} else {
+				delete data.package_id;
+				delete data.weight;
+				delete data.expire_time;
+				data.task_remark ? '' : delete data.task_remark;
+			}
+
+			if (!data.ahead_award_point && data.ahead_award_point_limit) {
+				this.$message.warning('奖分上限不为0时每日奖分不能为空');
+				return;
+			} else if (data.ahead_award_point && !data.ahead_award_point_limit) {
+				this.$message.warning('每日奖分不为0时奖分上限不能为空');
+				return;
+			}
+			if (!data.timeout_deduction_point && data.timeout_deduction_point_limit) {
+				this.$message.warning('扣分上限不为0时每日扣分不能为空');
+				return;
+			} else if (data.timeout_deduction_point && !data.timeout_deduction_point_limit) {
+				this.$message.warning('每日扣分不为0时扣分上限不能为空');
+				return;
+			}
+			if (this.ahead_timeout(data.ahead_award_point, data.ahead_award_point_limit, '提前奖分', '奖分')) return;
+			if (this.ahead_timeout(data.timeout_deduction_point, data.timeout_deduction_point_limit, '逾期扣分', '扣分')) return;
+			if (!this.$getIsCreator('creator') || this.$getUserData().point_config.point_limit.length != 0) {
+				let entry_limit = Number(this.$getUserData().point_config.point_limit[1].point);
+				if (entry_limit > 0) {
+					if (data.ahead_award_point > entry_limit || data.timeout_deduction_point > entry_limit) {
+						this.$message.warning('每日奖扣分 不能超过您的奖扣分权限(您的奖扣分权限:' + entry_limit + '分)');
+						return;
+					}
+					if (data.ahead_award_point_limit > entry_limit * 10 || data.timeout_deduction_point_limit > entry_limit * 10) {
+						this.$message.warning('奖扣分上限不能超过' + entry_limit * 10 + '分(您的奖扣分权限' + entry_limit + '分*10)');
+						return;
+					}
+				}
+			}
+			let add = ['ahead_award_point', 'ahead_award_point_limit', 'timeout_deduction_point', 'timeout_deduction_point_limit'];
+			add.forEach(item => {
+				this.deletedata(data, item);
+			});
+			this.taskload = true;
+			self.$axios('post', self.formData.task_cycle == 0 ? '/api/integral/work/publish' : '/api/integral/schedule/publish/work', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.$parent.get_list();
+						this.resetForm('formData');
+						self.$message.success(res.data.msg);
+					} else {
+						self.$message.error(res.data.msg);
+					}
+				})
+				.finally(() => {
+					this.taskload = false;
+				});
+		},
+		// 执行者
+		approval_confirm(data) {
+			this.approval_selected = { dept: [], employee: [] };
+			this.formData.targets = [];
+			this.executorName = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				this.approval_selected = data;
+				data.employee.forEach(element => {
+					this.formData.targets.push(element.id);
+					this.executorName += element.name + ',';
+				});
+			}
+			this.show_employee_selector = false;
+		},
+		// 审核人
+		reviewer_confirm(data) {
+			this.reviewer_selected = { dept: [], employee: [] };
+			this.formData.reviewer_id = '';
+			this.reviewerName = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				this.reviewer_selected = data;
+				this.formData.reviewer_id = data.employee[0].id;
+				this.reviewerName = data.employee[0].name;
+			}
+			this.show_reviewer_selector = false;
+		},
+		closeDialog() {
+			this.resetForm('formData');
+		}
+	}
+};
+</script>

+ 650 - 0
src/views/common/temporaryTaskAmend.vue

@@ -0,0 +1,650 @@
+<template>
+	<div>
+		<!-- 临时任务弹窗 -->
+		<el-dialog :title="showTitle" :visible.sync="dialogVisible" :close-on-click-modal="false" :before-close="closeDialog" width="600px" top="5%">
+			<div>
+				<el-form :model="formData" ref="formData" label-width="80px" v-loading="taskload">
+					<el-form-item
+						label="任务内容"
+						prop="task_name"
+						:rules="[{ required: true, message: '请填写任务内容', trigger: 'blur' }, { min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }]"
+					>
+						<el-input type="textarea" rows="3" maxlength="20" show-word-limit v-model="formData.task_name" placeholder="请输入任务内容(限20字)"></el-input>
+					</el-form-item>
+					<el-form-item label="指定规则">
+						 <el-switch  v-model="isSelectType" @change="isSelectTypeActive"></el-switch>
+					</el-form-item>
+					<!-- 选择分类 -->
+					<el-form-item class="test_cascader_id" label="选择分类"	v-if="!isSelectType"
+						prop="rule_value"
+						:rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]"
+					>
+						<el-cascader
+							v-model="formData.rule_value"
+							ref="ruleCascader"
+							:popper-class="'ruleClass'"
+							filterable
+							clearable
+							:options="trees_ab.rule_tree_all"
+							@change="ruleChange2"
+							:props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"
+						></el-cascader>
+					</el-form-item>
+					<!-- 选择规则 -->
+					<el-form-item :label="trees_PtId(formData.pt_id) +'规则'" v-else	prop="tree_echo" :rules="[{ required: true, message: '请选择规则', trigger: 'blur' }]"
+					>
+						<el-cascader
+							v-model="formData.tree_echo"
+							ref="ruleItem"
+							:popper-class="'itemClass'"
+							filterable
+							clearable
+							:options="formData.pt_id == 2 ? trees_ab.A : trees_ab.B"
+							@change="ruleItemChange"
+							:show-all-levels="false"
+							:props="{ children: 'child', label: 'name', value: 'id' }"
+						></el-cascader>
+					</el-form-item>
+
+
+					<el-form-item prop="range_type" v-if="formData.range_type != 0">
+						<div style="line-height: 24px;" v-show="formData.range_type == 1">
+							{{ min }}
+							<span class="blue">{{ trees_PtId(formData.pt_id) }}</span>
+						</div>
+						<div style="line-height: 24px;" v-show="formData.range_type == 2">
+							{{ min }} ~ {{ max }}
+							<span class="blue">{{ trees_PtId(formData.pt_id) }}</span>
+						</div>
+						<div style="line-height: 24px;">{{ treeName }}</div>
+					</el-form-item>
+
+					<el-form-item label="任务积分" prop="base_point" :rules="[{ required: true, message: '请填写任务积分', trigger: 'change' }]">
+						<el-input-number v-if="formData.range_type == 0" v-model.number="formData.base_point"></el-input-number>
+						<el-input-number v-else :disabled="formData.range_type == 1" v-model.number="formData.base_point" :min="min" :max="max"></el-input-number>
+					</el-form-item>
+
+					<el-form-item label="执行人" prop="targets" :rules="[{ required: true, message: '请选择执行人', trigger: 'change' }]">
+						<el-row>
+							<el-col :span="18">
+								<el-input auto-complete="off" v-model="executorName" placeholder="请选择执行人"></el-input>
+								<div @click="show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+							</el-col>
+						</el-row>
+
+						<el-dialog title="选择执行人" width="640px" :visible.sync="show_employee_selector" append-to-body :before-close="handleClose">
+							<EmployeeSelector
+								v-if="show_employee_selector"
+								ref="members"
+								:isCreatorSelect="true"
+								:employee_list="employee_list"
+								:user_no_select="false"
+								:multi="false"
+								:selected="approval_selected"
+								@confirm="approval_confirm"
+							/>
+							<span slot="footer" class="dialog-footer">
+								<el-button @click="show_employee_selector = false">取 消</el-button>
+								<el-button type="primary" @click="submitEmployee('members')">确 定</el-button>
+							</span>
+						</el-dialog>
+					</el-form-item>
+					<el-form-item label="审批人" prop="reviewer_id" :rules="[{ required: true, message: '请选择审批人', trigger: 'blur' }]">
+						<el-row>
+							<el-col :span="18">
+								<el-input auto-complete="off" v-model="reviewerName" placeholder="请选择审批人"></el-input>
+								<div @click="show_reviewer_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+							</el-col>
+						</el-row>
+						<el-dialog title="选择审批人" width="640px" :visible.sync="show_reviewer_selector" append-to-body :before-close="handleClose">
+							<EmployeeSelector
+								v-if="show_reviewer_selector"
+								ref="members1"
+								:isChecKedAll="false"
+								:isCreatorSelect="false"
+								:employee_list="reviewer_employee_list"
+								:user_no_select="true"
+								:multi="false"
+								:use_Administrator_list="true"
+								:selected="reviewer_selected"
+								@confirm="reviewer_confirm"
+							/>
+							<span slot="footer" class="dialog-footer">
+								<el-button @click="show_reviewer_selector = false">取 消</el-button>
+								<el-button type="primary" @click="submitEmployee1('members1')">确 定</el-button>
+							</span>
+						</el-dialog>
+					</el-form-item>
+					<el-form-item label="截止日期" prop="expire_time" v-if="formData.task_cycle == 0" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-date-picker
+							v-model="formData.expire_time"
+							type="datetime"
+							placeholder="选择日期时间"
+							format="yyyy-MM-dd HH:mm"
+							value-format="yyyy-MM-dd HH:mm"
+							default-time="18:00"
+						></el-date-picker>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 1" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns1" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 2" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns2" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 3" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
+						<el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
+							<el-option v-for="item in columns3" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="任务描述" prop="task_remark" :rules="[{ max: 300, message: '长度不能超过 300 个字', trigger: 'blur' }]">
+						<el-input type="textarea" :rows="5" maxlength="300" show-word-limit v-model="formData.task_remark" placeholder="请输入任务内容(限300字)"></el-input>
+					</el-form-item>
+					
+					<el-form-item label="图片">
+						<upload
+							:headers="Xtoken"
+							class="avatar-uploader"
+							:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
+							:show-file-list="true"
+							:file-list="fileList"
+							:on-success="handleFilesSuccess"
+							:on-preview="onFilePreView"
+							:before-upload="beforeUpload"
+							:on-remove="onFileRemove"
+							:limit="3"
+							:multiple="true"
+							ref="clearPicture"
+						>
+							<el-button size="small" type="primary">点击上传</el-button>
+							(最多选择3张)
+						</upload>
+					</el-form-item>
+					
+					<div style="margin-left: 80px; margin-bottom: 8px;">以天为单位,每 提前/逾期 一天 加分/扣分</div>
+					<el-form-item label="提前奖分" prop="ahead_award_point">
+						<el-input v-model="formData.ahead_award_point" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入每日奖分" style="width: 150px;"></el-input> B分/每天,
+						奖分上限 &nbsp;<el-input v-model="formData.ahead_award_point_limit" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入奖分上限" style="width: 150px;"></el-input> B分
+					</el-form-item>
+					<el-form-item label="逾期扣分"  prop="timeout_deduction_point" >
+						<el-input v-model="formData.timeout_deduction_point" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入每日扣分" style="width: 150px;"></el-input> B分/每天,
+						扣分上限 &nbsp;<el-input v-model="formData.timeout_deduction_point_limit" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入扣分上限" style="width: 150px;"></el-input> B分
+					</el-form-item>
+					<el-form-item v-show="false" prop="ahead_award_point_limit" ></el-form-item>
+					<el-form-item v-show="false" prop="timeout_deduction_point_limit" ></el-form-item>
+
+					<el-form-item>
+						<div class="flex-box-end">
+							<el-button @click="resetForm('formData')">取消</el-button>
+							<el-button type="primary" @click="sub('formData')">确认修改</el-button>
+						</div>
+					</el-form-item>
+				</el-form>
+			</div>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import moment from 'moment';
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import upload from '@/components/upload';
+export default {
+	name: 'temporaryTask',
+	props: {
+		modifyData: {
+			type: Object
+		},
+		employee_not_select: {
+			type: Array,
+			default: () => {
+				return [];
+			}
+		},
+		dialogVisible: {
+			type: Boolean,
+			default: false
+		},
+		showTitle: {
+			type: String,
+			default: ''
+		},
+		trees_ab: {
+			type: Object,
+			default: ()=>{
+				return {};
+			}
+		}
+	},
+	data() {
+		return {
+			//图片附件
+			isSelectType:false,//是否选择分类
+			
+			Xtoken: { 'X-Token': this.$getToken() },
+			fileList: [],
+			max: 0,
+			min: 0,
+			treeName: '',
+			taskload: false,
+			formData: {
+				tree_echo: [],//用于编辑任务时的规则回显
+				file_list: [],
+				range_type: 0,
+				rule_id: 0,
+				rule_value:[],
+				id: 0,
+				task_name: '',
+				base_point: '0',
+				task_remark: '',
+				pt_id: 3,
+				task_expire_day: 1,
+				expire_time: moment().format('YYYY-MM-DD 18:00'),
+				weight: 0,
+				package_id: 0,
+				targets: [],
+				reviewer_id: '',
+				task_cycle: 0,
+				timeout_deduction_point: null,
+				timeout_deduction_point_limit: null,
+				ahead_award_point: null,
+				ahead_award_point_limit: null,
+			},
+			point_types: [],
+			arr:[],
+			
+			// 执行者
+			executorName: null,
+			show_employee_selector: false,
+			approval_selected: { dept: [], employee: [] },
+			approval_not_select: [],
+			employee_list: this.$getUserData().employee_detail.manage_scope,
+			// 审批人
+			reviewerName: null,
+			reviewer_not_select: [],
+			reviewer_employee_list: [],
+			reviewer_selected: { dept: [], employee: [] },
+			show_reviewer_selector: false,
+
+			// 重复周期
+			task_cycle_arr: [{ value: 0, name: '不重复' }, { value: 1, name: '每天重复' }, { value: 2, name: '每周重复' }, { value: 3, name: '每月重复' }],
+			// 周期时间
+			columns1: [
+				{ name: '01:00', value: 1 },
+				{ name: '02:00', value: 2 },
+				{ name: '03:00', value: 3 },
+				{ name: '04:00', value: 4 },
+				{ name: '05:00', value: 5 },
+				{ name: '06:00', value: 6 },
+				{ name: '07:00', value: 7 },
+				{ name: '08:00', value: 8 },
+				{ name: '09:00', value: 9 },
+				{ name: '10:00', value: 10 },
+				{ name: '11:00', value: 11 },
+				{ name: '12:00', value: 12 },
+				{ name: '13:00', value: 13 },
+				{ name: '14:00', value: 14 },
+				{ name: '15:00', value: 15 },
+				{ name: '16:00', value: 16 },
+				{ name: '17:00', value: 17 },
+				{ name: '18:00', value: 18 },
+				{ name: '19:00', value: 19 },
+				{ name: '20:00', value: 20 },
+				{ name: '21:00', value: 21 },
+				{ name: '22:00', value: 22 },
+				{ name: '23:00', value: 23 },
+				{ name: '24:00', value: 24 }
+			],
+			columns2: [
+				{ name: '周一', value: 1 },
+				{ name: '周二', value: 2 },
+				{ name: '周三', value: 3 },
+				{ name: '周四', value: 4 },
+				{ name: '周五', value: 5 },
+				{ name: '周六', value: 6 },
+				{ name: '周日', value: 7 }
+			],
+			columns3: [
+				{ name: '1号', value: 1 },
+				{ name: '2号', value: 2 },
+				{ name: '3号', value: 3 },
+				{ name: '4号', value: 4 },
+				{ name: '5号', value: 5 },
+				{ name: '6号', value: 6 },
+				{ name: '7号', value: 7 },
+				{ name: '8号', value: 8 },
+				{ name: '9号', value: 9 },
+				{ name: '10号', value: 10 },
+				{ name: '11号', value: 11 },
+				{ name: '12号', value: 12 },
+				{ name: '13号', value: 13 },
+				{ name: '14号', value: 14 },
+				{ name: '15号', value: 15 },
+				{ name: '16号', value: 16 },
+				{ name: '17号', value: 17 },
+				{ name: '18号', value: 18 },
+				{ name: '19号', value: 19 },
+				{ name: '20号', value: 20 },
+				{ name: '21号', value: 21 },
+				{ name: '22号', value: 22 },
+				{ name: '23号', value: 23 },
+				{ name: '24号', value: 24 },
+				{ name: '25号', value: 25 },
+				{ name: '26号', value: 26 },
+				{ name: '27号', value: 27 },
+				{ name: '28号', value: 28 },
+				{ name: '29号', value: 29 },
+				{ name: '30号', value: 30 },
+				{ name: '31号', value: 31 }
+			]
+		};
+	},
+	components: { EmployeeSelector, upload },
+	watch: {
+		dialogVisible() {
+			if (this.dialogVisible) {
+				this.Datas();
+			}
+		},
+		'formData.task_cycle'(val) {
+			if (val) {
+				this.formData.task_expire_day = 1;
+			} else {
+				this.formData.expire_time = moment().format('YYYY-MM-DD 18:00');
+			}
+		},
+	},
+	mounted() {
+		this.point_types = this.$getCache('types');
+	},
+	methods: {
+		isSelectTypeActive(){
+			let item = this.formData;
+			this.max = 0;
+			this.min = 0;
+			this.treeName = '';
+			item.tree_echo = [];
+			item.task_remark = '';
+			item.base_point = '0';
+			item.range_type = 0;
+			item.item_id = 0;
+			item.rule_id=0;
+			item.rule_value=[];
+		},
+		// 规则分类变化关闭dewn
+		ruleChange2(value) {
+			const item = this.formData;
+			if (value.length > 0) {
+				item.rule_id = value[value.length - 1];
+			} else {
+				item.rule_id = '';
+				item.rule_value = '';
+			}
+			this.$refs.ruleCascader.dropDownVisible=false;
+		},
+		trees_PtId(id) {
+			return id == 2 ? 'A分' : 'B分'
+		},
+		ruleItemChange(val){
+			let item = this.formData;
+			if(val.length>0){
+				let data = this.$refs.ruleItem.getCheckedNodes()[0].data;//当前选中的节点数据
+				item.task_remark = data.name;
+				this.treeName = data.name;
+				this.max = data.max_point * 1;
+				this.min = data.min_point * 1;
+				item.base_point = data.min_point;
+				item.range_type = data.range_type;
+				item.rule_id = data.pid;
+				item.item_id = data.id;
+			}else{
+				item.task_remark = '';
+				this.treeName = '';
+				this.max = 0;
+				this.min = 0;
+				item.base_point = '0';
+				item.range_type = 0;
+				item.rule_id = 0;
+				item.item_id = 0;
+			}
+		},
+		Datas() {
+			this.formData.id = this.modifyData.id;
+			this.formData.task_name = this.modifyData.task_name;
+			this.formData.range_type = 0;
+			this.formData.base_point = this.modifyData.point_config.base_point;
+			this.formData.task_remark = this.modifyData.task_remark;
+			this.formData.pt_id = this.modifyData.pt_id;
+			this.formData.expire_time = this.modifyData.expire_time;
+			this.executorName = this.modifyData.employee_name;
+			this.reviewerName = this.modifyData.reviewer_name;
+
+			this.formData.targets.push(this.modifyData.employee_id); //执行者
+			this.approval_selected.employee = [{ id: this.modifyData.employee_id, img_url: this.modifyData.img_url, name: this.modifyData.employee_name }];
+
+			this.formData.reviewer_id = this.modifyData.reviewer_id;
+			this.reviewer_selected.employee = [{ id: this.modifyData.reviewer_id, img_url: this.modifyData.img_url, name: this.modifyData.reviewer_name }];
+			
+			let filtList = []
+			this.modifyData.task_file_list.forEach((item, index) =>{
+				filtList.push({name: item ,url:item, response: { url:item }})
+			})
+			this.fileList = filtList
+			this.fileFun('', filtList)
+			// 指定了规则
+			if(this.modifyData.point_config.item_info){
+				let itemInfo = this.modifyData.point_config.item_info
+				this.arr=[itemInfo.id];
+				// 获取规则的上级分类
+				this.ruleChange(itemInfo.rule_id)
+				this.formData.tree_echo = this.arr
+				this.isSelectType=true;
+				this.$nextTick(_=>{
+					this.arr=[];
+					this.ruleItemChange(this.formData.tree_echo);
+				})
+			}else if(this.modifyData.rule_id){//指定了分类
+				this.isSelectType=false;
+				this.formData.rule_id = this.modifyData.rule_id;
+				this.formData.rule_value = this.returnRuleVal(this.modifyData.rule_id,[]);
+			}
+			
+			let add = ['ahead_award_point', 'ahead_award_point_limit', 'timeout_deduction_point', 'timeout_deduction_point_limit']
+			add.forEach(item =>{
+				this.deductionPoint(item)
+			})
+
+		},
+		ruleChange(aid){
+			this.arr.unshift(aid);
+			let list = this.trees_ab.rule_tree.filter(x => x.id == aid)
+			if(list[0].pid == 0){
+				return false
+			}else{
+				this.ruleChange(list[0].pid)
+			}
+		},
+		returnRuleVal(rule_id,arr){
+			arr.unshift(rule_id)
+			let list = this.trees_ab.rule_tree.filter(x => x.id == rule_id)
+			if(list[0].pid != 0){
+				this.returnRuleVal(list[0].pid,arr)
+			}
+			return arr;
+		},
+		submitEmployee(name) {
+			this.$refs[name].confirm(); //调用组件的confirm();
+		},
+		submitEmployee1(name) {
+			this.$refs[name].confirm(); //调用组件的confirm();
+		},
+		//关闭
+		handleClose(done) {
+			done();
+		},
+		deductionPoint(item){
+			if (this.modifyData.point_config[item] != '0') {
+				this.formData[item] = this.modifyData.point_config[item];
+			} else {
+				this.formData[item] = '';
+			}
+		},
+		sub(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					this.saveFun(formName);
+				}
+			});
+		},
+		resetForm(formName) {
+			this.$emit('update:dialogVisible', false);
+			this.$refs[formName].resetFields();
+			this.fileList = []
+			this.formData.tree_echo = []
+			this.executorName = '';
+			this.reviewerName = '';
+			this.formData.range_type=0;
+			this.formData.rule_id=0;
+			this.formData.item_id=0;
+		},
+		ahead_timeout(item,arr,codes,code){
+			if(item){
+				if(arr){
+					if(Number(item) > Number(arr)){
+						this.$message.warning(code +'上限不能小于每日'+ code)
+						return true
+					}
+				}else{
+					this.$message.warning( codes + '不为0时,'+ code +'上限不能为空')
+					return true
+				}
+			}
+		},
+		deletedata(data,arr){
+			data[arr] && data[arr] != 0 ?  '' : delete data[arr]
+		},
+		// 提交
+		saveFun(formName) {
+			let self = this;
+			let data = JSON.parse(JSON.stringify(self.formData));
+			if (data.timeout_deduction_point == '') {
+				data.timeout_deduction_point = 0;
+			}
+			
+			if(!data.ahead_award_point && data.ahead_award_point_limit){
+				this.$message.warning('奖分上限不为0时每日奖分不能为空')
+				return
+			}else if(data.ahead_award_point && !data.ahead_award_point_limit){
+				this.$message.warning('每日奖分不为0时奖分上限不能为空')
+				return
+			}
+			if(!data.timeout_deduction_point && data.timeout_deduction_point_limit){
+				this.$message.warning('扣分上限不为0时每日扣分不能为空')
+				return
+			}else if(data.timeout_deduction_point && !data.timeout_deduction_point_limit){
+				this.$message.warning('每日扣分不为0时扣分上限不能为空')
+				return
+			}
+			if(this.ahead_timeout(data.ahead_award_point,data.ahead_award_point_limit,'提前奖分','奖分')) return
+			if(this.ahead_timeout(data.timeout_deduction_point,data.timeout_deduction_point_limit,'逾期扣分','扣分')) return
+			if(!this.$getIsCreator('creator')||this.$getUserData().point_config.point_limit.length!=0){
+				let entry_limit =  Number(this.$getUserData().point_config.point_limit[1].point)
+				if(entry_limit > 0){
+					if(data.ahead_award_point > entry_limit || data.timeout_deduction_point > entry_limit ){
+						this.$message.warning('每日奖扣分 不能超过您的奖扣分权限(您的奖扣分权限:' + entry_limit + '分)')
+						return
+					}
+					if(data.ahead_award_point_limit > entry_limit*10 || data.timeout_deduction_point_limit > entry_limit*10 ){
+						this.$message.warning('奖扣分上限不能超过' + entry_limit*10 + '分(您的奖扣分权限' + entry_limit + '分*10)')
+						return
+					}
+				}
+			}
+			let add = ['ahead_award_point', 'ahead_award_point_limit', 'timeout_deduction_point', 'timeout_deduction_point_limit']
+			add.forEach(item =>{
+				this.deletedata(data,item)
+			})
+			this.taskload = true;
+			self.$axios('post', '/api/integral/work/update', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.$parent.get_list();
+						this.resetForm('formData')
+						self.$message.success(res.data.msg);
+					} else {
+						self.$message.error(res.data.msg);
+					}
+				})
+				.finally(() => {
+					this.taskload = false;
+				});
+		},
+		// 执行者
+		approval_confirm(data) {
+			this.approval_selected = { dept: [], employee: [] };
+			this.formData.targets = [];
+			this.executorName = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				this.approval_selected = data;
+				data.employee.forEach(element => {
+					this.formData.targets.push(element.id);
+					this.executorName += element.name + ',';
+				});
+			}
+			this.show_employee_selector = false;
+		},
+		// 审核人
+		reviewer_confirm(data) {
+			this.reviewer_selected = { dept: [], employee: [] };
+			this.formData.reviewer_id = '';
+			this.reviewerName = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				this.reviewer_selected = data;
+				this.formData.reviewer_id = data.employee[0].id;
+				this.reviewerName = data.employee[0].name;
+			}
+			this.show_reviewer_selector = false;
+		},
+		closeDialog() {
+			this.resetForm('formData')
+		},
+		handleFilesSuccess(response, file, fileList) {
+			this.fileFun(file, fileList)
+		},
+		onFilePreView(file) {
+			if (file.response) {
+				window.open(file.response.url, '_blank');
+			}
+		},
+		onFileRemove(file, fileList) {
+			this.fileFun(file, fileList)
+		},
+		fileFun(file, fileList){
+			this.fileList = fileList;
+			this.formData.file_list = []
+			fileList.forEach((item, index) => {
+				this.formData.file_list.push(item.url);
+			});
+		},
+		// 附件上传
+		beforeUpload(file) {
+			const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
+			const isLt2M = file.size / 1024 / 1024 < 1;
+			if (!isJPG) {
+				this.$message.error('上传头像图片只能是 JPEG,PNG,JPG 格式!');
+			}
+			if (!isLt2M) {
+				this.$message.error('上传头像图片大小不能超过 2MB!');
+			}
+			return isJPG && isLt2M;
+		},
+	}
+};
+</script>

+ 415 - 0
src/views/ranking/attendance_rating.vue

@@ -0,0 +1,415 @@
+<template>
+	<div>
+		<div class="all" v-loading="attendload">
+			<div>
+				<el-form :inline="true">
+					<el-form-item label="考勤组">
+						<el-select v-model="formData.group_id" @change="selectgroupId" filterable :clearable="false" placeholder="请选择考勤组">
+							<el-option v-for="item in checkingInGroup" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</el-form-item>
+					<el-form-item label="排名类型">
+						<el-select v-model="formData.event_type" @change="selectgroupId" style="width:110px" placeholder="请选择">
+							<el-option v-for="(item, index) in event_type" :key="index" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</el-form-item>
+					<el-form-item label="时间">
+						<el-date-picker
+							style="width:290px"
+							class="first-element-btn"
+							:clearable="false"
+							v-model="time_range"
+							type="daterange"
+							value-format="yyyy-MM-dd"
+							range-separator="至"
+							start-placeholder="开始日期"
+							end-placeholder="结束日期"
+							:picker-options="instantPickerOptions"
+							@change="onFilterChanged"
+						></el-date-picker>
+					</el-form-item>
+					<el-form-item>
+						<el-button type="primary" plain @click="exportRanking">导出排名</el-button>
+						<el-button type="primary" plain @click="isUpdate=true">更新考勤数据</el-button>
+					</el-form-item>
+				</el-form>
+			</div>
+			<el-table :data="all_integral_list" style="width: 100%" v-loading="loading">
+				<el-table-column label="名次" width="100" align="center">
+					<template slot-scope="scope">
+						<img v-if="scope.row.rank === 1" src="@/assets/image/statistics_NO1.png" alt />
+						<img v-if="scope.row.rank === 2" src="@/assets/image/statistics_NO2.png" alt />
+						<img v-if="scope.row.rank === 3" src="@/assets/image/statistics_NO3.png" alt />
+						<span v-if="scope.row.rank > 3">{{ scope.row.rank }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="姓名" align="left">
+					<template slot-scope="scope">
+						<div style="display:flex;">
+							<userImage :user_name="scope.row.name" :img_url="scope.row.img_url" width="50px" height="50px"></userImage>
+							<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.name }}</span>
+						</div>
+					</template>
+				</el-table-column>
+				<el-table-column prop="point" label="B分" align="left">
+					<template slot-scope="scope">
+						<b style="font-size:15px;color:#909399">{{ scope.row.point }}</b>
+					</template>
+				</el-table-column>
+				<template slot="empty">
+					<noData :content="checkingInGroup.length == 0 ? '请先开启钉钉考勤' : '暂无数据'"></noData>
+				</template>
+			</el-table>
+			<center style="padding: 20px 0;">
+				<el-pagination
+					background
+					@size-change="handleSizeChange1"
+					@current-change="handleCurrentChange"
+					:current-page="formData.page"
+					:page-sizes="[10, 20, 50, 100]"
+					layout="total, sizes, prev, pager, next"
+					:page-size="pageLimit1"
+					:total="total"
+				></el-pagination>
+			</center>
+		</div>
+		<!-- 更新考勤数据 -->
+		<el-dialog title="更新考勤数据" :visible.sync="isUpdate" width="730px">
+			<el-form>
+				<el-form-item label="考勤组">
+					  <el-radio-group v-model="update.type">
+						<el-radio label="daily">更新某一天的考勤数据</el-radio>
+						<el-radio label="monthly">更新某个月的考勤数据</el-radio>
+					  </el-radio-group>
+				</el-form-item>
+				<el-form-item label="日" v-if="update.type=='daily'">
+					<el-date-picker
+					  v-model="update.target_date"
+					  type="date"
+					  value-format="yyyy-MM-dd"
+					  :picker-options="pickerOptions"
+					  placeholder="选择日期">
+					</el-date-picker>
+				</el-form-item>
+				<el-form-item label="月" v-else>
+					<el-date-picker
+					 value-format="yyyy-MM"
+					 :picker-options="pickerOptions"
+					  v-model="update.target_month"
+					  type="month"
+					  placeholder="选择月">
+					</el-date-picker>
+				</el-form-item>
+			</el-form>
+			<span class="dialog-footer" style="display:flex;justify-content: flex-end;">
+				<el-button @click="isUpdate = false">取 消</el-button>
+				<el-button type="primary" @click="saveUpdate">确 定</el-button>
+			</span>
+		</el-dialog>
+		<!-- 导出弹窗 -->
+		<el-dialog title="导出排名" :visible.sync="dialogVisible" width="730px">
+			<div style="font-size:15px;margin:20px 0 20px 0;">系统将按以下已选条件导出对应的排名报表</div>
+			<div v-loading="exportLoad">
+				<el-form :inline="true">
+					<el-form-item label="考勤组">
+						<el-select v-model="exportData.group_id" @change="selectgroupId" filterable :clearable="false" placeholder="请选择考勤组">
+							<el-option v-for="item in checkingInGroup" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="排名类型">
+						<el-select v-model="exportData.event_type" style="width:150px" placeholder="请选择">
+							<el-option v-for="(item, index) in event_type" :key="index" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="时间">
+						<el-date-picker
+							class="first-element-btn"
+							:clearable="false"
+							v-model="exportTime_range"
+							type="daterange"
+							value-format="yyyy-MM-dd"
+							range-separator="至"
+							start-placeholder="开始日期"
+							end-placeholder="结束日期"
+							:picker-options="instantPickerOptions"
+						></el-date-picker>
+					</el-form-item>
+				</el-form>
+				<span class="dialog-footer" style="display:flex;justify-content: flex-end;">
+					<el-button @click="dialogVisible = false">取 消</el-button>
+					<el-button type="primary" @click="exportExcel">导 出</el-button>
+				</span>
+			</div>
+		</el-dialog>
+	</div>
+</template>
+<script>
+
+export default {
+	data() {
+		return {
+		  // 设置只能选择当前日期及之后的日期
+		    pickerOptions: {
+			  disabledDate(time) {
+				return time.getTime() > Date.now() - 8.64e7;//如果没有后面的-8.64e7就是不可以选择今天的 
+			  }
+			},
+			exportLoad: false,
+			dialogVisible: false,
+			checkingInGroup: [],
+			event_type: [
+				{ id: 0, name: '总分' },
+				{ id: 1, name: '迟到' },
+				{ id: 2, name: '早退' },
+				{ id: 6, name: '准时打卡' },
+				{ id: 20, name: '上班缺卡' },
+				{ id: 21, name: '下班缺卡' },
+				{ id: 16, name: '加班 ' },
+				{ id: 10, name: '缺勤' }
+			],
+			attendload: false,
+			loading: false,
+			all_integral_list: null,
+			Month_range: this.$moment().format('YYYY-MM'),
+			time_range: [
+				this.$moment()
+					.startOf('month')
+					.format('YYYY-MM-DD'),
+				this.$moment()
+					.endOf('month')
+					.format('YYYY-MM-DD')
+			],
+			formData: {
+				group_id: '',
+				// date_type: 3,
+				page: 1,
+				page_size: 10,
+				event_type: 0
+			},
+			exportMonth_range: this.$moment().format('YYYY-MM'),
+			exportTime_range: [
+				this.$moment()
+					.startOf('month')
+					.format('YYYY-MM-DD'),
+				this.$moment()
+					.endOf('month')
+					.format('YYYY-MM-DD')
+			],
+			exportData: {
+				group_id: '',
+				event_type: 0
+			},
+			total: 0,
+			dept_tree: [],
+			dept_name: [],
+			pageLimit1: 10,
+			instantPickerOptions: {
+				shortcuts: [
+					{
+						text: '本周',
+						onClick(picker) {
+							const now = new Date();
+							const start = new Date();
+							start.setTime(now.getTime() - (now.getDay() - 1) * 24 * 60 * 60 * 1000);
+							now.setTime(start.getTime() + 6 * 24 * 60 * 60 * 1000 - 1000);
+							picker.$emit('pick', [start, now]);
+						}
+					},
+					{
+						text: '上周',
+						onClick(picker) {
+							const end = new Date();
+							const start = new Date();
+							start.setTime(start.getTime() - (start.getDay() + 6) * 3600 * 1000 * 24);
+							end.setTime(start.getTime() + 6 * 24 * 60 * 60 * 1000 - 1000);
+							picker.$emit('pick', [start, end]);
+						}
+					},
+					{
+						text: '本月',
+						onClick(picker) {
+							const now = new Date();
+							const startDate = new Date(now.getFullYear(), now.getMonth(), 1);
+							const endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0);
+							picker.$emit('pick', [startDate, endDate]);
+						}
+					},
+					{
+						text: '上月',
+						onClick(picker) {
+							const now = new Date();
+							const startDate = new Date(now.getFullYear() - (now.getMonth() > 0 ? 0 : 1), (now.getMonth() + 11) % 12, 1);
+							const endDate = new Date(now.getFullYear(), now.getMonth(), 0);
+							picker.$emit('pick', [startDate, endDate]);
+						}
+					}
+				]
+			},
+			// 更新考勤数据
+			isUpdate:false,
+			update:{
+				type:'daily',
+				target_date:this.$moment().subtract(1, "days").format("YYYY-MM-DD"),
+				target_month:this.$moment().format("YYYY-MM"),
+			}
+		};
+	},
+	
+	watch:{
+		isUpdate(val){
+			if(!val){
+				this.update={
+					type:'daily',
+					target_date:this.$moment().subtract(1, "days").format("YYYY-MM-DD"),
+					target_month:this.$moment().format("YYYY-MM"),
+				}
+			}
+		}
+	},
+	mounted() {
+		this.checkingIn_group(); //考勤组
+	},
+	methods: {
+		saveUpdate(){
+			let update=this.update
+			let data={type:update.type};
+			if(update.type=='daily'){
+				if(!update.target_date){
+					this.$message.error('请选择日期');
+					return false
+				}
+				data.target_date=update.target_date
+			}else{
+				if(!update.target_month){
+					this.$message.error('请选择月份');
+					return false
+				}
+				data.target_month=update.target_month
+			}
+			this.$axios('post','/api/ding/ad_sync',data).then(res => {
+				if (res.data.code == 1) {
+					this.$message.success('已更新');
+					this.isUpdate=false;
+				}
+			})
+		},
+		exportRanking() {
+			if (this.checkingInGroup.length > 0) {
+				this.exportData.group_id = this.checkingInGroup[0].id;
+			}
+			this.dialogVisible = true;
+		},
+		exportExcel() {
+			window.open(
+				process.env.VUE_APP_BASE_API +
+					'api/download/groups_ranking/export?start_date=' +
+					this.exportTime_range[0] +
+					'&end_date=' +
+					this.exportTime_range[1] +
+					'&page=' +
+					1 +
+					'&page_size=' +
+					2000 +
+					'&group_id=' +
+					this.exportData.group_id +
+					'&event_type=' +
+					this.exportData.event_type +
+					'&employee_id=' +
+					this.$getUserData().id,
+				'_blank'
+			);
+		},
+		selectgroupId() {
+			this.get_all_integral();
+		},
+		onFilterChanged() {
+			this.get_all_integral();
+		},
+		//分页
+		handleSizeChange1(val) {
+			this.pageLimit1 = val;
+			this.formData.page_size = this.pageLimit1;
+			this.get_all_integral();
+		},
+		handleCurrentChange(val) {
+			this.formData.page = val;
+			this.get_all_integral();
+		},
+		//请求数据
+		checkingIn_group() {
+			this.attendload = true;
+			let self = this;
+			let params = {
+				page: 1,
+				page_size: 2000
+			};
+			this.$axios('get', '/api/ad/groups', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						let list = res.data.data.list;
+						let datas = [];
+						for (let key in list) {
+							let obj = {};
+							obj.id = key;
+							obj.name = list[key];
+							datas.push(obj);
+						}
+						this.checkingInGroup = datas;
+						this.formData.group_id = datas[0].id;
+					}
+				})
+				.finally(() => {
+					this.get_all_integral();
+					this.attendload = false;
+				});
+		},
+		//请求数据
+		get_all_integral() {
+			let self = this;
+			self.loading = true;
+			let data = {
+				group_id: this.formData.group_id,
+				page: this.formData.page,
+				page_size: this.formData.page_size,
+				event_type: this.formData.event_type
+			};
+			data.start_date = this.time_range[0];
+			data.end_date = this.time_range[1];
+			this.$axios('post', '/api/ad/rank', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.all_integral_list = res.data.data.list;
+						this.total = res.data.data.total;
+					} else {
+						self.$message.error(res.data.data.msg);
+					}
+				})
+				.finally(() => {
+					self.loading = false;
+				});
+		}
+	}
+};
+</script>
+
+<style scoped>
+.el-date-editor.el-input {
+	width: auto;
+}
+.date-picker-width {
+	width: 145px !important;
+}
+.search ::v-deep .el-input-group__append:active {
+	background: #26a2ff;
+}
+.search ::v-deep .el-input-group__append:active .el-icon-search {
+	color: #fff;
+}
+</style>
+<style lang="scss" scoped>
+::v-deep .el-dialog__body {
+	padding: 0px 20px 30px;
+}
+</style>

+ 303 - 0
src/views/ranking/balanceA.vue

@@ -0,0 +1,303 @@
+<template>
+  <div>
+    <el-alert class="diy-tip" @close="tips_close" v-show="tips_show" type="success" description>
+      <p>A分余额在线下兑换/使用过后,由管理员手动结算清零;</p>
+      <p>清零操作为全员批量清除,请谨慎操作!</p>
+      <p>每次清零将清空指定月份之前的余额(不含指定月份),不可清空未结束月份的余额:</p>
+      <p>例如当前是2020年7月8号,指定选择2020年7月份,可清空2020年7月1号之前所有余额,不清除7月1-8号的余额。</p>
+    </el-alert>
+    <div class="box boxMinHeight">
+      <el-tabs v-model="active">
+        <el-tab-pane label="A分余额" name="balanceA"></el-tab-pane>
+        <el-tab-pane label="清空记录" name="clearLog"></el-tab-pane>
+      </el-tabs>
+
+      <el-form :inline="true" v-if="active == 'balanceA'">
+        <el-form-item label="部门">
+          <el-cascader size="medium" class="date-picker-width" 
+		  v-model="dept_name" 
+		  :options="dept_tree" 
+		  ref="dept" 
+		  :props="{ checkStrictly: true,value:'id',label:'name',children:'_child'}"
+		  clearable
+		  filterable
+		 placeholder="全公司">
+		  </el-cascader>
+        </el-form-item>
+
+        <el-form-item>
+          <el-input size="medium" v-model="formData.keyword" placeholder="输入同事姓名" max="200" @keyup.enter.native="getList()" class="persons_name">
+            <el-button size="medium" slot="append" icon="el-icon-search" @click="getList()"></el-button>
+          </el-input>
+        </el-form-item>
+
+        <el-form-item style="float: right;"><el-button size="medium" type="primary" @click="clearAPointShow = true">清空A分余额</el-button></el-form-item>
+      </el-form>
+
+      <el-table :data="list" style="width: 100%" v-if="active == 'balanceA'" v-loading="loading">
+        <el-table-column label="姓名" prop="name" width="250">
+          <template slot-scope="scope">
+			<div class="flex-box-ce">
+				<userImage class="fl" :id="scope.row.id" :user_name="scope.row.name" :img_url="scope.row.img_url" width="50px" height="50px"></userImage>
+				<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.name }}</span>
+			</div>
+          </template>
+        </el-table-column>
+        <el-table-column label="A分余额" prop="balance_a"></el-table-column>
+        <template slot="empty">
+			<noData></noData>
+        </template>
+      </el-table>
+
+      <el-table :data="list" style="width: 100%" v-else v-loading="loading">
+        <el-table-column label="操作人" prop="name" width="250">
+          <template slot-scope="scope">
+			<div class="flex-box-ce">
+				<userImage class="fl" :id="scope.row.id" :user_name="scope.row.name" :img_url="scope.row.img_url" width="50px" height="50px"></userImage>
+				<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.name }}</span>
+			</div>
+          </template>
+        </el-table-column>
+        <el-table-column label="内容" prop="remark"></el-table-column>
+        <el-table-column prop="create_time" label="时间"></el-table-column>
+        <template slot="empty">
+			<noData></noData>
+        </template>
+      </el-table>
+
+      <center style="padding: 20px 0;">
+        <el-pagination
+          background
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :page-sizes="[10, 20, 50, 100]"
+          layout="total, sizes, prev, pager, next"
+          :page-size="formData.page_size"
+          :current-page="formData.page"
+          :total="total"
+        ></el-pagination>
+      </center>
+
+      <el-dialog title="清空A分余额" :visible.sync="clearAPointShow" width="500px" @close="clearAPointClose('popupForm')">
+        <el-form :model="popupForm" ref="popupForm">
+          <el-form-item prop="month" :rules="[{ required: true, message: '请选择月份', trigger: 'blur' }]">
+            <el-col :span="3">清空</el-col>
+            <el-col :span="8"><el-date-picker style="width: 100%" v-model="popupForm.month" value-format="yyyy-MM" type="month" placeholder="请选择月份"></el-date-picker></el-col>
+            <el-col :span="6">之前的A分</el-col>
+          </el-form-item>
+        </el-form>
+        <span slot="footer">
+          <el-button @click="resetForm('popupForm')">取 消</el-button>
+          <el-button type="primary" @click="onSubmit('popupForm')">确 定</el-button>
+        </span>
+      </el-dialog>
+    </div>
+  </div>
+</template>
+<script>
+
+export default {
+  data() {
+    return {
+      active: 'balanceA',
+      loading: false,
+      tips_show: false,
+      clearAPointShow: false,
+      list: null,
+      total: null,
+      dept_name: '',
+      formData: {
+        keyword: '',
+        dept_id: '0',
+        page: 1,
+        page_size: 10
+      },
+      dept_tree: null,
+      popupForm: {
+        month: ''
+      }
+    };
+  },
+  watch: {
+    dept_name(val) {
+      this.formData.dept_id = val[val.length - 1];
+      this.$refs.dept.dropDownVisible = false;
+      this.getList();
+    },
+    active(val) {
+      this.list = [];
+      this.formData = {
+        keyword: '',
+        dept_id: '0',
+        page: 1,
+        page_size: 10
+      };
+      val == 'balanceA' ? this.getList() : this.getLog();
+    }
+  },
+  methods: {
+    resetForm(formName) {
+      this.clearAPointShow = false;
+      this.$refs[formName].resetFields();
+    },
+    // 清空数据
+    onSubmit(formName) {
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          this.$axios('post', '/api/integral/site/a/clear', this.popupForm)
+            .then(res => {
+              if (res.data.code == 1) {
+                this.$message.success('清除成功');
+                this.resetForm(formName);
+                this.getList();
+                this.clearAPointShow = false;
+              } else {
+                this.$message.error(res.data.data.msg);
+              }
+            })
+            .finally(() => {
+              this.loading = false;
+            });
+        }
+      });
+    },
+    // 关闭弹窗
+    clearAPointClose(formName) {
+      this.$refs[formName].resetFields();
+    },
+    // 提示信息
+    tips_close() {
+      this.$setCache('balanceA_tips', 'true');
+      this.tips_show = false;
+    },
+    // 页码变更
+    handleCurrentChange(val) {
+      this.formData.page = val;
+      this.active == 'balanceA' ? this.getList() : this.getLog();
+    },
+    handleSizeChange(val) {
+      this.formData.page_size = val;
+      this.active == 'balanceA' ? this.getList() : this.getLog();
+    },
+    // 获取列表
+    getList() {
+      let self = this;
+      self.loading = true;
+      self.$axios('get', '/api/integral/site/a/balance', this.formData)
+        .then(res => {
+          if (res.data.code == 1) {
+            self.list = res.data.data.list;
+            self.total = res.data.data.total;
+          } else {
+            self.$message.error(res.data.data.msg);
+          }
+        })
+        .catch(e => {
+          self.$message.error(e.data.data.msg);
+        })
+        .finally(() => {
+          self.loading = false;
+        });
+    },
+    // 获取日志列表
+    getLog() {
+      let self = this;
+      self.loading = true;
+      let data = {
+        page: this.formData.page,
+        page_size: this.formData.page_size
+      };
+      self
+        .$axios('get', '/api/integral/site/a/logs', data)
+        .then(res => {
+          if (res.data.code == 1) {
+            self.list = res.data.data.list;
+            self.total = res.data.data.total;
+          } else {
+            self.$message.error(res.data.data.msg);
+          }
+        })
+        .finally(() => {
+          self.loading = false;
+        });
+    },
+    // 递归判断列表,把最后的children设为undefined
+	getTreeData(data) {
+		for (var i = 0; i < data.length; i++) {
+			if (data[i]._child.length < 1) {
+				// children若为空数组,则将children设为undefined
+				data[i]._child = undefined;
+			} else {
+				// children若不为空数组,则继续 递归调用 本方法
+				this.getTreeData(data[i]._child);
+			}
+		}
+		return data;
+	},
+	//获取部门
+	getDepartment() {
+		this.$axios('get','/api/department/tree').then(res => {
+			this.dept_tree =this.getTreeData(res.data.data.list);
+		});
+	},
+  },
+ created() {
+ 	this.getDepartment();
+ },
+  mounted() {
+    if (this.$getCache('balanceA_tips')) {
+      this.tips_show = false;
+    } else {
+      this.tips_show = true;
+    }
+    this.getList();
+  }
+};
+</script>
+<style scoped lang="scss">
+.box {
+  background-color: #ffffff;
+  padding: 20px;
+}
+.listData {
+  position: relative;
+  display: table-cell;
+  margin: 0 !important;
+  padding: 20px;
+  min-height: 600px;
+  &::after {
+    content: ' ';
+    position: absolute;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    width: 1px;
+    background: #ebeef5;
+  }
+  & .groups_name {
+    display: block;
+    font-size: 20px;
+    color: rgb(48, 49, 51);
+    vertical-align: middle;
+  }
+}
+::v-deep .el-menu-item {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  &.is-active {
+    background-color: #ecf5ff;
+  }
+}
+.diy-tip {
+  margin-bottom: 15px;
+  border: 1px solid #67c23a;
+  padding: 20px 16px;
+  p {
+    color: #67c23a !important;
+    font-size: 14px;
+    margin: 0 !important;
+    padding: 4px 0;
+  }
+}
+</style>

+ 1172 - 0
src/views/ranking/custom_rank.vue

@@ -0,0 +1,1172 @@
+<template>
+	<div class="all-box">
+		<div class="all">
+			<div class="flex-box">
+				<div class="flex-box" v-loading="item_loading">
+					<div class="terr-left">
+						<div style="text-align: center; padding: 10px 0;">
+							<el-button type="primary" @click="addGroup" :disabled="table_loading" v-if="employeeOrdept">新建分组</el-button>
+						</div>
+						<el-menu v-if="groups_list.length > 0" default-active="0" class="el-menu-vertical-demo elMenuCustomRule_Z">
+							<el-menu-item v-for="(item, index) in groups_list" :key="index" :index="index.toString()" @click="getGroupsInfo(item)">
+								<i class="el-icon-document-copy"></i>
+								<span slot="title">{{ item.name }}</span>
+							</el-menu-item>
+						</el-menu>
+						<div v-else style="text-align: center;margin-top: 10%;" class="fontColorF">
+							<img src="@/assets/image/nodata.png" style="width: 180px;height: 120px;margin: 30px auto;" />
+							<div>还没有自定义分组</div>
+						</div>
+					</div>
+				</div>
+				<el-col :span="18" class="listData" v-loading="table_loading">
+					<el-row style="margin-bottom: 10px;" v-if="groups_list.length != 0">
+						<el-col :span="24" class="groups_name">
+							<div class="flex-box flex-v-ce margin-bottom">
+								<div class="groupsName">
+									{{ groups_info.name }}
+									<span class="blue" v-if="total > 0">({{ total }}人)</span>
+								</div>
+								<el-button @click="editGroup" v-if="employeeOrdept" size="medium" style="margin-left:15px;">编辑</el-button>
+							</div>
+						</el-col>
+					</el-row>
+					<el-form :model="params" :inline="true" ref="params">
+						<el-form-item label="月份" label-width="40px" v-if="newGroupForm.date_interval == 1">
+							<el-date-picker v-model="time.month" type="month" :clearable="false" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker>
+						</el-form-item>
+						<el-form-item label="年份" label-width="40px" v-if="newGroupForm.date_interval == 3">
+							<el-date-picker v-model="time.year" type="year" :clearable="false" placeholder="请选择年份" value-format="yyyy"></el-date-picker>
+						</el-form-item>
+						<el-form-item label="季度" label-width="40px" v-if="newGroupForm.date_interval == 2">
+							<Season ref="Seasons" :defaultHint="true" :isActive="true" class="date-picker-width" @confirm="export_quarter_confirm"></Season>
+						</el-form-item>
+						<el-form-item><el-checkbox v-model="sort" size="medium" label="由低到高" border></el-checkbox></el-form-item>
+						<el-button type="primary" @click="exportExcel"  size="medium">导 出</el-button>
+						<el-alert
+							v-if="lastUpdateTime != undefined || lastUpdateTime"
+							:title="
+								'温馨提醒:排名会在积分产生后自动更新,最近更新时间:' +
+									(lastUpdateTime != undefined ? (lastUpdateTime == '' ? '正在更新,请稍候' : lastUpdateTime) : '正在更新,请稍候')
+							"
+							type="success"
+							:closable="false"
+							show-icon
+						></el-alert>
+					</el-form>
+
+					<el-table :data="table_list" style="width: 100%">
+						<el-table-column label="名次" width="80" align="center">
+							<template slot-scope="scope">
+								<img v-if="scope.row.rank === 1" src="@/assets/image/statistics_NO1.png" alt="" />
+								<img v-if="scope.row.rank === 2" src="@/assets/image/statistics_NO2.png" alt="" />
+								<img v-if="scope.row.rank === 3" src="@/assets/image/statistics_NO3.png" alt="" />
+								<span v-if="scope.row.rank > 3">{{ scope.row.rank }}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="姓名" align="left">
+							<template slot-scope="scope">
+								<div class="flex-box">
+									<userImage :user_name="scope.row.name" :img_url="scope.row.img_url" width="50px" height="50px"></userImage>
+									<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.name }}</span>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="B分" align="left" prop="point"></el-table-column>
+						<template slot="empty">
+							<div class="nopoint_box">
+								<div class="noimg noperson"></div>
+								<span class="title">没有对应的数据</span>
+							</div>
+						</template>
+					</el-table>
+
+					<center style="padding: 20px 0;">
+						<el-pagination
+							background
+							@size-change="handleSizeChange"
+							@current-change="handleCurrentChange"
+							:page-sizes="[10, 20, 50, 100]"
+							layout="total, sizes, prev, pager, next"
+							:page-size="params.page_size"
+							:current-page="params.page"
+							:total="total"
+						></el-pagination>
+					</center>
+				</el-col>
+			</div>
+		</div>
+
+		
+		<!-- 新增分组 -->
+		<el-dialog :title="popupType ? '新增分组' : '编辑分组'" width="460px" :visible.sync="groupShow" :close-on-click-modal="false">
+			<el-form ref="newGroupForm" v-loading="loading" :model="newGroupForm" :rules="rules" label-width="85px" @submit.native.prevent>
+				<el-form-item label="分组名称" prop="group_name">
+					<el-input v-model="newGroupForm.group_name" placeholder="请输入分组名称" auto-complete="off"></el-input>
+				</el-form-item>
+				<el-form-item label="分组成员" :required="true">
+					<el-input auto-complete="off" v-model="employees" placeholder="请选择分组成员"></el-input>
+					<div @click="isEmployeeShow = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+					<el-dialog title="选择人员" width="700px" :visible.sync="isEmployeeShow" append-to-body :before-close="handleClose">
+						<EmployeeSelector
+							v-if="isEmployeeShow"
+							ref="Employee"
+							:user_no_select="false"
+							:selected="employees_selected"
+							:close_clear_data="true"
+							@confirm="move_employee_confirm"
+						/>
+						<span slot="footer" class="dialog-footer">
+							<el-button @click="isEmployeeShow = false">取 消</el-button>
+							<el-button type="primary" @click="submitEmployee()">确 定</el-button>
+						</span>
+					</el-dialog>
+				</el-form-item>
+				<el-form-item label="积分规则" :required="true">
+					<el-input auto-complete="off" v-model="newGroupFormRules" placeholder="全部规则分类"></el-input>
+					<div @click="ruleDialogTableVisibles" style="height:36px; position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;cursor:pointer"></div>
+					<div style="margin-bottom:12px;">
+						<span style="font-size:13px;color:#8a8a8a;position: absolute; top: 30px; left: 0;">{{ ruleHint }}</span>
+					</div>
+				</el-form-item>
+				<el-form-item label="统计周期" label-width="85px" :required="true" :show-message="false">
+					<el-select v-model="options_time_value" placeholder="月度" @change="options_times">
+						<el-option v-for="item in options_time" :key="item.value" :label="item.label" :value="item.value"></el-option>
+					</el-select>
+				</el-form-item>
+			</el-form>
+			<div slot="footer" class="dialog-footer flex-v-ce flex-box">
+				<el-button type="danger" v-if="!popupType" :loading="delLoad" @click="delItem">删除</el-button>
+				<div class="flex-1"></div>
+				<el-button @click="resetForm('newGroupForm')">取 消</el-button>
+				<el-button type="primary" :loading="saveLoad" @click="subGroupForm('newGroupForm')">确 定</el-button>
+			</div>
+		</el-dialog>
+		<!-- 选择规则 -->
+		<el-dialog title="选择规则" width="952px" :visible.sync="ruleDialogTableVisible" @close="closeNone" append-to-body :before-close="handleClose">
+			<div style="display:flex;position: relative;width:100%;height:40px">
+				<span style="position: absolute;line-height:40px;left:20px">已选:{{ valuesOrLength.length }}条</span>
+				<el-input type="text" class="search" style="position: absolute;right:20px;width:20%" placeholder="输入关键字搜索" v-model.trim="keyword" />
+			</div>
+			<el-row class="architecture">
+				<el-col :span="8" class="RuleLeft" style="height:500px">
+					<div ref="ruletree" class="department_box">
+						<el-tree
+							ref="menum"
+							node-key="id"
+							:accordion="true"
+							:highlight-current="true"
+							@node-expand="treeOpen"
+							:data="treedata"
+							:default-expand-all="defaultExpand"
+							:props="defaultProps"
+							:expand-on-click-node="false"
+							@node-click="handleNodeClick"
+							@check="handleCheckChange"
+						>
+							<div
+								content="tree"
+								v-if="!data.dis"
+								v-show="treedata.length != 0"
+								class="custom-tree-node"
+								slot-scope="{ node, data }"
+								style="font-size: 14px;color: #606266; width:100%; text-align: left;"
+							>
+								<span class="name">{{ data.name }}</span>
+							</div>
+						</el-tree>
+					</div>
+				</el-col>
+				<el-col :span="16" class="RuleRight" v-loading="tableLoadingRule" style="height:500px;overflow-y:auto">
+					<el-table
+						ref="multipleTable"
+						:data="tableData_rule"
+						tooltip-effect="dark"
+						style="width: 100%;cursor:pointer"
+						@select="onTableSelect"
+						@select-all="selectAll"
+						@cell-click="clicktable"
+						@selection-change="handleSelectionChange"
+					>
+						<el-table-column type="selection" width="55"></el-table-column>
+						<el-table-column prop="remark" :label="'全选'" show-overflow-tooltip></el-table-column>
+					</el-table>
+				</el-col>
+			</el-row>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="ruleDialogTableVisible = false">取 消</el-button>
+				<el-button type="primary" @click="ruleDialogTableVisibleQD">确 定</el-button>
+			</span>
+		</el-dialog>
+	</div>
+</template>
+<script>
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import moment from 'moment';
+import Season from '@/components/season';
+// let valuesLengths = []
+var selecteds = [];
+let selectionID = [];
+//节流
+const delay = (function() {
+	let timer = 0;
+	return function(callback, ms) {
+		clearTimeout(timer);
+		timer = setTimeout(callback.ms);
+	};
+})();
+export default {
+	data() {
+		return {
+			isEmployeeShow: false,
+			ruleHint: '',
+			employeeOrdept: !this.$authoritys('employee') && !this.$authoritys('dept_manager'),
+			lastUpdateTime: '',
+			tableLoadingRule: false, //规则细则加载
+			keyword: '',
+			values_no: [],
+			backups: [], //备份
+			valuesLength: [],
+			multipleSelection: [],
+			valuesOrLength: [],
+			itemList: {},
+			ruleTrees: [], //所有规则列表
+			tableData_rule: [],
+			defaultExpand: false,
+			defaultProps: {
+				children: 'child',
+				label: 'name'
+			},
+			treedata: [],
+
+			ruleDialogTableVisible: false, //编辑-规则-弹出框
+			loading: false,
+			options_time: [
+				{
+					value: '1',
+					label: '月度'
+				},
+				{
+					value: '2',
+					label: '季度'
+				},
+				{
+					value: '3',
+					label: '年度'
+				}
+			],
+			options_time_value: '',
+
+			popupType: false,
+			item_loading: false,
+			table_loading: false,
+			groups_info_loading: false,
+			groups_info: {
+				name: '',
+				employees: []
+			},
+			groups_list: [], //左边分组
+			table_list: [],
+			total: null,
+			time: {
+				year: moment().format('YYYY'), //年
+				quarter: moment().format('YYYYQ'), //季度
+				month: moment().format('YYYY-MM') //月
+			},
+			params: {
+				page: 1,
+				page_size: 10,
+				group_id: '',
+				sort: 'asc',
+				rule: '',
+				pt_id: 3
+			},
+			rule_trees: [],
+			clickItem: null,
+			groupShow: false,
+			rules: {
+				group_name: [{ required: true, message: '请输入分组名称', trigger: 'blur' }, { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }]
+			},
+			newGroupForm: {
+				group_name: '',
+				employees: [],
+				items: [],
+				date_interval: '1'
+			},
+			newGroupFormRules: '',
+			saveLoad: false,
+			delLoad: false,
+			show_employee_selector: false,
+			employee_not_select: [],
+			employees_selected: { employee: [], dept: [] },
+			employees: '',
+			props: { value: 'id', label: 'name', children: 'child', multiple: true, checkStrictly: true }, //
+			sort: false
+		};
+	},
+	watch: {
+		'time.month'(val, old_val) {
+			this.time.month = val;
+			this.params.page = 1;
+			this.open_right(this.clickItem);
+		},
+		'time.year'(val, old_val) {
+			this.time.year = val;
+			this.params.page = 1;
+			this.open_right(this.clickItem);
+		},
+		// "time.quarter"(val, old_val) {
+		//   this.params.quarter = val
+		//   // this.params.page = 1;
+		//   // this.open_right(this.clickItem);
+		// },
+		sort(val) {
+			this.params.page = 1;
+			val ? (this.params.sort = 'desc') : (this.params.sort = 'asc');
+			this.open_right(this.clickItem);
+		},
+		keyword() {
+			//函数节流
+			if (this.timer) {
+				clearTimeout(this.timer);
+			}
+			//清空 全部
+			if (!this.keyword) {
+				this.tableData_rule = this.tableData_rule2;
+				this.ifPitchOnChild(this.tableData_rule, selecteds);
+				return;
+			}
+			this.timer = setTimeout(() => {
+				const result = [];
+				this.tableData_rule2.forEach(val => {
+					if (val.remark.indexOf(this.keyword) > -1) {
+						result.push(val);
+					}
+				});
+				this.tableData_rule = result;
+				this.ifPitchOnChild(this.tableData_rule, selecteds);
+			}, 100);
+		}
+	},
+	components: { EmployeeSelector, Season },
+	methods: {
+		exportExcel() {
+			let months;
+			if (this.newGroupForm.date_interval == '1') {
+				months = this.time.month.replace('-', '');
+			}
+			let data={
+				group_id:this.clickItem.id,
+				date:'',
+				sort:this.sort?'desc':'asc',
+				employee_id:this.$getUserData().id,
+			};
+			data.date =this.newGroupForm.date_interval == '1'? months: this.newGroupForm.date_interval == '2'
+					? this.time.quarter
+					: this.newGroupForm.date_interval == '3'
+					? this.time.year
+					: '';	
+			let str='&group_id='+data.group_id+'&date='+data.date+'&sort='+data.sort;
+			window.open(process.env.VUE_APP_BASE_API + 'api/download/groups_export?employee_id='+this.$getUserData().id+str, '_blank');
+		},
+		submitEmployee() {
+			this.$refs.Employee.confirm(); //调用组件的confirm();
+		},
+		//点击某行
+		clicktable(row, column, cell, event) {
+			let selectedsif = false;
+			for (let i in selecteds) {
+				if (row.id == selecteds[i]) {
+					selectedsif = true;
+					selecteds.splice(i, 1);
+					this.toggleSelection([row], false);
+				}
+			}
+			if (selectedsif == false) {
+				selecteds.push(row.id);
+				this.ifPitchOnChild(this.tableData_rule, selecteds);
+			}
+		},
+		//全选
+		selectAll(selection) {
+			for (let i in selection) {
+				selectionID.push(selection[i].id);
+			}
+			let tableData_rules = []; //当前分页id
+			for (let i in this.tableData_rule) {
+				tableData_rules.push(this.tableData_rule[i].id);
+			}
+			selectionID = [...new Set(selectionID)];
+			if (selection.length == 0) {
+				//全不选
+				//判断差值
+				var diff = [];
+				var tmp = tableData_rules;
+				selectionID.forEach(function(val1, i) {
+					if (tableData_rules.indexOf(val1) < 0) {
+						diff.push(val1);
+					} else {
+						tmp.splice(tmp.indexOf(val1), 1);
+					}
+				});
+				selectionID = diff.concat(tmp);
+			} else {
+				//全选
+			}
+			selecteds = [...new Set(selectionID)];
+			this.valuesOrLength = selecteds;
+		},
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i].child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i].child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i].child);
+				}
+			}
+			return data;
+		},
+		//获取规则
+		get_rule_trees() {
+			this.$axios('get', '/api/integral/rule/trees', { cycle_type: 1 }).then(res => {
+				this.treedata = this.getTreeData(res.data.data.rule_tree || []);
+				this.itemList = res.data.data.item_list; //规则
+			});
+		},
+		//点击规则弹出窗口
+		ruleDialogTableVisibles() {
+			this.tableLoadingRule = true;
+			selecteds = this.valuesOrLength;
+			//点击弹出窗口并展示所有数据
+			let tableData_r = [];
+			for (let i in this.itemList) {
+				for (let a in this.itemList[i]) {
+					tableData_r.push(this.itemList[i][a]);
+				}
+			}
+			this.tableData_rule2 = tableData_r; //赋予筛选数据
+			this.tableData_rule = tableData_r;
+			this.ruleDialogTableVisible = true;
+			this.ifPitchOnChild(this.tableData_rule, selecteds);
+		},
+		recursion(data, arr) {
+			for (let i in data.child) {
+				if (data.child.length != 0) {
+					arr.push(data.id);
+				} else {
+					arr.push(data.id);
+				}
+			}
+			return [...new Set(arr)];
+		},
+
+		//此方法:拿到当前点击规则分类的所有子节点ID,(为了包含子分类 规则)
+		menuIdInit(menus) {
+			var _this = this;
+			var _menu = menus;
+			var menuId = [];
+			var len = _menu.length;
+			for (var i = 0; i < len; i++) {
+				var item = _menu[i];
+				if (item.child && item.child.length != 0) {
+					var child = item.child;
+					for (var j = 0; j < child.length; j++) {
+						_menu[len + j] = child[j];
+					}
+					len = _menu.length;
+				}
+				menuId.push(item.id);
+			}
+			return menuId;
+		},
+		//点击规则分类
+		handleNodeClick(data) {
+			let dataArr = this.menuIdInit([data]); //调用方法
+			this.tableLoadingRule = true;
+			this.keyword = ''; //切换规则重置搜索框
+			let tableData_r = [];
+			for (let i in this.itemList) {
+				for (let a in this.itemList[i]) {
+					for (let x in dataArr) {
+						if (dataArr[x] == this.itemList[i][a].rule_id) {
+							tableData_r.push(this.itemList[i][a]);
+						}
+					}
+				}
+			}
+			this.tableData_rule2 = tableData_r; //赋予筛选数据
+			this.tableData_rule = tableData_r;
+			this.ifPitchOnChild(this.tableData_rule, selecteds);
+		},
+		ifPitchOnChild(item, indexID) {
+			let pitchOnChild = [];
+			for (let i in item) {
+				for (let a in indexID) {
+					//判断外层的值相不相等
+					if (indexID[a] == item[i].id) {
+						pitchOnChild.push(item[i]);
+					}
+				}
+			}
+			this.toggleSelection(pitchOnChild, true);
+		},
+		//默认选中
+		toggleSelection(rows, selected) {
+			if (rows) {
+				this.$nextTick(() => {
+					rows.forEach(row => {
+						this.$refs.multipleTable.toggleRowSelection(row, selected);
+					});
+				});
+			} else {
+				this.$refs.multipleTable.clearSelection();
+			}
+			setTimeout(() => {
+				//给遮到层,让默认选中的有缓冲时间
+				this.tableLoadingRule = false;
+			}, 300);
+		},
+		onTableSelect(rows, row) {
+			let selected = rows.length && rows.indexOf(row) !== -1;
+			if (selected) {
+				selecteds.push(row.id);
+			} else {
+				for (let i in selecteds) {
+					if (row.id == selecteds[i]) {
+						selecteds.splice(i, 1);
+					}
+				}
+			}
+		},
+		//规则弹窗选中时
+		handleSelectionChange(val) {},
+		//关闭回调
+		closeNone() {
+			selecteds = [];
+		},
+		//规则弹窗确定
+		ruleDialogTableVisibleQD() {
+			let valuesLengths = [];
+			for (let i in selecteds) {
+				valuesLengths.push(selecteds[i]);
+			}
+			// valuesLengths = selecteds
+			this.valuesOrLength = valuesLengths;
+			this.newGroupForm.items = this.valuesOrLength;
+			if (this.valuesOrLength.length >= 1) {
+				this.newGroupFormRules = this.valuesOrLength.length + '条规则';
+				this.ruleHint = '统计已选规则的积分(只选分类不指定规则的积分除外)';
+			} else {
+				this.newGroupFormRules = '';
+				this.ruleHint = '统计所有积分(基础分和工龄分除外)';
+			}
+			this.ruleDialogTableVisible = false;
+		},
+		//关闭
+		handleClose(done) {
+			done();
+		},
+		// 选择时间-季度
+		export_quarter_confirm(val) {
+			this.time.quarter = val;
+			this.params.page = 1;
+			this.open_right(this.clickItem);
+		},
+		// 树型菜单点击筛选
+		handleCheckChange(check, param) {},
+		getRuletableData_rule(data) {
+			let tableData_ruleP = [];
+			for (let i in data) {
+			}
+			return data;
+		},
+		getRuleTreeDatas(data) {
+			let dates = [];
+			for (let i in data) {
+				if (data[i].child == undefined) {
+					dates.push(data[i]);
+				} else {
+					this.getRuleTreeData(data[i].child);
+				}
+			}
+			return dates;
+		},
+
+		treeOpen() {},
+
+		//点击编辑
+		editGroup() {
+			this.groupShow = true;
+			this.popupType = false;
+			this.getGroupsInfo(this.clickItem, true);
+		},
+		// 获取分类信息
+		getGroupsInfo(item, ifs) {
+			let self = this;
+			if (!item) {
+				return false;
+			}
+			if (!ifs) {
+				self.table_loading = true;
+				this.params.page = 1;
+			}
+			this.loading = true;
+			self.$axios('get', '/api/integral/statistics/groups/info', { group_id: item.id })
+				.then(res => {
+					if (res.data.code == 1) {
+						// 规则ID
+						let itemsBjRule_ID = [];
+						for (let i in res.data.data.items) {
+							itemsBjRule_ID.push(res.data.data.items[i].id);
+						}
+						this.valuesOrLength = itemsBjRule_ID;
+						if (this.valuesOrLength.length >= 1) {
+							this.newGroupFormRules = this.valuesOrLength.length + '条规则';
+							this.ruleHint = '统计已选规则的积分(只选分类不指定规则的积分除外)';
+						} else {
+							this.newGroupFormRules = '';
+							this.ruleHint = '统计所有积分(基础分和工龄分除外)';
+						}
+						this.newGroupForm.date_interval = res.data.data.date_interval;
+						this.options_time_value =
+							res.data.data.date_interval == 1 ? '月度' : res.data.data.date_interval == 2 ? '季度' : res.data.data.date_interval == 3 ? '年度' : '';
+						self.groups_info = res.data.data;
+						self.newGroupForm.employees = [];
+						self.employees = '';
+						self.employees_selected.employee = res.data.data.employees;
+						res.data.data.employees.forEach(element => {
+							self.newGroupForm.employees.push(element.id);
+							self.employees += element.name + ',';
+						});
+						self.newGroupForm.group_name = res.data.data.name;
+						this.loading = false;
+						if (!ifs) {
+							this.open_right(item, true);
+						}
+					} else {
+						self.$message.error(res.data.data.msg);
+						this.loading = false;
+					}
+				})
+				.catch(() => {
+					if (!ifs) {
+						self.table_loading = false;
+					}
+				})
+				.finally(() => {
+					this.loading = false;
+				});
+		},
+		//编辑时间选中
+		options_times(val) {
+			this.newGroupForm.date_interval = val;
+		},
+		// 规则分类改变之后请求数据
+		rule_null(val) {
+			let ruleNullId = [];
+			for (let i in val) {
+				for (let a in val[i]) {
+					ruleNullId.push(val[i][a]);
+				}
+			}
+		},
+		// 选人组件提交
+		move_employee_confirm(data) {
+			this.newGroupForm.employees = [];
+			this.employees = '';
+			this.employees_selected = data;
+			if (data.employee !== null && data.employee.length != 0) {
+				data.employee.forEach(element => {
+					this.newGroupForm.employees.push(element.id);
+					this.employees += element.name + ',';
+				});
+			}
+			this.isEmployeeShow = false;
+		},
+		// 删除分组
+		delItem() {
+			let self = this;
+			this.$confirm('确定要删除当前分组吗?, 是否继续?', '删除分组', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				let data = { group_id: self.clickItem.id };
+				self.delLoad = true;
+				self.$axios('post', '/api/integral/statistics/groups/drop', data)
+					.then(res => {
+						if (res.data.code == 1) {
+							self.$message.success(res.data.msg);
+							self.groupShow = false;
+							self.getGroupsList();
+						} else {
+							self.$message.error(res.data.msg);
+						}
+					})
+					.finally(() => {
+						self.delLoad = false;
+					});
+			});
+		},
+		// 提交表单
+		subGroupForm(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					this.saveFun();
+				}
+			});
+		},
+		saveFun() {
+			let self = this;
+			self.saveLoad = true;
+			let data = JSON.parse(JSON.stringify(self.newGroupForm));
+			if (!self.popupType) {
+				data.group_id = self.clickItem.id;
+			}
+			if(data.items.length==0){
+				data.items=this.valuesOrLength
+			}
+			self.$axios('POST', this.popupType ? '/api/integral/statistics/groups/create' : '/api/integral/statistics/groups', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						if (self.popupType) {
+							self.popupType = false;
+							this.getGroupsList();
+						} else {
+							self.getGroupsList(self.clickItem.id); //传入当前ID.为了修改后页面不切换
+						}
+						self.$message.success(res.data.msg);
+						const resData = res.data.data;
+						self.groups_list.push({
+							id: resData.id,
+							employees: resData.employees,
+							name: name
+						}); //左边分组
+						self.groupShow = false;
+						this.employees = '';
+						this.employee_not_select = [];
+						this.employees_selected = { employee: [], dept: [] };
+					} else {
+						self.$message.error(res.data.msg);
+					}
+				})
+				.finally(() => {
+					setTimeout(() => {
+						self.saveLoad = false;
+					}, 500);
+				});
+		},
+		// 重置表单
+		resetForm(formName) {
+			this.$refs[formName].resetFields();
+			this.newGroupForm.employees = [];
+			this.employees = '';
+			this.employee_not_select = [];
+			this.employees_selected = { employee: [], dept: [] };
+			this.groupShow = false;
+		},
+		// 新增分组
+		addGroup() {
+			//规则
+			(this.newGroupFormRules = ''), (this.valuesOrLength = []), (this.options_time_value = '');
+			this.groupShow = true;
+			this.popupType = true;
+			this.employees = '';
+			this.employee_not_select = [];
+			this.employees_selected = { employee: [], dept: [] };
+			this.newGroupForm = {
+				group_name: '',
+				employees: [],
+				rules: [],
+				items: [],
+				date_interval: '1'
+			};
+			this.ruleHint = '统计所有积分(基础分和工龄分除外)';
+		},
+		// 页码变更
+		handleCurrentChange(val) {
+			this.params.page = val;
+			this.open_right(this.clickItem);
+		},
+		handleSizeChange(val) {
+			this.params.page_size = val;
+			this.open_right(this.clickItem);
+		},
+		open_right(item, tim) {
+			if (tim) {
+				this.time = {
+					year: moment().format('YYYY'), //年
+					quarter: moment().format('YYYYQ'), //季度
+					month: moment().format('YYYY-MM') //月
+				};
+				if (this.$refs.Seasons) {
+					if (this.newGroupForm.date_interval == 2) {
+						this.$refs.Seasons.choseQuarter = '';
+					}
+				}
+			}
+			this.valuesOrLength = [];
+			let self = this;
+			self.table_loading = true;
+			self.clickItem = item;
+			if (!item) {
+				self.table_loading = false;
+				return false;
+			}
+			let data = JSON.parse(JSON.stringify(self.params));
+			data.rule ? '' : delete data.rule;
+			// data.date ? "" : delete data.month;
+			data.group_id = item.id;
+			let months;
+			if (this.newGroupForm.date_interval == '1') {
+				months = this.time.month.replace('-', '');
+			}
+			data.date =
+				this.newGroupForm.date_interval == '1'
+					? months
+					: this.newGroupForm.date_interval == '2'
+					? this.time.quarter
+					: this.newGroupForm.date_interval == '3'
+					? this.time.year
+					: '';
+			self.$axios('get', '/api/integral/statistics/groups/rank', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.table_list = res.data.data.list;
+						self.total = res.data.data.total;
+						self.lastUpdateTime = res.data.data.update_time;
+					} else {
+						self.$message.error(res.data.data.msg);
+					}
+				})
+				.finally(() => {
+					self.table_loading = false;
+				});
+		},
+		// 获取分类列表
+		getGroupsList(atPresent, isload) {
+			let self = this;
+			self.item_loading = true;
+			self.$axios('get', '/api/integral/statistics/groups')
+				.then(res => {
+					if (res.data.code == 1) {
+						// self.groups_list = res.data.data.list;//获取所有
+						let lists = res.data.data.list;
+						if (this.$authoritys('employee')) {
+							//员工权限只能查看包含自己的
+							let user = this.$getUserData().id;
+							let data = [];
+							lists.forEach(item => {
+								if (item.employees.length == 0) {
+									data.push(item);
+								} else {
+									if (item.employees.indexOf(user.toString()) != -1) {
+										data.push(item);
+									}
+								}
+							});
+							this.$nextTick(()=>{
+								this.groups_list = data;
+							})
+						} else {
+							this.$nextTick(()=>{
+								this.groups_list = lists;
+							})
+						}
+
+						self.$nextTick(() => {
+							if (atPresent) {
+								for (let i in self.groups_list) {
+									if (atPresent == self.groups_list[i].id) {
+										self.getGroupsInfo(self.groups_list[i]);
+									}
+								}
+							} else {
+								if (!isload) {
+									self.open_right(self.groups_list[0]);
+								}
+								self.getGroupsInfo(self.groups_list[0]);
+							}
+						});
+					} else {
+						self.$message.error(res.data.data.msg);
+					}
+				})
+				.finally(() => {
+					self.item_loading = false;
+				});
+		}
+	},
+	mounted() {
+		this.get_rule_trees();
+		this.getGroupsList(false, true); //避免首次进入调用两次open_right()方法,加上true判断
+	}
+};
+</script>
+<style scoped lang="scss">
+::v-deep .itemClass .el-cascader-menu .el-cascader-menu__wrap li.el-cascader-node {
+	height: auto;
+	max-width: 500px;
+	.el-cascader-node__label {
+		white-space: initial;
+		overflow: initial;
+		text-overflow: initial;
+	}
+}
+.listData {
+	position: relative;
+	display: table-cell;
+	margin: 0 !important;
+	padding: 20px;
+	min-height: 600px;
+	&::after {
+		content: ' ';
+		position: absolute;
+		top: 0;
+		left: 0;
+		bottom: 0;
+		width: 1px;
+		background: #ebeef5;
+	}
+	& .groups_name {
+		display: block;
+		font-size: 20px;
+		color: rgb(48, 49, 51);
+		vertical-align: middle;
+	}
+}
+::v-deep .el-menu-item {
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	&.is-active {
+		background-color: #ecf5ff;
+	}
+}
+
+.architecture {
+	display: flex;
+	text-align: center;
+	// margin-top:20px;
+	padding-left: 0px;
+	background-color: #fff;
+	width: 100%;
+	overflow: hidden;
+	cursor: default;
+	min-height: calc(60vh - 160px);
+}
+.architecture .RuleLine {
+	display: table-cell;
+	width: 1px;
+	min-height: 600px;
+	background: hsl(0, 2%, 76%);
+}
+.architecture .RuleLeft {
+	display: block;
+	text-align: center;
+	padding: 20px 10px;
+	border-right: none;
+	overflow-y: auto;
+	overflow-x: none;
+}
+/*滚动条的宽度*/
+
+.architecture .RuleLeft::-webkit-scrollbar {
+	width: 9px;
+	height: 9px;
+}
+.architecture .RuleRight::-webkit-scrollbar {
+	width: 9px;
+	height: 9px;
+}
+
+/*外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果*/
+
+.architecture .RuleLeft::-webkit-scrollbar-track {
+	width: 6px;
+	background-color: #fff0;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+.architecture .RuleRight::-webkit-scrollbar-track {
+	width: 6px;
+	background-color: #fff0;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+
+/*滚动条的设置*/
+
+.architecture .RuleLeft::-webkit-scrollbar-thumb {
+	background-color: #fff0;
+	background-clip: padding-box;
+	min-height: 28px;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+.architecture .RuleRight::-webkit-scrollbar-thumb {
+	background-color: #fff0;
+	background-clip: padding-box;
+	min-height: 28px;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+/*滚动条移上去的背景*/
+
+.architecture .RuleLeft:hover::-webkit-scrollbar-thumb {
+	overflow-x: none;
+	background-color: rgba(144, 147, 153, 0.3);
+}
+.architecture .RuleRight:hover::-webkit-scrollbar-thumb {
+	background-color: rgba(115, 118, 124, 0.3);
+}
+
+.architecture .RuleLeft .company_name {
+	position: relative;
+	display: block;
+	font-family: 'Microsoft YaHei';
+	text-align: left;
+	padding: 15px 28px 17px;
+	cursor: pointer;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	border-bottom: 1px #f8f8f8 solid;
+}
+.architecture .RuleLeft .company_name img {
+	position: relative;
+	display: inline-block;
+	top: 2px;
+	width: 18px;
+	height: 18px;
+	margin-right: 4px;
+}
+.architecture .RuleLeft ::v-deep .el-button {
+	margin-bottom: 16px !important;
+}
+.architecture .RuleRight {
+	position: relative;
+	display: table-cell;
+	text-align: left;
+	padding: 20px;
+}
+.architecture .RuleRight .title span .sapn {
+	display: inline-block;
+	vertical-align: middle;
+	max-width: 600px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.architecture .RuleRight:after {
+	content: ' ';
+	position: absolute;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	width: 1px;
+	background: #ebeef5;
+}
+.architecture .RuleRight .list_box {
+	width: 100%;
+	background: #fff;
+}
+.architecture .RuleRight .list_box ::v-deep table {
+	font-family: 'Microsoft YaHei';
+	width: 100% !important;
+	/*max-width:1920px; */
+}
+.architecture .department_box {
+}
+.architecture .department_box ::v-deep .el-tree-node {
+	display: block;
+	text-align: center;
+}
+.architecture .department_box ::v-deep .el-tree-node__content {
+	// padding-left:24px !important;
+	height: auto !important;
+}
+
+.architecture .department_box ::v-deep .el-tree-node .el-icon-caret-right {
+	display: inline-block;
+	color: #909399;
+	font-size: 16px;
+	padding: 6px 8px;
+}
+.architecture .department_box ::v-deep .el-tree-node .el-icon-caret-right.is-leaf {
+	color: transparent;
+	cursor: default;
+}
+.architecture .department_box ::v-deep .el-tree-node .custom-tree-node img {
+	margin-top: 0px;
+	width: 20px;
+}
+.architecture .department_box ::v-deep .el-tree-node .custom-tree-node span {
+}
+.architecture .department_box ::v-deep .el-tree-node__content {
+	padding: 12px 0;
+	border-bottom: 1px #f8f8f8 solid;
+}
+.architecture .department_box ::v-deep .el-tree-node__content:hover {
+	background: #ecf5ff;
+	border-radius: 4px;
+}
+.architecture .department_box ::v-deep .is-focusable .is-current {
+	border-radius: 4px;
+}
+.architecture .department_box ::v-deep .is-focusable .is-current .name {
+	color: #409eff;
+	font-weight: normal;
+	transition: 0.35s ease-in-out;
+}
+
+.elMenuCustomRule_Z {
+	overflow-y: auto;
+	border: none;
+	//   height: 980px;
+}
+// 滚动条样式
+.elMenuCustomRule_Z::-webkit-scrollbar {
+	width: 9px;
+	height: 9px;
+}
+.elMenuCustomRule_Z::-webkit-scrollbar-track {
+	width: 6px;
+	background-color: #fff0;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+/*滚动条的设置*/
+.elMenuCustomRule_Z::-webkit-scrollbar-thumb {
+	background-color: #fff0;
+	background-clip: padding-box;
+	min-height: 28px;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+/*滚动条移上去的背景*/
+.elMenuCustomRule_Z:hover::-webkit-scrollbar-thumb {
+	background-color: rgba(144, 147, 153, 0.3);
+}
+
+::v-deep .el-table .cell {
+	//让规则不隐藏
+	overflow: inherit;
+	white-space: normal;
+}
+
+.terr-left button {
+	margin: 0 auto;
+	display: block;
+	margin-bottom: 20px;
+}
+</style>

+ 856 - 0
src/views/ranking/department_statistics.vue

@@ -0,0 +1,856 @@
+<template>
+	<div>
+		<el-row style="min-width:1160px;">
+			<div class="flex-box-ce">
+				<div>
+					<el-cascader
+						v-model="dept_name"
+						:options="dept_tree"
+						@change="dept1_null"
+						:props="{
+							checkStrictly: true,
+							value: 'id',
+							label: 'name',
+							children: '_child'
+						}"
+						ref="dept1"
+						filterable
+						change-on-select
+						placeholder="全公司"
+						clearable
+					></el-cascader>
+				</div>
+				<div style="margin:0 10px;">
+					<el-select v-model="time_type" placeholder="请选择分类" style="width: 100px;">
+						<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
+					</el-select>
+				</div>
+				<div>
+					<el-date-picker
+						v-show="time_type == '2'"
+						v-model="export_from.year"
+						class="date-picker-width"
+						type="year"
+						value-format="yyyy"
+						:clearable="false"
+						:editable="false"
+						placeholder="选择年份排名"
+					></el-date-picker>
+					<el-date-picker
+						v-show="time_type == '1' || time_type == '月份'"
+						v-model="export_from.month"
+						class="date-picker-width"
+						type="month"
+						value-format="yyyy-MM"
+						:clearable="false"
+						:editable="false"
+						placeholder="选择月份排名"
+					></el-date-picker>
+				</div>
+			</div>
+
+			<el-col :span="24" style="min-width:1160px;">
+				<el-col :span="18" style="min-width:780px;">
+					<el-row class="left-all-style" style="margin-top:10px;">
+						<el-row style="position: relative;">
+							<el-col :span="24">
+								<b class="title" style="margin-bottom:15px;display:block">{{ yearhORmontStr }}积分构成</b>
+							</el-col>
+							<div v-loading="IntegralFormChartLoad">
+								<div class="nopoint_box" style="height:306px;" v-show="IntegralFormnone">
+									<div class="noimg" style="width: 150px;height: 160px;margin-top:80px;"></div>
+									<span class="title1">
+										暂无积分数据 ,
+										<span @click="$router.push({ path: '/award_punish' })" style="color:#409EFF;cursor:pointer;">去奖扣积分></span>
+									</span>
+								</div>
+								<div v-show="!IntegralFormnone"><div ref="IntegralFormChart" :style="{ width: '100%', height: '350px' }"></div></div>
+							</div>
+						</el-row>
+					</el-row>
+
+					<el-row class="left-all-style">
+						<el-row style="position: relative;">
+							<el-col :span="24" style="display:flex">
+								<b class="title" style="margin:0 20px 15px 0;display:block">部门{{ yearhORmontStr }}积分情况</b>
+								<el-checkbox v-model="exclusiveMonthChecked">不包含自动积分加分项</el-checkbox>
+							</el-col>
+							<div v-loading="monthlyIntegralloading">
+								<!-- <el-col :span="5" style="position: absolute;top:40px;left:10px;z-index: 1;">
+						<el-cascader
+						v-model="dept_name2"
+						:options="dept_tree"
+						@change="monthlyIntegralchange"
+						ref="dept2"
+						filterable
+						change-on-select
+						placeholder="请选择部门"
+						clearable
+						></el-cascader>
+					</el-col> -->
+
+								<div class="nopoint_box" style="height:430px;" v-if="monthlyIntegralnone">
+									<div class="noimg" style="width: 150px;height: 150px;margin-top:110px;"></div>
+									<span class="title1">暂无积分数据</span>
+								</div>
+
+								<div v-show="!monthlyIntegralnone">
+									<div ref="monthlyIntegralChart" :style="{ width: '100%', height: '400px' }"></div>
+									<div style="width:90%;display:flex;justify-content: space-around;margin-top:30px;padding-left:40px">
+										<p v-for="(item, index) in monthORyear == '2' ? monthlyIntegralList : yearlyIntegralList" :key="index" style="text-align:center">
+											<b style="display:block;color:#303133;font-size:18px;" v-if="index < 3">
+												{{ index == 0 ? item.total_point : index == 1 ? item.reward_point : index == 2 ? item.deduction_point : '' }}
+											</b>
+											<b style="display:block;color:#303133;font-size:18px;" v-else-if="index == 3">{{ item.ratio == -1 ? '—' : item.ratio + ':1' }}</b>
+											<b style="display:block;color:#303133;font-size:18px;" v-else>
+												{{ item.toRatio.ratio + '%' }}
+												<svg-icon
+													:icon-class="item.toRatio.type == 1 ? 'litrearrows' : item.toRatio.type == 2 ? 'droparrows' : ''"
+													style="font-size:10px;margin-bottom:2px"
+												/>
+											</b>
+											<span style="color:#303133;font-size:14px;margin-top:5px;display:block;">{{ item.name }}</span>
+										</p>
+									</div>
+								</div>
+							</div>
+						</el-row>
+					</el-row>
+				</el-col>
+
+				<el-col :span="6" style="min-width:280px;">
+					<!-- <el-col :span="24">
+			<el-row class="pointsevent_box">
+			<div
+				class="grid-content bg-purple"
+				v-loading="highestPrizeBuckleloading"
+				style="background:#fff;padding: 20px 20px 0;"
+			>
+				<span class="title">{{ yearhORmontStr }}奖分最高</span>
+
+				<div class="nopoint_box" v-if="!prize.id">
+				<div
+					class="noimg"
+					style="margin: 0px auto 0;width:80px;height:80px;"
+				></div>
+				<span class="title1" style="padding-bottom:20px;"
+					>暂无积分数据</span
+				>
+				</div>
+
+				<div v-else style="display:flex;padding:8px 0 20px 0;height:126px;">
+				<userImage
+					width="45px"
+					height="45px"
+					:id="prize.id"
+					:user_name="prize.name"
+					style="margin-right:8px"
+				></userImage>
+				<div class="rightexamineAndApproveList" style="border:0px">
+					<p
+					style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#73767c;font-size:16px;display:flex;"
+					>
+					<b style="color:#303133;font-size:16px;">{{ prize.name }}</b
+					><span style="color:#26A2FF;font-size:16px;"
+						><span v-if="prize.point > 0" style="padding-left:30px;"
+						>+</span
+						>{{ prize.point }} B分</span
+					>
+					</p>
+					<p
+					style="font-size:13px;line-height:20px;color:rgb(48, 49, 51);overflow:hidden; text-overflow:ellipsis;display:-webkit-box; -webkit-box-orient:vertical;-webkit-line-clamp:2; "
+					>
+					{{ prize.remark ? prize.remark.customize : "" }}
+					</p>
+				</div>
+				</div>
+			</div>
+			</el-row>
+		</el-col> -->
+
+					<!-- <el-col :span="24">
+			<el-row class="pointsevent_box">
+			<div
+				class="grid-content bg-purple"
+				v-loading="highestPrizeBuckleloading"
+				style="background:#fff;padding: 20px 20px 0;"
+			>
+				<span class="title">{{ yearhORmontStr }}扣分最多</span>
+
+				<div class="nopoint_box" v-if="!buckle.id">
+				<div
+					class="noimg"
+					style="margin: 0px auto 0;width:80px;height:80px;"
+				></div>
+				<span class="title1" style="padding-bottom:20px;"
+					>暂无积分数据</span
+				>
+				</div>
+
+				<div v-else style="display:flex;padding:8px 0 20px 0;height:126px;">
+				<userImage
+					width="45px"
+					height="45px"
+					:id="buckle.id"
+					:user_name="buckle.name"
+					style="margin-right:8px"
+				></userImage>
+				<div class="rightexamineAndApproveList" style="border:0px">
+					<p
+					style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#73767c;font-size:16px;display:flex;"
+					>
+					<b style="color:#303133;font-size:16px;">{{ buckle.name }}</b
+					><span style="color:#FF9600;font-size:16px;padding-left:30px;"
+						>{{ buckle.point }} B分</span
+					>
+					</p>
+					<p
+					style="font-size:13px;line-height:20px;color:rgb(48, 49, 51);overflow:hidden; text-overflow:ellipsis;display:-webkit-box; -webkit-box-orient:vertical;-webkit-line-clamp:2;"
+					>
+					{{ buckle.remark ? buckle.remark.customize : "" }}
+					</p>
+				</div>
+				</div>
+			</div>
+			</el-row>
+		</el-col> -->
+
+					<el-row>
+						<div class="right-all-style" v-loading="highestPrizeBuckleloading" style="background:#fff;padding: 20px 20px 0;margin-top:10px;">
+							<span class="title">{{ yearhORmontStr }}奖分最高</span>
+
+							<div class="nopoint_box" v-if="!prize.id">
+								<div class="noimg"></div>
+								<span class="title1" style="padding-bottom:20px;">暂无积分数据</span>
+							</div>
+
+							<div v-else style="display:flex;padding:20px 0 20px 0;">
+								<userImage width="45px" height="45px" :user_name="prize.name" fontSize=".9" style="margin-right:8px"></userImage>
+								<div class="rightexamineAndApproveList" style="border:0px">
+									<p
+										style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#73767c;font-size:16px;display:flex;justify-content: space-between;"
+									>
+										<b style="color:#303133;font-size:16px;margin:0px 0 0 5px;">{{ prize.name }}</b>
+										<span style="color:#26A2FF;font-size:16px;">
+											<span v-if="prize.point > 0">+</span>
+											{{ prize.point }} B分
+										</span>
+									</p>
+									<p
+										style="margin:8px 0 0 5px;font-size:13px;line-height:20px;color:#303133;overflow:hidden; text-overflow:ellipsis;display:-webkit-box; -webkit-box-orient:vertical;-webkit-line-clamp:3;"
+									>
+										{{ prize.remark ? prize.remark.customize : '' }}
+									</p>
+								</div>
+							</div>
+						</div>
+					</el-row>
+
+					<el-row>
+						<div class="right-all-style" v-loading="highestPrizeBuckleloading" style="background:#fff;padding: 20px 20px 0;">
+							<span class="title">{{ yearhORmontStr }}扣分最多</span>
+
+							<div class="nopoint_box" v-if="!buckle.id">
+								<div class="noimg"></div>
+								<span class="title1" style="padding-bottom:10px;">暂无积分数据</span>
+							</div>
+
+							<div v-else style="display:flex;padding:20px 0 20px 0;">
+								<userImage width="45px" height="45px" :user_name="buckle.name" fontSize=".9" style="margin-right:8px"></userImage>
+								<div class="rightexamineAndApproveList">
+									<p
+										style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#73767c;font-size:16px;display:flex;justify-content: space-between;"
+									>
+										<b style="color:#303133;font-size:16px;margin:0px 0 0 5px;">{{ buckle.name }}</b>
+										<span style="color:#FF9600;font-size:16px;">{{ buckle.point }} B分</span>
+									</p>
+									<p
+										style="margin:8px 0 0 5px;font-size:13px;line-height:20px;color:#303133;overflow:hidden; text-overflow:ellipsis;display:-webkit-box; -webkit-box-orient:vertical;-webkit-line-clamp:3;"
+									>
+										{{ buckle.remark ? buckle.remark.customize : '' }}
+									</p>
+								</div>
+							</div>
+						</div>
+					</el-row>
+				</el-col>
+			</el-col>
+		</el-row>
+	</div>
+</template>
+<script>
+export default {
+	data() {
+		return {
+			//筛选项
+			formData: {
+				dept_id: 0
+			},
+			//时间
+			time_type: '月份',
+			time_types: [{ label: '月份', value: '1' }, { label: '年份', value: '2' }],
+			export_from: {
+				year: this.$moment().format('YYYY'),
+				month: this.$moment().format('YYYY-MM')
+			},
+			yearhORmontStr: '月',
+			monthORyear: '2',
+			//部门
+			dept_name: [],
+			dept_tree: [],
+
+			//饼图
+			IntegralFormChartLoad: false, //积分构成loading
+			IntegralFormnone: false, //积分构成为空或报错,展示的开关
+
+			//奖扣分最高积分事件
+			highestPrizeBuckleloading: false, //奖扣最高loading
+			prize: {}, //奖分最高
+			buckle: {}, //扣分最高
+
+			//本月积分情况
+			exclusiveMonthChecked: true, //不包含自动积分加分项
+			monthlyIntegralList: [
+				//年积分情况数据
+				{ total_point: '0', name: '月总积分' },
+				{ reward_point: '0', name: '月总奖分' },
+				{ deduction_point: '0', name: '月总扣分' },
+				{ ratio: '0', name: '奖扣分比例' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比上月总分' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比上月奖分' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比上月扣分' }
+			],
+			yearlyIntegralList: [
+				//年积分情况数据
+				{ total_point: '0', name: '年总积分' },
+				{ reward_point: '0', name: '年总奖分' },
+				{ deduction_point: '0', name: '年总扣分' },
+				{ ratio: '0', name: '奖扣分比例' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比去年总分' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比去年奖分' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比去年扣分' }
+			],
+			monthlyIntegralloading: false, //本月积分情况loading
+			monthlyIntegralnone: false, //本月积分情况为空或报错,展示的开关
+			exclusiveMonthBranch: 0 //本月积分情况--部门
+		};
+	},
+	watch: {
+		time_type(val) {
+			if (val == '1') {
+				//月
+				this.monthORyear = '2';
+				this.formData.year = null;
+				this.formData.month = this.$moment().format('YYYY-MM');
+				this.export_from.month = this.$moment().format('YYYY-MM');
+				this.yearhORmontStr = '月';
+			} else if (val == '2') {
+				//年
+				this.monthORyear = '3';
+				this.formData.month = null;
+				this.formData.year = this.$moment().format('YYYY');
+				this.export_from.year = this.$moment().format('YYYY');
+				this.yearhORmontStr = '年';
+			}
+			this.executiveFunction();
+		},
+		'export_from.month'(val, old_val) {
+			this.formData.month = val;
+			this.executiveFunction();
+		},
+		'export_from.year'(val, old_val) {
+			this.formData.year = val;
+			this.executiveFunction();
+		},
+		'formData.dept_id'(val, old_val) {
+			if (!val) {
+				this.formData.dept_id = 0;
+			}
+			this.executiveFunction();
+		},
+		//不包含自动积分加分项
+		exclusiveMonthChecked() {
+			this.monthlyIntegral();
+		}
+	},
+	mounted() {
+		this.formData.month = this.$moment().format('YYYY-MM');
+		this.executiveFunction();
+		window.addEventListener('resize', this.selfAdaption);
+	},
+	methods: {
+		//需要执行的所有函数
+		executiveFunction() {
+			this.integralForm(); //饼图
+			this.highestPrizeBuckle(); //奖扣分最高积分事件
+			this.monthlyIntegral(); //本月积分情况
+			this.getDepartment(); //部门
+		},
+
+		//echarts自适应
+		selfAdaption() {
+			var myChart1 = this.$echarts.init(this.$refs.monthlyIntegralChart);
+			var myChart2 = this.$echarts.init(this.$refs.IntegralFormChart);
+			// myChart.setOption(option);
+			myChart1.resize();
+			myChart2.resize();
+		},
+		//饼图
+		//分为两列展示,多传legendDataTwo
+		// drawLine(legendDataOne, legendDataTwo, dadalist) {
+		drawLine(legendDataOne, dadalist) {
+			const chart = this.$refs.IntegralFormChart;
+			//此处可给固定颜色,不给就所有颜色随机
+			let colors = ['rgb(38, 162, 255)', '#f36f2a', '#fecb09', '#00b6bd', '#e85d53', '#fecb09', '#725197', '#fcb814', '#41a08d', '#425a95', '#ea8b84', '#9d1d62', '#fcb814'];
+			// let colors = [];
+			// let legendDataLeng = legendDataOne.length + legendDataTwo.length;
+			let legendDataLeng = legendDataOne.length;
+			if (legendDataLeng > colors.length) {
+				//当列表大于固定颜色时,给随机颜色
+				let colorsLeng = colors.length;
+				for (let i = 0; i <= legendDataLeng - colorsLeng; i++) {
+					// colors.push('#' + Math.random().toString(16).substr(2, 6).toUpperCase());//也是随机色
+					colors.push('rgb(' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ')');
+				}
+			}
+			//只显示 N 条标题,多余隐藏,但是饼图不会隐藏
+			let DataLengths = [];
+			// for (let i in legendDataTwo) {
+			//   if (i < 8) {
+			//     DataLengths.push(legendDataTwo[i]);
+			//   }
+			// }
+			let left1 = '45%';
+			let left2 = '45%';
+			let leftBT = '25%';
+			// if (legendDataTwo.length != 0) {
+			//   left1 = "36%";
+			//   leftBT = "18%";
+			// }
+			if (chart) {
+				const myChart = this.$echarts.init(chart);
+				var legendData1 = legendDataOne;
+				// var legendData2 = DataLengths;
+				const option = {
+					tooltip: { trigger: 'item', formatter: '{b}' },
+					legend: [
+						{
+							type: 'scroll',
+							orient: 'vertical',
+							icon: 'square',
+							left: left1,
+							align: 'left',
+							top: '10%',
+							itemGap: 20,
+							textStyle: { fontSize: 14, color: 'rgb(48, 49, 51)' },
+							data: legendData1
+						}
+						//分为两列展示
+						// {
+						//   type: "scroll",
+						//   orient: "vertical",
+						//   icon: "square",
+						//   left: "70%",
+						//   align: "left",
+						//   top: "10%",
+						//   itemGap: 20,
+						//   textStyle: { fontSize: 14, color: "rgb(48, 49, 51)" },
+						//   data: legendData2,
+						// },
+					],
+					color: colors,
+					grid: { x: 25, y: 45, x2: 5, y2: 20, borderWidth: 1 },
+					toolbox: {
+						show: true,
+						feature: {
+							mark: { show: true },
+							magicType: { show: true, type: ['pie', 'funnel'] }
+						}
+					},
+					series: [
+						{
+							name: '',
+							type: 'pie',
+							radius: [20, 110],
+							center: [leftBT, '40%'],
+							roseType: 'radius',
+							label: { show: false },
+							emphasis: { label: { show: false } },
+							data: dadalist
+						}
+					]
+				};
+				myChart.setOption(option);
+			}
+		},
+		integralForm() {
+			this.IntegralFormChartLoad = true;
+			let listslength = [];
+			let params = {};
+			params.dept_id = this.formData.dept_id;
+			if (this.monthORyear == '2') {
+				//月
+				params.month = this.formData.month;
+			} else if (this.monthORyear == '3') {
+				//年
+				params.year = this.formData.year;
+			}
+			this.$axios('get', '/api/integral/statistics/pie/b', params, 'v2')
+				.then(res => {
+					let lists = res.data.data.list;
+					listslength = lists;
+					let legendData1 = [];
+					let legendData2 = [];
+					let dadalist = [];
+					//分为两列展示
+					// let listLeng = Math.ceil((lists.length)/2)
+
+					for (let i in lists) {
+						if (lists[i].name.length > 15) {
+							lists[i].name = lists[i].name.slice(0, 15) + '...';
+						}
+						//分为两列展示
+						// if(i<listLeng){
+						//   legendData1.push(lists[i].name+' '+'奖'+lists[i].reward+' '+'扣'+lists[i].deduction+' '+lists[i].ratio+'%')
+						// }else{
+						//   legendData2.push(lists[i].name+' '+'奖'+lists[i].reward+' '+'扣'+lists[i].deduction+' '+lists[i].ratio+'%')
+						// }
+						if (i < 8) {
+							legendData1.push(lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%');
+						} else {
+							legendData2.push(lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%');
+						}
+
+						let dataListDx = {};
+						if (lists[i].ratio < 0) {
+							dataListDx.value = 0;
+						} else {
+							dataListDx.value = lists[i].ratio;
+						}
+						dataListDx.name = lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%';
+						// dataListDx.name = lists[i].name
+						dadalist.push(dataListDx);
+					}
+					//分为两列展示,多传legendData2
+					// this.drawLine(legendData1, legendData2, dadalist); //图表
+					this.drawLine(legendData1, dadalist); //图表
+				})
+				.finally(() => {
+					if (listslength.length == 0) {
+						this.IntegralFormnone = true;
+					} else {
+						this.IntegralFormnone = false;
+					}
+					this.IntegralFormChartLoad = false;
+				});
+		},
+
+		//奖扣分最高积分事件
+		highestPrizeBuckle() {
+			this.highestPrizeBuckleloading = true;
+			let params = {
+				page: '1',
+				page_size: '1'
+			};
+			params.dept_ids = this.formData.dept_id;
+			(params.time_type = this.monthORyear), (params.pt_id = '3');
+			if (this.monthORyear == '2') {
+				//月
+				params.month = this.formData.month;
+			} else if (this.monthORyear == '3') {
+				params.year = this.formData.year;
+			}
+			this.$axios('get', '/api/integral/statistics/prize/buckle/ranking', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						if (res.data.data.prize.length != 0) {
+							this.prize = res.data.data.prize[0];
+						} else {
+							this.prize = [];
+						}
+						if (res.data.data.buckle.length != 0) {
+							this.buckle = res.data.data.buckle[0];
+						} else {
+							this.buckle = [];
+						}
+					}
+				})
+				.finally(() => {
+					this.highestPrizeBuckleloading = false;
+				});
+		},
+
+		//月度积分
+		monthlyIntegralRanking(date, total, reward, deduction) {
+			const chart = this.$refs.monthlyIntegralChart;
+			if (chart) {
+				const myChart = this.$echarts.init(chart);
+				const option = {
+					tooltip: {
+						trigger: 'axis'
+					},
+					color: ['#F56C6C', '#26A2FF', '#FFC100'],
+					legend: {
+						right: '0%',
+						data: ['总积分', '奖分', '扣分']
+					},
+					grid: {
+						left: '3%',
+						right: '4%',
+						bottom: '3%',
+						containLabel: true
+					},
+					toolbox: {
+						feature: {}
+					},
+					xAxis: {
+						type: 'category',
+						boundaryGap: false,
+						data: date
+					},
+					yAxis: {
+						type: 'value',
+						axisLine: {
+							show: false
+						},
+						axisTick: {
+							show: false
+						}
+					},
+					series: [
+						{
+							name: '总积分',
+							type: 'line',
+							data: total
+						},
+						{
+							name: '奖分',
+							type: 'line',
+							data: reward
+						},
+						{
+							name: '扣分',
+							type: 'line',
+							data: deduction
+						}
+					]
+				};
+				myChart.setOption(option);
+			}
+		},
+		monthlyIntegral() {
+			this.monthlyIntegralloading = true;
+			let params = {};
+			let listslength = [];
+			params.dept_id = this.formData.dept_id;
+			if (this.monthORyear == '2') {
+				//月
+				params.month = this.formData.month;
+			} else if (this.monthORyear == '3') {
+				//年
+				params.year = this.formData.year;
+			}
+			if (this.exclusiveMonthChecked) {
+				params.include_fixed = 1;
+			} else {
+				params.include_fixed = 0;
+			}
+			this.$axios('get', '/api/integral/statistics/curve', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						let lists = res.data.data;
+						listslength = lists;
+						if (this.monthORyear == '2') {
+							this.monthlyIntegralList[0].total_point = lists.total_point;
+							this.monthlyIntegralList[1].reward_point = lists.reward_point;
+							this.monthlyIntegralList[2].deduction_point = lists.deduction_point;
+							this.monthlyIntegralList[3].ratio = lists.ratio;
+							this.monthlyIntegralList[4].toRatio = lists.contrast_total;
+							this.monthlyIntegralList[5].toRatio = lists.contrast_reward;
+							this.monthlyIntegralList[6].toRatio = lists.contrast_deduction;
+						} else if (this.monthORyear == '3') {
+							this.yearlyIntegralList[0].total_point = lists.total_point;
+							this.yearlyIntegralList[1].reward_point = lists.reward_point;
+							this.yearlyIntegralList[2].deduction_point = lists.deduction_point;
+							this.yearlyIntegralList[3].ratio = lists.ratio;
+							this.yearlyIntegralList[4].toRatio = lists.contrast_total;
+							this.yearlyIntegralList[5].toRatio = lists.contrast_reward;
+							this.yearlyIntegralList[6].toRatio = lists.contrast_deduction;
+						}
+						let dates = []; //日期
+						let totals = []; //总积分
+						let rewards = []; //奖分
+						let deductions = []; //扣分
+						for (let i in lists.total) {
+							dates.push(lists.total[i].date);
+							totals.push(lists.total[i].point);
+						}
+						for (let i in lists.reward) {
+							rewards.push(lists.reward[i].point);
+						}
+						for (let i in lists.deduction) {
+							deductions.push(lists.deduction[i].point);
+						}
+						this.monthlyIntegralRanking(dates, totals, rewards, deductions);
+					}
+				})
+				.finally(() => {
+					if (listslength.total.length == 0) {
+						this.monthlyIntegralnone = true;
+					} else {
+						this.monthlyIntegralnone = false;
+					}
+					this.monthlyIntegralloading = false;
+				});
+		},
+
+		//筛选部门数据
+		dept1_null(val) {
+			if (val.length == 0) {
+				this.formData.dept_id = 0;
+			} else {
+				this.formData.dept_id = this.dept_name[this.dept_name.length - 1];
+			}
+			this.$nextTick(() => {
+				this.$refs.dept1.dropDownVisible = false;
+			});
+		},
+		// 		// 递归判断列表,把最后的children设为undefined
+		// 		getTreeData(data){
+		// 			for(var i=0;i<data.length;i++){
+		// 				if(data[i].children.length<1){
+		// 					// children若为空数组,则将children设为undefined
+		// 					data[i].children=undefined;
+		// 				}else {
+		// 					// children若不为空数组,则继续 递归调用 本方法
+		// 					this.getTreeData(data[i].children);
+		// 				}
+		// 			}
+		// 			return data;
+		// 		},
+
+		//获取部门
+		getDepartment() {
+			this.$axios('get', '/api/department/tree').then(res => {
+				this.dept_tree = this.getTreeData(res.data.data.list);
+			});
+		},
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i]._child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i]._child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i]._child);
+				}
+			}
+			return data;
+		}
+	},
+	beforeDestroy() {
+		//离开路由
+		window.removeEventListener('resize', this.selfAdaption); //取消echarts自适应
+	}
+};
+</script>
+<style scoped="scoped" lang="scss">
+.refresh {
+	margin-top: 100px;
+	width: 100px;
+}
+.noData {
+	text-align: center;
+	position: fixed;
+	left: 0;
+	top: 0;
+	right: 0;
+	bottom: 0;
+}
+.data-all {
+	margin-bottom: 10%;
+	color: #595959;
+}
+.left-all-style {
+	margin-top: 10px;
+	padding: 20px;
+	background: #fff;
+	border-radius: 5px;
+	.title {
+		padding-left: 10px;
+		font-size: 16px;
+		font-weight: normal;
+		border-left: 2px solid #409eff;
+	}
+	.titledes {
+		display: block;
+		padding-top: 10px;
+		font-size: 14px;
+		color: #909399;
+	}
+	.noremind {
+		display: block;
+		text-align: right;
+		font-size: 12px;
+		color: #909399;
+		cursor: pointer;
+	}
+	.noremind:hover {
+		color: #409eff;
+	}
+	.noremind:active {
+		color: #409eff;
+	}
+}
+
+.right-all-style {
+	background: #fff;
+	border-radius: 5px;
+	margin: 0 0 10px 10px;
+	.title {
+		padding-left: 10px;
+		font-size: 16px;
+		font-weight: normal;
+		border-left: 2px solid #409eff;
+	}
+}
+.rightexamineAndApproveList {
+	text-align: left;
+	width: 100%;
+	/* border-bottom: 1px solid #efefef; */
+}
+
+.nopoint_box {
+	display: inline-block;
+	text-align: center;
+	width: 100%;
+	margin-bottom: 10px;
+	.noimg {
+		display: inline-block;
+		width: 110px;
+		height: 110px;
+		margin: 22px auto 16px;
+		background: url('../../assets/image/nodata_default.png') no-repeat center;
+		background-size: 99%;
+	}
+	.noperson {
+		display: inline-block;
+		width: 110px;
+		height: 110px;
+		margin: 22px auto 16px;
+		background: url('../../assets/image/noperson_default.png') no-repeat center;
+		background-size: 99%;
+	}
+	.title1 {
+		display: block;
+		text-align: center;
+		font-size: 12px !important;
+		color: #909399 !important;
+		padding: 0;
+	}
+	a {
+		color: #26a2ff;
+	}
+}
+</style>

+ 158 - 0
src/views/ranking/deptRankSwiper.vue

@@ -0,0 +1,158 @@
+<template>
+  <div>
+    <div class="swiperBg" v-loading="loading || deptNameLoad">
+      <el-row type="flex" justify="center">
+        <el-col :xs="22" :sm="22" :md="24" :lg="12" :xl="10">
+          <div class="title" v-if="type == 1">最新的积分事件<p>最后更新时间:{{lastTime}}</p></div>
+          <div class="title" v-if="type == 2">{{deptName}}{{month}}积分排名<p>最后更新时间:{{lastTime}}</p></div>
+          <marquee style="height: calc(100vh - 106px);" scrollamount="2" scrolldelay="1" align="middle" behavior="scroll" direction="up">
+            <div v-show="type == 2">
+              <el-row  v-for="(item,index) in list" :key="index" class="row">
+                <el-col class="list_name" :span="4">{{item.rank}}</el-col>
+                <el-col :span="10">{{item.employee_name}}</el-col>
+                <el-col class="point" :span="10">{{item.point}}分</el-col>
+              </el-row>
+            </div>
+            <div v-show="type == 1">
+              <el-row  v-for="(item,index) in list" :key="index" class="row">
+                <el-col :span="4">
+                  <center>
+                    <userImage  :user_name="item.employee_name" :img_url="item.employee_img_url" fontSize="1.8" width="80px" height="80px"></userImage>
+                  </center>
+                </el-col>
+                <el-col :span="20">
+                  <p class="integralPersonnel">
+                    <el-row>
+                      <el-col :span="8">{{item.employee_name}}</el-col>
+                      <el-col :span="16">
+                        <span style="margin-left: 30px;" :class="item.point>0 ? 'red':'green'">{{item.point>0?'+'+item.point:item.point}}分</span>
+                      </el-col>
+                    </el-row>
+                  </p>
+                  <p class="integralDetails">{{item.remark}}</p>
+                </el-col>
+              </el-row>
+            </div>
+          </marquee>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+</template>
+
+<script>
+  import moment from 'moment'
+  // type  1为积分事件 2为部门排行
+  export default {
+    name: "deptRankSwiper",
+    data() {
+      return {
+        loading: false,
+        deptNameLoad: false,
+        list: [],
+        formData:{},
+        type: 0,
+        month: null,
+        deptName: null,
+        lastTime: null
+      }
+    },
+    methods: {
+      getData(){
+        let self = this
+        self.loading = true
+        let data = this.formData
+        delete data.type
+		var url=self.type == 1? '/api/integral/statistics/integral' : '/api/integral/statistics/ranking';
+        var str=self.type == 1? 'plain':'v2'
+		self.$axios('get',url,data,str).then((res) => {
+          if (res.data.code == 1) {
+            self.lastTime = this.$moment().format('YYYY-MM-DD HH:mm:ss')
+            self.list = res.data.data.list
+          }else{
+            self.$message.error(res.data.data.msg)
+          }
+        }).finally(()=>{
+          self.loading = false
+        })
+      },
+      getDeptName(id){
+        let self = this
+        if (id !== '0') {
+          self.deptNameLoad = true
+          self.$axios("get",'/api/department/info',{id: id}).then((res) => {
+            if (res.data.code == 1) {
+              self.deptName = res.data.data.name
+            }else{
+              self.$message.error(res.data.data.msg)
+            }
+          }).finally(()=>{
+            self.deptNameLoad = false
+          })
+        }else{
+          self.deptName = '全公司'
+        }
+      }
+    },
+    mounted() {
+      this.formData = this.$route.query
+      this.type = this.$route.query.type
+      this.$route.query.month?this.month = moment(this.$route.query.month).format('YYYY年MM月'):''
+	  this.$route.query.dept_name? this.deptName=this.$route.query.dept_name:''
+      this.getData()
+      setInterval(() => {
+        this.getData()
+      }, parseInt(Math.random()*(1800000-1200000+1)+1200000,10));
+    },
+    created() {},
+  }
+</script>
+
+<style scoped lang="scss">
+  .swiperBg{
+    background-color: black;
+    color: #fff;
+    position: fixed;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	top:0;
+    font-size: 3rem;
+    .title{
+      font-size: 40px;
+      text-align: center;
+      margin: 20px 0;
+      p{
+        font-size: 16px;
+      }
+    }
+    .row{
+      margin-bottom: .6em;
+      .el-col-10{
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+      }
+      .list_name{
+        text-align: center;
+      }
+      .point{
+        text-align: center;
+      }
+      .integralDetails{
+        font-size: .6em; 
+        margin: 0; 
+        display: -webkit-box;
+        text-overflow: ellipsis;
+        overflow : hidden;
+        -webkit-line-clamp: 2;
+        -webkit-box-orient: vertical;
+      }
+      .integralPersonnel{
+        font-size: .8em; 
+        margin: 0; 
+        margin-bottom: 15px;
+      }
+    }
+  }
+</style>

+ 818 - 0
src/views/ranking/dept_rank.vue

@@ -0,0 +1,818 @@
+<template>
+	<div>
+		<div class="diy_tip_bg" v-show="tips_show">
+			<el-alert class="diy-tip" @close="tips_close" type="success" description><p>排名不包含初始分和工龄分</p></el-alert>
+		</div>
+		<div class="all padding-20">
+			<el-form :inline="true">
+				<el-form-item label="时间">
+					<el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
+						<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item>
+					<el-date-picker
+						size="medium"
+						v-show="time_type == '2'"
+						v-model="export_from.year"
+						class="date-picker-width"
+						type="year"
+						value-format="yyyy"
+						placeholder="选择年份排名"
+					></el-date-picker>
+					<el-date-picker
+						size="medium"
+						v-show="time_type == '1' || time_type == '月份'"
+						v-model="export_from.month"
+						class="date-picker-width"
+						type="month"
+						value-format="yyyy-MM"
+						placeholder="选择月份排名"
+					></el-date-picker>
+					<season v-if="time_type == '3'" :isActive="true" class="date-picker-width" @confirm="export_quarter_confirm"></season>
+					
+					<el-date-picker
+						size="medium"
+						v-show="time_type == '4'"
+						class="date-picker-width"
+						v-model="export_from.time_range"
+						type="daterange"
+						value-format="timestamp"
+						range-separator="至"
+						start-placeholder="开始日期"
+						end-placeholder="结束日期"
+						:picker-options="instantPickerOptions"
+					></el-date-picker>
+				</el-form-item>
+				<el-form-item label="部门">
+					<el-cascader
+						size="medium"
+						class="date-picker-width"
+						v-model="dept_name"
+						:options="dept_tree"
+						:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+						ref="dept"
+						clearable
+						filterable
+						placeholder="全公司"
+					></el-cascader>
+					<!-- 这是选部门多选。如果更改需求用这个: -->
+					<!-- <el-cascader
+						v-model="dept_name"
+						:options="dept_tree"
+						:props="{ multiple: true, checkStrictly: true }"
+						class="date-picker-width"
+						ref="dept"
+						clearable
+						collapse-tags
+						placeholder="全公司"
+					  ></el-cascader>-->
+				</el-form-item>
+				<el-form-item label="谁不参与排名">
+					<el-select v-model="formData.exclusion" size="medium" clearable multiple filterable collapse-tags placeholder="请选择员工">
+						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="规则分类">
+					<el-cascader
+					   size="medium"
+						class="date-picker-width"
+						v-model="rule_id"
+						:options="rule_trees"
+						:props="props2"
+						ref="rule_id"
+						clearable
+						placeholder="请选择规则分类"
+					></el-cascader>
+				</el-form-item>
+				<el-form-item label="积分分类">
+					<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" placeholder="请选择积分分类">
+						<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="人员">
+					<el-select size="medium" v-model="formData.position" style="width:150px" placeholder="请选择">
+						<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.age"></el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item>
+					<el-checkbox v-model="sort" size="medium" label="排名由低到高" border></el-checkbox>
+					<el-button type="primary" size="medium" @click="selectBtn" style="margin-left:20px">查询</el-button>
+				</el-form-item>
+				<el-form-item>
+					<el-button type="primary" size="medium" plain @click="dialogVisible = true">导出排名</el-button>
+					<!-- <el-button type="primary"  size="medium" plain @click="byRanking('byRankingData')">轮播排名</el-button> -->
+				</el-form-item>
+			</el-form>
+			<el-table :data="list" style="width: 100%" v-loading="loading">
+				<el-table-column label="名次" width="80" align="center">
+					<template slot-scope="scope">
+						<img v-if="scope.row.rank === 1" src="@/assets/image/statistics_NO1.png" alt="" />
+						<img v-if="scope.row.rank === 2" src="@/assets/image/statistics_NO2.png" alt="" />
+						<img v-if="scope.row.rank === 3" src="@/assets/image/statistics_NO3.png" alt="" />
+						<span v-if="scope.row.rank > 3">{{ scope.row.rank }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="姓名" align="left">
+					<template slot-scope="scope">
+						<div class="flex-box">
+							<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url" width="50px" height="50px"></userImage>
+							<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.employee_name }}</span>
+						</div>
+					</template>
+				</el-table-column>
+				<el-table-column :label="labelName" align="left" prop="point"></el-table-column>
+				<template slot="empty">
+					<div class="nopoint_box">
+						<div class="noimg noperson"></div>
+						<span class="title">没有对应的数据</span>
+					</div>
+				</template>
+			</el-table>
+			<center style="padding: 20px 0;">
+				<el-pagination
+					background
+					@size-change="handleSizeChange"
+					@current-change="handleCurrentChange"
+					:current-page="formData.page"
+					:page-sizes="[10, 20, 50, 100]"
+					layout="total, sizes, prev, pager, next"
+					:page-size="formData.page_size"
+					:total="total"
+				></el-pagination>
+			</center>
+		</div>
+		<!-- 导出弹窗 -->
+		<el-dialog title="导出排名" :visible.sync="dialogVisible" width="730px" top="10%">
+			<span style="font-size:15px">系统将按以下已选条件导出对应的排名报表</span>
+			<el-form :inline="true">
+				<div class="picker_er">
+					<el-form-item label="时间">
+						<el-date-picker
+							v-model="Dc_Data.value1"
+							type="daterange"
+							size="medium"
+							value-format="timestamp"
+							range-separator="至"
+							start-placeholder="开始日期"
+							end-placeholder="结束日期"
+							:picker-options="instantPickerOptions"
+						></el-date-picker>
+					</el-form-item>
+
+					<el-form-item label="人员" style="margin-left:30px">
+						<el-select size="medium" v-model="Dc_Data.DC_position" style="width:150px" placeholder="请选择">
+							<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.age"></el-option>
+						</el-select>
+					</el-form-item>
+				</div>
+				<el-form-item label="部门">
+					<el-cascader
+						class="date-picker-width cascader_bm"
+						v-model="Dc_Data.dept_name"
+						:options="dept_tree"
+						:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+						ref="dept2"
+						size="medium"
+						clearable
+						filterable
+						placeholder="全公司"
+					></el-cascader>
+				</el-form-item>
+				<el-form-item label="积分分类">
+					<el-select  style="width: 80px;" size="medium" v-model="Dc_Data.pt_id" placeholder="请选择积分分类">
+						<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="规则分类" style="margin-left:20px">
+					<el-cascader
+						class="date-picker-width"
+						@change="ruleInquiredialog"
+						v-model="rule_ids"
+						:options="rule_trees"
+						:props="props"
+						size="medium"
+						ref="derive"
+						clearable
+						collapse-tags
+						placeholder="请选择规则分类"
+					></el-cascader>
+				</el-form-item>
+			</el-form>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="dialogVisible = false" size="medium">取 消</el-button>
+				<el-button type="primary" @click="exportExcel" size="medium">导 出</el-button>
+			</span>
+		</el-dialog>
+
+		<!-- 轮播弹窗 -->
+		<el-dialog title="轮播排名" :visible.sync="byRankingShow" width="500px" top="10%">
+			<div>
+				<el-form :inline="true" ref="byRankingData" :model="byRankingData" :rules="byRankingDataRules" label-width="90px">
+					<el-form-item label="月份" prop="month">
+						<el-date-picker
+							v-model="byRankingData.month"
+							size="medium"
+							class="date-picker-width"
+							type="month"
+							value-format="yyyy-MM"
+							placeholder="选择月份排名"
+						></el-date-picker>
+					</el-form-item>
+					<el-form-item label="选择部门" prop="dept_id">
+						<el-cascader
+							size="medium"
+							class="date-picker-width"
+							v-model="byRankingData.dept_id"
+							:options="dept_tree"
+							:props="{ checkStrictly: true, value: 'obj', label: 'name', children: '_child' }"
+							ref="dept1"
+							clearable
+							filterable
+							placeholder="全公司"
+						></el-cascader>
+					</el-form-item>
+					<el-form-item label="人员范围" prop="position">
+						<el-radio-group size="medium" v-model="byRankingData.position">
+							<el-radio label="all">管理者和员工</el-radio>
+							<el-radio label="manager">只看管理者</el-radio>
+							<el-radio label="employee">只看员工</el-radio>
+						</el-radio-group>
+					</el-form-item>
+				</el-form>
+			</div>
+			<span slot="footer">
+				<el-button @click="byRankingShow = false" size="medium">取 消</el-button>
+				<el-button type="primary" @click="swiperPage('byRankingData')" size="medium">开始轮播</el-button>
+			</span>
+		</el-dialog>
+	</div>
+</template>
+<script>
+import moment from 'moment';
+import season from '@/components/season';
+export default {
+	data() {
+		return {
+			rule_ids: null,
+			Dc_Data: {
+				//导出数据
+				value1: '', //时间
+				DC_position: '全部', //人员
+				dept_name: [], //部门
+				rule_id: [] ,//规则
+				pt_id: 3,
+			},
+			dialogVisible: false,
+			dept_name: [],
+			dept_tree: [],
+			loading: false,
+			formData: {
+				dept_id: '0',
+				sort: 'DESC',
+				pt_id: 3,
+				time_type: 1,
+				exclusion: [],
+				page: 1,
+				rule_id: '',
+				page_size: 10,
+				position: 0 //部门多选删除这个
+			},
+			total: null,
+			rule_trees: null,
+			rule_id: null,
+			list: null,
+			point_types: [],
+			point_type: [],
+			sort: false,
+			time_types: [{ label: '月份', value: '1' }, { label: '季度', value: '3' }, { label: '年份', value: '2' }, { label: '自定义', value: '4' }],
+			props: { value: 'id', label: 'name', children: 'child', multiple: true },
+			props2: { value: 'id', label: 'name', children: 'child', checkStrictly: true},
+			time_type: '月份',
+			export_from: {
+				year: '',
+				month: moment().format('YYYY-MM'),
+				quarter: '',
+				// time_range: [new Date(new Date().toLocaleDateString()).getTime(), new Date(new Date().toLocaleDateString()).getTime()]
+				time_range: []
+			},
+			employee_map: this.$getCache('SET_EMPLOYEE_MAP'),
+			positions: [{ id: 0, age: 'all', name: '全部' }, { id: 1, age: 'manager', name: '管理者' }, { id: 2, age: 'employee', name: '员工' }],
+			tips_show: false,
+			byRankingShow: false,
+			byRankingData: {
+				month: '',
+				dept_id: '',
+				position: 'all'
+			},
+			byRankingDeptId: '',
+			byRankingDataRules: {
+				month: [{ required: true, message: '请选择月份', trigger: 'blur' }],
+				dept_id: [{ required: true, message: '请选择部门', trigger: 'change' }],
+				position: [{ required: true, message: '请选择人员范围', trigger: 'change' }]
+			},
+			labelName: 'B分',
+			instantPickerOptions: {
+				shortcuts: [
+					{
+						text: '今天',
+						onClick(picker) {
+						const now = new Date(new Date().toLocaleDateString());
+						const start = now.getTime();
+						picker.$emit('pick', [start, start]);
+						}
+					},
+					{
+						text: '昨天',
+						onClick(picker) {
+						const now = new Date(new Date().toLocaleDateString());
+						const start = now.getTime() - 60 * 60 * 24 * 1000;
+						picker.$emit('pick', [start, start]);
+						}
+					},
+					{
+						text: '本周',
+						onClick(picker) {
+						const now = new Date(new Date().toLocaleDateString());
+						const start = now.getTime() - (now.getDay() - 1) * 24 * 60 * 60 * 1000;
+						const end = start + 7 * 24 * 60 * 60 * 1000 - 1000;
+						picker.$emit('pick', [start, end]);
+						}
+					},
+					{
+						text: '上周',
+						onClick(picker) {
+						const now = new Date(new Date().toLocaleDateString());
+						const start = now.getTime() - (now.getDay() + 6) * 24 * 60 * 60 * 1000;
+						const end = start + 7 * 24 * 60 * 60 * 1000 - 1000;
+						picker.$emit('pick', [start, end]);
+						}
+					},
+					{
+						text: '本月',
+						onClick(picker) {
+						const now = new Date();
+						const startDate = new Date(now.getFullYear(), now.getMonth(), 1);
+						const endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0);
+						picker.$emit('pick', [startDate.getTime(), endDate.getTime()]);
+						}
+					},
+					{
+						text: '上月',
+						onClick(picker) {
+						const now = new Date();
+						const startDate = new Date(now.getFullYear() - (now.getMonth() > 0 ? 0 : 1), (now.getMonth() + 11) % 12, 1);
+						const endDate = new Date(now.getFullYear(), now.getMonth(), 0);
+						picker.$emit('pick', [startDate.getTime(), endDate.getTime()]);
+						}
+					}
+				],
+                onPick: (obj) => {
+					if(!this.dialogVisible){
+                   	  	this.pickerMinDate = new Date(obj.minDate).getTime();
+					}
+                },
+				disabledDate : time => {
+                    if (this.pickerMinDate && !this.dialogVisible) {
+                        const day1 =  30 * 24 * 3600 * 1000//限制只能选一个月的范围区间
+                        let maxTime = this.pickerMinDate + day1
+                        let minTime = this.pickerMinDate - day1
+                        return time.getTime() > maxTime || time.getTime()<minTime
+                    }
+				}
+			},
+			pickerDisabledDate: {
+			},
+		};
+	},
+	watch: {
+		sort(val) {
+			if (val) {
+				this.formData.sort = 'ASC';
+			} else {
+				this.formData.sort = 'DESC';
+			}
+		},
+		dept_name(val) {
+			if (val.length !== 0) {
+				// 这是选部门多选。如果更改需求用这个:
+				// let dept_id = [];
+				// for (var i in val) {
+				//   dept_id.push(val[i][0]);
+				// }
+				// this.formData.dept_id = dept_id;//传入选中的部门ID,是数组
+				this.formData.dept_id = val[val.length - 1];
+			} else {
+				this.formData.dept_id = 0;
+			}
+			this.$nextTick(() => {
+				this.$refs.dept.dropDownVisible = false;
+				this.getEmployeeList();
+			});
+		},
+		'byRankingData.dept_id'(val) {
+			this.$refs.dept1.dropDownVisible = false;
+		},
+		'Dc_Data.dept_name': function(val) {
+			this.$refs.dept2.dropDownVisible = false;
+		},
+		rule_id(val) {
+			if(val.length==0){
+				this.formData.rule_id='';
+				return false
+			}
+			if(val.length==1){
+				this.formData.rule_id=(val).toString()
+			}else{
+				this.formData.rule_id=(val[val.length-1]).toString()
+			}
+			this.$refs.rule_id.dropDownVisible = false;
+		}
+	},
+	components: { season },
+	methods: {
+		ruleInquiredialog() {
+			this.ruleUtif('derive');
+		},
+		ruleUtif(rule) {
+			let ruleList = this.$refs[rule].getCheckedNodes();
+			let ruleId = [];
+			ruleList.forEach(item => {
+				ruleId.push(item.value);
+			});
+			if (rule == 'ruleinquire') {
+				this.formData.rule_id = ruleId;
+			} else {
+				this.Dc_Data.rule_id = ruleId;
+			}
+			this.$nextTick(() => {
+				if (this.$refs[rule].presentTags[1]) {
+					this.$refs[rule].presentTags[1].text = '+ ' + (ruleId.length - 1).toString();
+				} else {
+					if (ruleId.length > 1) {
+						let list = {
+							closable: false,
+							key: -1,
+							text: '+ ' + (ruleId.length - 1).toString()
+						};
+						this.$refs[rule].presentTags[1] = list;
+					}
+				}
+			});
+		},
+		// 轮播页面跳转
+		swiperPage(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					var { href } = this.$router.resolve({
+						path: '/deptRankSwiper',
+						query: {
+							month: this.byRankingData.month || 0,
+							type: '2',
+							position: this.byRankingData.position,
+							dept_id: this.byRankingData.dept_id[0].id,
+							dept_name: this.byRankingData.dept_id[0].name,
+							pt_id: 3
+						}
+					});
+					window.open(href);
+				}
+			});
+		},
+		// 轮播排名弹窗
+		byRanking() {
+			(this.byRankingData = {
+				month: '',
+				dept_id: '',
+				position: 'all'
+			}),
+				(this.byRankingShow = true);
+		},
+		// 提示信息
+		tips_close() {
+			this.$setCache('dept_rank_tips', 'true');
+			this.tips_show = false;
+		},
+		// 查询
+		selectBtn() {
+			switch (this.time_type) {
+				case '1':
+					this.$set(this.formData, 'month', this.export_from.month);
+					this.formData.month ? '' : delete this.formData.month;
+					break;
+				case '2':
+					this.$set(this.formData, 'year', this.export_from.year);
+					this.formData.year ? '' : delete this.formData.year;
+					break;
+				case '月份':
+					this.$set(this.formData, 'month', this.export_from.month);
+					this.formData.month ? '' : delete this.formData.month;
+					break;
+				case '3':
+					this.$set(this.formData, 'quarter', this.export_from.quarter);
+					this.formData.quarter ? '' : delete this.formData.quarter;
+					break;
+				case '4':
+					this.$set(this.formData, 'time_range', this.export_from.time_range);
+					this.formData.time_range ? '' : delete this.formData.time_range;
+					break;
+				default:
+					break;
+			}
+
+			// let data = JSON.parse(JSON.stringify(this.formData));
+			let data = JSON.parse(JSON.stringify(this.formData));
+			var employee_ids = data.exclusion.join(',');
+			data.exclusion = employee_ids;
+			data.page = 1;
+			data.page_size = 10;
+			this.formData.page = 1;
+			this.formData.page_size = 10;
+			this.$nextTick(() => {
+				this.get_list(data);
+			});
+		},
+		// 页面变更
+		handleCurrentChange(val) {
+			this.formData.page = val;
+			this.get_list(this.formData);
+		},
+		handleSizeChange(val) {
+			this.formData.page = 1;
+			this.formData.page_size = val;
+			this.get_list(this.formData);
+		},
+		// 选择时间
+		export_quarter_confirm(val) {
+			this.export_from.quarter = val;
+		},
+		//请求数据
+		get_list(data, bool) {
+			if (this.time_type == 1) {
+				delete data.year;
+				delete data.quarter;
+				delete data.time_range;
+			} else if (this.time_type == 2) {
+				delete data.month;
+				delete data.quarter;
+				delete data.time_range;
+			} else if (this.time_type == '月份') {
+				delete data.year;
+				delete data.quarter;
+				delete data.time_range;
+			} else if (this.time_type == 3) {
+				delete data.month;
+				delete data.year;
+				delete data.time_range;
+			} else if (this.time_type == 4) {
+				delete data.month;
+				delete data.year;
+				delete data.quarter;
+				if(data.time_range && data.time_range.length > 0){
+					data.start_date = moment(data.time_range[0]).format('YYYY-MM-DD')
+					data.end_date = moment(data.time_range[1]).format('YYYY-MM-DD')
+				}
+				delete data.time_range
+			}
+			if (bool) {
+				data.month = moment().format('YYYY-MM');
+			}
+			let self = this;
+			self.loading = true;
+			data ? '' : (data = this.formData);
+
+			data.position = data.position == 'manager' ? 'manager' : data.position == 'employee' ? 'employee' : 'all';
+			self.$axios('get', '/api/integral/statistics/ranking', data, 'v2')
+				.then(res => {
+					this.labelName = this.formData.pt_id == 2 ? 'A分' : 'B分';
+					if (res.data.code == 1) {
+						self.list = res.data.data.list;
+						self.total = res.data.data.total;
+					} else {
+						self.$message.error(res.data.data.msg);
+					}
+				})
+				.finally(() => {
+					self.loading = false;
+				});
+		},
+		// 获取积分规则
+		get_rule_tree() {
+			this.$axios('get', '/api/integral/rule/trees', { cycle_type: '1' }).then(res => {
+				this.rule_trees = this.getRuleTreeData(res.data.data.rule_tree);
+			});
+		},
+		// 规则递归 children
+		getRuleTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i].child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i].child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getRuleTreeData(data[i].child);
+				}
+			}
+			return data;
+		},
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				data[i].obj = { id: data[i].id, name: data[i].name };
+				if (data[i]._child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i]._child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i]._child);
+				}
+			}
+			return data;
+		},
+		getEmployeeList() {
+			let self = this;
+			self.$axios('get', '/api/employee/list', { dept_id: self.formData.dept_id }).then(res => {
+				if (res.data.code == 1) {
+					this.employee_map = res.data.data.list;
+				} else {
+					self.$message.error(res.data.data.msg);
+				}
+			});
+		},
+
+		exportExcel() {
+			//人员
+			this.Dc_Data.DC_position =
+				this.Dc_Data.DC_position == 'manager' ? 'manager' : this.Dc_Data.DC_position == 'employee' ? 'employee' : this.Dc_Data.DC_position == '全部' ? 'all' : 'all';
+			//部门
+			let dept_name;
+			for (let i in this.Dc_Data.dept_name) {
+				dept_name = this.Dc_Data.dept_name[i];
+			}
+			this.Dc_Data.dept_name = dept_name;
+			//规则
+			// let rule_id = [];
+			// for (let i in this.Dc_Data.rule_id) {
+			// 	for (let a in this.Dc_Data.rule_id[i]) {
+			// 		rule_id.push(this.Dc_Data.rule_id[i][a]);
+			// 	}
+			// }
+			// this.Dc_Data.rule_id = rule_id;
+			let data = '';
+			if (this.Dc_Data.value1) {
+				data += '&start_date=' + moment(this.Dc_Data.value1[0]).format('YYYY-MM-DD');
+				data += '&end_date=' + moment(this.Dc_Data.value1[1]).format('YYYY-MM-DD');
+			}
+			data += '&position=' + this.Dc_Data.DC_position;
+			this.Dc_Data.dept_name > 0 ? (data += '&dept_id=' + this.Dc_Data.dept_name) : (data += '&dept_id=0');
+			if (this.Dc_Data.rule_id.length > 0) {
+				data += '&rule_id=' + this.Dc_Data.rule_id;
+			}
+			window.open(process.env.VUE_APP_BASE_API + 'api/download/ranking/v2?pt_id=' + this.Dc_Data.pt_id + '&employee_id=' + this.$getUserData().id + data, '_blank');
+			this.dialogVisible = false;
+		},
+		//获取部门
+		getDepartment() {
+			this.$axios('get', '/api/department/tree').then(res => {
+				this.dept_tree = this.getTreeData(res.data.data.list);
+			});
+		}
+	},
+	mounted() {
+		this.point_types = this.$getTyps();
+		this.tips_show = this.$getCache('dept_rank_tips') ? false : true;
+		this.getDepartment();
+		this.getEmployeeList();
+		this.get_list(this.formData, true);
+		this.get_rule_tree();
+	}
+};
+</script>
+<style scoped lang="scss">
+.search_box {
+	::v-deep button:active {
+		background: #26a2ff;
+	}
+	::v-deep button:active .el-icon-search {
+		color: #fff;
+	}
+}
+.date-picker-width {
+	width: 100% !important;
+}
+.nopoint_box {
+	display: inline-block;
+	text-align: center;
+	width: 100%;
+	margin-bottom: 10px;
+}
+.noimg {
+	display: inline-block;
+	width: 110px;
+	height: 110px;
+	margin: 22px auto 16px;
+	/* background:url("/static/images/nodata_default.png") no-repeat center; */
+	background-size: 99%;
+}
+.noperson {
+	display: inline-block;
+	width: 110px;
+	height: 110px;
+	line-height: none;
+	margin: 22px auto 16px;
+	background: url('/static/images/noperson_default.png') no-repeat center;
+	background-size: 99%;
+}
+.title {
+	display: block;
+	text-align: center;
+	font-size: 12px !important;
+	line-height: 30px;
+	color: #909399 !important;
+	padding: 0;
+}
+.nopoint_box a {
+	color: #26a2ff;
+}
+.chart_content {
+	.chart-legend__wrap {
+		text-align: right;
+		padding: 20px;
+		padding-right: 50px;
+		& .chart-legend__pink {
+			position: relative;
+			padding-left: 12px;
+			padding-right: 5px;
+			&:after {
+				content: '';
+				position: absolute;
+				margin-top: -2px;
+				top: 35%;
+				left: 0;
+				width: 8px;
+				height: 8px;
+				background: #f56c6c;
+				border-radius: 100%;
+			}
+		}
+
+		& .chart-legend__green {
+			position: relative;
+			padding-left: 12px;
+			&:after {
+				content: '';
+				position: absolute;
+				margin-top: -2px;
+				top: 35%;
+				left: 0;
+				width: 8px;
+				height: 8px;
+				background: #53b87f;
+				border-radius: 100%;
+			}
+		}
+	}
+}
+.drawer_title {
+	font-size: 18px;
+	padding: 20px;
+}
+.manager_statistics_box {
+	background-color: #ffffff;
+	padding: 20px;
+	min-height: calc(100vh - 160px);
+	::v-deep .el-row .el-checkbox .el-checkbox__label {
+		line-height: 20px;
+	}
+}
+.diy_tip_bg {
+	background: #f5f6f9;
+	overflow: hidden;
+	.diy-tip {
+		margin-bottom: 15px;
+		border: 1px solid #67c23a;
+		padding: 20px 16px;
+		p {
+			color: #67c23a !important;
+			font-size: 14px;
+			margin: 0 !important;
+			padding: 4px 0;
+		}
+	}
+}
+::v-deep .el-dialog {
+	top: 21%;
+}
+.picker_er {
+	margin-top: 20px;
+}
+.el-range-editor--medium.el-input__inner {
+	width: 280px;
+}
+::v-deep .el-cascader .el-input .el-input__inner {
+	width: 150px;
+}
+.el-checkbox.is-bordered.el-checkbox--medium {
+	padding: 9px 20px 7px 10px;
+}
+</style>

+ 46 - 0
src/views/ranking/each_rank.vue

@@ -0,0 +1,46 @@
+<template>
+  <div style="background-color: #fff;padding: 20px;" class="boxMinHeight">
+    <el-tabs v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="考勤分" name="1">
+        <attendance_rating></attendance_rating>
+      </el-tab-pane>
+      <el-tab-pane label="日志分" name="2">
+        <log_rank :isEntrance="true"></log_rank>
+      </el-tab-pane>
+      <el-tab-pane label="任务分" name="3">
+        <task_rank></task_rank>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import attendance_rating from '@/views/ranking/attendance_rating';
+import log_rank from '@/views/ranking/log_rank';
+import task_rank from '@/views/ranking/task_rank';
+export default {
+  name: 'each_rank',
+  components: {
+    attendance_rating,log_rank,task_rank
+  },
+  data() {
+    return {
+      activeName:'1'
+    };
+  },
+  methods:{
+    handleClick(){
+
+    }
+  },
+  created() {
+    if(this.$route.query.index){
+      this.activeName=this.$route.query.index
+    }
+  }
+};
+</script>
+
+<style>
+
+</style>

+ 1032 - 0
src/views/ranking/individual_statistics.vue

@@ -0,0 +1,1032 @@
+<template>
+	<div>
+		<el-row style="min-width:1160px;">
+			<div class="flex-box-ce">
+				<div>
+					<el-select v-model="select_employee_id" @change="selectEmployeeChange" filterable placeholder="请输入或选择人员">
+						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+					</el-select>
+				</div>
+				<div style="margin:0px 10px;">
+					<el-select v-model="time_type" placeholder="请选择分类" style="width: 100px;">
+						<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
+					</el-select>
+				</div>
+				<div>
+					<el-date-picker
+						v-show="time_type == '2'"
+						v-model="export_from.year"
+						class="date-picker-width"
+						type="year"
+						value-format="yyyy"
+						:clearable="false"
+						:editable="false"
+						placeholder="选择年份排名"
+					></el-date-picker>
+					<el-date-picker
+						v-show="time_type == '1' || time_type == '月份'"
+						v-model="export_from.month"
+						class="date-picker-width"
+						type="month"
+						value-format="yyyy-MM"
+						:clearable="false"
+						:editable="false"
+						placeholder="选择月份排名"
+					></el-date-picker>
+				</div>
+			</div>
+
+			<el-col :span="24" style="min-width:1160px;margin-top:10px;">
+				<el-col :span="18" style="min-width:780px;">
+					<el-row :span="24" class="top_user_info" style="margin:0 0 0 0;padding:0;">
+						<el-col :span="7" class="userinfo_box">
+							<el-row :gutter="40" style="margin:0;padding:0;">
+								<el-col :span="24" class="user_info" style="display:flex;" v-loading="personnelMessage">
+									<div class="headimg fl" style=" margin: 0 10px 0 20%;">
+										<userImage :img_url="personnel.img_url" :user_name="personnel.name" fontSize="1" width="50px" height="50px"></userImage>
+									</div>
+									<div style="width:100%;">
+										<div
+											style="max-width: 80%;display: inline-block;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;vertical-align: top;margin-left:10%;"
+										>
+											<b style="font-size:16px;">{{ personnel.name }}</b>
+										</div>
+										<div
+											style="max-width: 80%;display:flex;flex-wrap:wrap;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 1;margin-left:10%;"
+										>
+											<el-popover trigger="hover" placement="top" popper-class="popperSPBOX">
+												<div style="font-size:14px;color:#828282;">{{ dept_list }}</div>
+												<div slot="reference" class="name-wrapper">
+													<span style="font-size:14px;color:#828282;">{{ dept_list }}</span>
+												</div>
+											</el-popover>
+										</div>
+									</div>
+								</el-col>
+							</el-row>
+						</el-col>
+						<el-col :span="17" style="margin-top:34px;padding:0 0 10px 0;height:58px;" v-loading="authorityManagerHeaderLoad">
+							<el-col :gutter="50" style="margin:0;padding:0;" class="quick_button_box">
+								<div style="display:flex;justify-content: space-around;">
+									<p style="text-align:center;cursor:pointer;margin: 0;">
+										<b style="color:#26A2FF;font-size:27px;">{{ headDayBs.b ? headDayBs.b : '0' }}</b>
+										<br />
+										<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">今日B分</span>
+									</p>
+									<p style="text-align:center;cursor:pointer;margin: 0;">
+										<b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.b ? authorityManagerHeaders.b : '0' }}</b>
+										<br />
+										<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">{{ yearhORmontStr }}度B分</span>
+									</p>
+									<p style="text-align:center;cursor:pointer;margin: 0;">
+										<b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.a ? authorityManagerHeaders.a : '0' }}</b>
+										<br />
+										<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">{{ yearhORmontStr }}度A分</span>
+									</p>
+									<p style="text-align:center;cursor:pointer;margin: 0;">
+										<b style="color:#26A2FF;font-size:27px;">
+											{{
+												authorityManagerHeaders.performance
+													? authorityManagerHeaders.performance.complete_count + '/' + authorityManagerHeaders.performance.total_count
+													: '0/0'
+											}}
+										</b>
+										<br />
+										<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">任务进度</span>
+									</p>
+								</div>
+							</el-col>
+						</el-col>
+					</el-row>
+
+					<el-col :span="24">
+						<el-row class="left-all-style">
+							<el-row style="position: relative;">
+								<el-col :span="24">
+									<b class="title" style="margin-bottom:15px;display:block">{{ yearhORmontStr }}积分构成</b>
+								</el-col>
+								<div v-loading="IntegralFormChartLoad">
+									<div class="nopoint_box" style="height:307px;" v-show="IntegralFormnone">
+										<div class="noimg" style="width: 150px;height: 150px;margin-top:80px;"></div>
+										<span class="title1">暂无积分数据</span>
+									</div>
+									<div v-show="!IntegralFormnone"><div ref="IntegralFormChart" :style="{ width: '100%', height: '350px' }"></div></div>
+								</div>
+							</el-row>
+						</el-row>
+					</el-col>
+
+					<el-col :span="24" style="">
+						<el-row class="left-all-style">
+							<el-row style="position: relative;">
+								<el-col :span="24" style="display:flex">
+									<b class="title" style="margin:0 20px 15px 0;display:block">{{ yearhORmontStr }}积分情况</b>
+									<el-checkbox v-model="exclusiveMonthChecked">不包含自动积分加分项</el-checkbox>
+								</el-col>
+								<div v-loading="monthlyIntegralloading">
+									<div class="nopoint_box" style="height:450px;" v-if="monthlyIntegralnone">
+										<div class="noimg" style="width: 150px;height: 150px;margin-top:110px;"></div>
+										<span class="title1">暂无积分数据</span>
+									</div>
+
+									<div v-show="!monthlyIntegralnone">
+										<div ref="monthlyIntegralChart" :style="{ width: '100%', height: '400px' }"></div>
+										<div style="width:90%;display:flex;justify-content: space-around;margin-top:30px;padding-left:40px">
+											<p v-for="(item, index) in monthORyear == '2' ? monthlyIntegralList : yearlyIntegralList" :key="index" style="text-align:center">
+												<b style="display:block;color:#303133;font-size:18px;" v-if="index < 3">
+													{{ index == 0 ? item.total_point : index == 1 ? item.reward_point : index == 2 ? item.deduction_point : '' }}
+												</b>
+												<b style="display:block;color:#303133;font-size:18px;" v-else-if="index == 3">{{ item.ratio == -1 ? '—' : item.ratio + ':1' }}</b>
+												<b style="display:block;color:#303133;font-size:18px;" v-else>
+													{{ item.toRatio.ratio + '%' }}
+													<svg-icon
+														:icon-class="item.toRatio.type == 1 ? 'litrearrows' : item.toRatio.type == 2 ? 'droparrows' : ''"
+														style="font-size:10px;margin-bottom:2px"
+													/>
+												</b>
+												<span style="color:rgb(48, 49, 51);font-size:14px;margin-top:5px;display:block;">{{ item.name }}</span>
+											</p>
+										</div>
+									</div>
+								</div>
+							</el-row>
+						</el-row>
+					</el-col>
+				</el-col>
+
+				<el-col :span="6" style="min-width:280px;">
+					<el-col>
+						<el-row class="right-all-style" v-loading="awardDeductRanking">
+							<el-row style="">
+								<el-col :span="24" style="display:flex">
+									<b class="title" style="margin:0 20px 15px 0;display:block">{{ yearhORmontStr }}奖分最多</b>
+								</el-col>
+								<el-col :span="24" style="margin-bottom:10px;">
+									<el-col style="">
+										<div class="nopoint_box" v-if="IntegralEventO.length == 0">
+											<div class="noimg" style="margin: 48px auto 16px;"></div>
+											<span class="title1" style="padding-bottom:20px;">暂无积分数据</span>
+										</div>
+
+										<el-table :data="IntegralEventO" fit :show-header="false" style="border:0px solid #fff;" v-else>
+											<el-table-column prop="remark_data" label="规则">
+												<template slot-scope="scope">
+													<div
+														style="padding-left:10px;display:flex;flex-wrap:wrap;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 1;"
+													>
+														<el-popover trigger="hover" placement="top" popper-class="popperSPBOX">
+															<div style="font-size:14px;color:#828282;">{{ scope.row.remark.customize || scope.row.remark.rule }}</div>
+															<div slot="reference" class="name-wrapper">
+																<span style="font-size:14px;color:#828282;">{{ scope.row.remark.customize || scope.row.remark.rule }}</span>
+															</div>
+														</el-popover>
+													</div>
+													<!-- <span>{{scope.row.remark.customize || scope.row.remark.rule}}</span> -->
+												</template>
+											</el-table-column>
+											<!-- <el-table-column align="center" prop="create_time" label="创建时间" width="140"></el-table-column> -->
+											<el-table-column align="center" prop="point" label="积分" width="110">
+												<template slot-scope="scope">
+													<span>
+														{{ scope.row.point > 0 ? '+' : '' }}{{ scope.row.point }}
+														<span class="blue">{{ getType(scope.row.pt_id) }}</span>
+													</span>
+												</template>
+											</el-table-column>
+										</el-table>
+									</el-col>
+								</el-col>
+							</el-row>
+						</el-row>
+					</el-col>
+
+					<el-col>
+						<el-row class="right-all-style" v-loading="awardDeductRanking">
+							<el-row style="">
+								<el-col :span="24" style="display:flex">
+									<b class="title" style="margin:0 20px 15px 0;display:block">{{ yearhORmontStr }}扣分最多</b>
+								</el-col>
+								<el-col :span="24" style="margin-bottom:10px;">
+									<el-col style="">
+										<div class="nopoint_box" v-if="IntegralEventT.length == 0">
+											<div class="noimg" style="margin: 48px auto 16px;"></div>
+											<span class="title1" style="padding-bottom:20px;">暂无积分数据</span>
+										</div>
+										<el-table :data="IntegralEventT" fit :show-header="false" v-else>
+											<el-table-column prop="remark_data" label="规则">
+												<template slot-scope="scope">
+													<div
+														style="padding-left:10px;display:flex;flex-wrap:wrap;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 1;"
+													>
+														<el-popover trigger="hover" placement="top" popper-class="popperSPBOX">
+															<div style="font-size:14px;color:#828282;">{{ scope.row.remark.customize || scope.row.remark.rule }}</div>
+															<div slot="reference" class="name-wrapper">
+																<span style="font-size:14px;color:#828282;">{{ scope.row.remark.customize || scope.row.remark.rule }}</span>
+															</div>
+														</el-popover>
+													</div>
+													<!-- <span>{{scope.row.remark.customize || scope.row.remark.rule}}</span> -->
+												</template>
+											</el-table-column>
+											<!-- <el-table-column align="center" prop="create_time" label="创建时间" width="140"></el-table-column> -->
+											<el-table-column align="center" prop="point_mark" label="积分" width="110">
+												<template slot-scope="scope">
+													<span>
+														{{ scope.row.point > 0 ? '+' : '' }}{{ scope.row.point }}
+														<span class="blue">{{ getType(scope.row.pt_id) }}</span>
+													</span>
+												</template>
+											</el-table-column>
+											<!-- <el-table-column align="center" prop="remark_data.rule" show-overflow-tooltip label="规则" width="180"></el-table-column> -->
+
+											<!-- <el-table-column align="center" label="规则" prop="remark_data.rule"  width="180">
+									<template slot-scope="scope">
+									<el-popover trigger="hover" placement="top" popper-class="popperSPBOX">
+										<span>{{scope.row.remark_data.rule || scope.row.remark_data.customize}}</span>
+										<div slot="reference" class="name-wrapper"  style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;"><span>{{scope.row.remark_data.rule || scope.row.remark_data.customize}}</span></div>
+									</el-popover>
+									</template>
+								</el-table-column> -->
+										</el-table>
+									</el-col>
+								</el-col>
+							</el-row>
+						</el-row>
+					</el-col>
+				</el-col>
+			</el-col>
+		</el-row>
+	</div>
+</template>
+<script>
+export default {
+	data() {
+		return {
+			//筛选项
+			formData: {
+				employee_id: this.$getUserData().id
+			},
+			//时间
+			time_type: '月份',
+			time_types: [{ label: '月份', value: '1' }, { label: '年份', value: '2' }],
+			export_from: {
+				year: this.$moment().format('YYYY'),
+				month: this.$moment().format('YYYY-MM')
+			},
+			yearhORmontStr: '月',
+			monthORyear: '2',
+
+			//选择人员
+			select_employee_id: '',
+			employee_map: '', //获取人员列表
+
+			dept_list: '',
+			//人员详情
+			personnel: {},
+			authorityManagerHeaderLoad: false, //人员loading
+			authorityManagerHeaders: {}, //人员数据
+			headDayBs: {}, //人员数据 -天
+			personnelMessage: false, //人员信息loading
+
+			//饼图
+			IntegralFormChartLoad: false, //积分构成loading
+			IntegralFormnone: false, //积分构成为空或报错,展示的开关
+
+			//本月积分情况
+			exclusiveMonthChecked: true, //不包含自动积分加分项
+			monthlyIntegralList: [
+				//本月积分情况数据
+				{ total_point: '0', name: '月总积分' },
+				{ reward_point: '0', name: '月总奖分' },
+				{ deduction_point: '0', name: '月总扣分' },
+				{ ratio: '0', name: '奖扣分比例' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比上月总分' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比上月奖分' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比上月扣分' }
+			],
+			yearlyIntegralList: [
+				//年积分情况数据
+				{ total_point: '0', name: '年总积分' },
+				{ reward_point: '0', name: '年总奖分' },
+				{ deduction_point: '0', name: '年总扣分' },
+				{ ratio: '0', name: '奖扣分比例' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比去年总分' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比去年奖分' },
+				{ toRatio: { ratio: '0', type: 0 }, name: '对比去年扣分' }
+			],
+			monthlyIntegralloading: false, //本月积分情况loading
+			monthlyIntegralnone: false, //本月积分情况为空或报错,展示的开关
+			exclusiveMonthBranch: 0, //本月积分情况--部门
+
+			IntegralEventO: [], //个人奖分数据
+			IntegralEventT: [], //个人扣分数据
+
+			awardDeductRanking: false //个人奖扣分loading
+		};
+	},
+	watch: {
+		time_type(val) {
+			if (val == '1') {
+				//月
+				this.monthORyear = '2';
+				this.formData.year = null;
+				this.formData.month = this.$moment().format('YYYY-MM');
+				this.export_from.month = this.$moment().format('YYYY-MM');
+				this.yearhORmontStr = '月';
+			} else if (val == '2') {
+				//年
+				this.monthORyear = '3';
+				this.formData.month = null;
+				this.formData.year = this.$moment().format('YYYY');
+				this.export_from.year = this.$moment().format('YYYY');
+				this.yearhORmontStr = '年';
+			}
+			this.executiveFunction();
+		},
+		'export_from.month'(val, old_val) {
+			this.formData.month = val;
+			this.executiveFunction();
+		},
+		'export_from.year'(val, old_val) {
+			this.formData.year = val;
+			this.executiveFunction();
+		},
+		// "formData.month"(val, old_val) {
+		//   this.executiveFunction();
+		//   console.log(this.formData);
+		// },
+		//不包含自动积分加分项
+		exclusiveMonthChecked() {
+			this.monthlyIntegral();
+		},
+
+		// select_employee_id(val) {
+		// 	this.formData.employee_id = val;
+		// 	this.executiveFunction(true);
+		// }
+	},
+	mounted() {
+		window.addEventListener('resize', this.selfAdaption);
+		this.getEmployee().then(res =>{
+			// if (this.$getUserData()) {
+			// 	this.personnel = this.$getUserData();
+			// 	let dept_li = this.personnel.employee_detail.dept_list;
+			// 	let dept_ = '';
+			// 	for (let i in dept_li) {
+			// 		dept_ += dept_li[i].dept_name + ' ';
+			// 	}
+			// 	this.dept_list = dept_;
+			// } else {
+			// 	this.personnelDetails(); //获取人员详情
+			// }
+			this.formData.month = this.$moment().format('YYYY-MM');
+			this.executiveFunction();
+		}).catch((err) =>{
+			console.log(err)
+		});
+		// if(JSON.parse(localStorage.getItem("SET_EMPLOYEE_MAP"))){
+		//   this.employee_map = JSON.parse(localStorage.getItem("SET_EMPLOYEE_MAP"))
+		// }else{
+		//   this.$store.dispatch('get_employee_map').then((res) => {
+		//     this.$nextTick(() => {
+		//       this.employee_map = JSON.parse(localStorage.getItem("SET_EMPLOYEE_MAP"))
+		//     })
+		//   })
+		// }
+		// if (this.$store.getters.user_info) {
+		//   this.personnel = this.$store.getters.user_info;
+		//   let dept_li = this.personnel.employee_detail.dept_list;
+		//   let dept_ = "";
+		//   for (let i in dept_li) {
+		//     dept_ += dept_li[i].dept_name + " ";
+		//   }
+		//   this.dept_list = dept_;
+		// } else {
+		//   this.personnelDetails(); //获取人员详情
+		// }
+	},
+	methods: {
+		selectEmployeeChange(val){
+			console.log(val)
+			this.formData.employee_id = val;
+			this.executiveFunction(true);
+		},
+		getType(id) {
+			return this.$getTyps(id).name;
+		},
+
+		//获取员工列表
+		getEmployee() {
+			return new Promise((resolve, reject) =>{
+				this.personnelMessage = true;
+				this.$axios('get', '/api/employee/index', { dept_id: 0, keywords: '', page: 1, page_size: 3000, is_official: 1 })
+					.then(res => {
+						let list = res.data.data.list;
+						this.employee_map = list.filter(x => x.is_creator != 1)
+						if(this.employee_map.length == 0){
+							reject('err')
+							return
+						}
+						if(this.$getUserData().is_creator == 1){
+							this.select_employee_id = this.employee_map[0].id
+							let employee = this.employee_map[0]
+							this.formData.employee_id = employee.id
+							this.personnel = employee
+							let dept_li = this.personnel.employee_detail.dept_list;
+							let dept_ = '';
+							for (let i in dept_li) {
+								dept_ += dept_li[i].dept_name + ' ';
+							}
+							this.dept_list = dept_;
+						}else{
+							if (this.$getUserData()) {
+								this.select_employee_id = this.$getUserData().name
+								this.personnel = this.$getUserData();
+								let dept_li = this.personnel.employee_detail.dept_list;
+								let dept_ = '';
+								for (let i in dept_li) {
+									dept_ += dept_li[i].dept_name + ' ';
+								}
+								this.dept_list = dept_;
+							} else {
+								this.personnelDetails(); //获取人员详情
+							}
+						}
+						// this.employee_map = list;
+						// for(let i in list){
+
+						// }
+
+						
+					})
+					.finally(err => {
+						this.personnelMessage = false;
+						resolve('res')
+					});
+			})
+		},
+
+		//echarts自适应
+		selfAdaption() {
+			var myChart1 = this.$echarts.init(this.$refs.monthlyIntegralChart);
+			var myChart2 = this.$echarts.init(this.$refs.IntegralFormChart);
+			// myChart.setOption(option);
+			myChart1.resize();
+			myChart2.resize();
+		},
+		//需要执行的所有函数
+		executiveFunction(item) {
+			//切换角色才请求--人员详情--。
+			if (item) {
+				this.personnelDetails(); //获取人员详情
+				this.authorityManagerHeader(); //本月 A B 绩效分 比例
+				this.integralForm(); //饼图
+				this.monthlyIntegral(); //本月积分情况
+				this.integralEvents(); //积分事件列表
+			} else {
+				this.authorityManagerHeader(); //本月 A B 绩效分 比例
+				this.integralForm(); //饼图
+				this.monthlyIntegral(); //本月积分情况
+				this.integralEvents(); //积分事件列表
+			}
+		},
+
+		//获取人员详情
+		personnelDetails() {
+			this.personnelMessage = true;
+			let params = {
+				id: this.formData.employee_id
+			};
+			this.$axios('get', '/api/employee/info', params)
+				.then(res => {
+					this.personnel = res.data.data;
+					let dept_li = this.personnel.employee_detail.dept_list;
+					let dept_ = '';
+					for (let i in dept_li) {
+						dept_ += dept_li[i].dept_name + ' ';
+					}
+					this.dept_list = dept_;
+				})
+				.finally(() => {
+					this.personnelMessage = false;
+				});
+		},
+		//本月 A B 绩效分 比例
+		authorityManagerHeader() {
+			this.authorityManagerHeaderLoad = true;
+			let params = {};
+			params.employee_id = this.formData.employee_id;
+			if (this.monthORyear == '2') {
+				//月
+				params.month = this.formData.month;
+			} else if (this.monthORyear == '3') {
+				//年
+				params.year = this.formData.year;
+			}
+			let params1 = this.$axios('get', '/api/integral/statistics/', params, 'v2')
+			let params2 = this.$axios('get', '/api/integral/statistics/', { employee_id: this.formData.employee_id, day: this.$moment().format('YYYY-MM-DD')}, 'v2')
+			Promise.all([params1, params2]).then(res => {
+				this.authorityManagerHeaders = res[0].data.data;
+				this.headDayBs = res[1].data.data;
+			})
+			.finally(() => {
+				this.authorityManagerHeaderLoad = false;
+			});
+		},
+
+		//饼图
+		//分为两列展示,多传legendDataTwo
+		// drawLine(legendDataOne, legendDataTwo, dadalist) {
+		drawLine(legendDataOne, dadalist) {
+			const chart = this.$refs.IntegralFormChart;
+			//此处可给固定颜色,不给就所有颜色随机
+			let colors = ['rgb(38, 162, 255)', '#f36f2a', '#fecb09', '#00b6bd', '#e85d53', '#fecb09', '#725197', '#fcb814', '#41a08d', '#425a95', '#ea8b84', '#9d1d62', '#fcb814'];
+			// let colors = [];
+			// let legendDataLeng = legendDataOne.length + legendDataTwo.length;
+			let legendDataLeng = legendDataOne.length;
+			if (legendDataLeng > colors.length) {
+				//当列表大于固定颜色时,给随机颜色
+				let colorsLeng = colors.length;
+				for (let i = 0; i <= legendDataLeng - colorsLeng; i++) {
+					// colors.push('#' + Math.random().toString(16).substr(2, 6).toUpperCase());//也是随机色
+					colors.push('rgb(' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ')');
+				}
+			}
+			//只显示 N 条标题,多余隐藏,但是饼图不会隐藏
+			let DataLengths = [];
+			// for (let i in legendDataTwo) {
+			//   if (i < 8) {
+			//     DataLengths.push(legendDataTwo[i]);
+			//   }
+			// }
+			let left1 = '45%';
+			let left2 = '45%';
+			let leftBT = '25%';
+			// if (legendDataTwo.length != 0) {
+			//   left1 = "36%";
+			//   leftBT = "18%";
+			// }
+			if (chart) {
+				const myChart = this.$echarts.init(chart);
+				var legendData1 = legendDataOne;
+				// var legendData2 = DataLengths;
+				const option = {
+					tooltip: { trigger: 'item', formatter: '{b}' },
+					legend: [
+						{
+							type: 'scroll',
+							orient: 'vertical',
+							icon: 'square',
+							left: left1,
+							align: 'left',
+							top: '10%',
+							itemGap: 20,
+							textStyle: { fontSize: 14, color: 'rgb(48, 49, 51)' },
+							data: legendData1
+						}
+						//分为两列展示
+						// {
+						//   type: "scroll",
+						//   orient: "vertical",
+						//   icon: "square",
+						//   left: "70%",
+						//   align: "left",
+						//   top: "10%",
+						//   itemGap: 20,
+						//   textStyle: { fontSize: 14, color: "rgb(48, 49, 51)" },
+						//   data: legendData2,
+						// },
+					],
+					color: colors,
+					grid: { x: 25, y: 45, x2: 5, y2: 20, borderWidth: 1 },
+					toolbox: {
+						show: true,
+						feature: {
+							mark: { show: true },
+							magicType: { show: true, type: ['pie', 'funnel'] }
+						}
+					},
+					series: [
+						{
+							name: '',
+							type: 'pie',
+							radius: [20, 110],
+							center: [leftBT, '40%'],
+							roseType: 'radius',
+							label: { show: false },
+							emphasis: { label: { show: false } },
+							data: dadalist
+						}
+					]
+				};
+				myChart.setOption(option);
+			}
+		},
+		integralForm() {
+			this.IntegralFormChartLoad = true;
+			let listslength = [];
+			let params = {};
+			params.employee_id = this.formData.employee_id;
+			if (this.monthORyear == '2') {
+				//月
+				params.month = this.formData.month;
+			} else if (this.monthORyear == '3') {
+				//年
+				params.year = this.formData.year;
+			}
+			this.$axios('get', '/api/integral/statistics/pie/b', params, 'v2')
+				.then(res => {
+					let lists = res.data.data.list;
+					listslength = lists;
+					let legendData1 = [];
+					let legendData2 = [];
+					let dadalist = [];
+					//分为两列展示
+					// let listLeng = Math.ceil((lists.length)/2)
+
+					for (let i in lists) {
+						if (lists[i].name.length > 15) {
+							lists[i].name = lists[i].name.slice(0, 15) + '...';
+						}
+						//分为两列展示
+						// if(i<listLeng){
+						//   legendData1.push(lists[i].name+' '+'奖'+lists[i].reward+' '+'扣'+lists[i].deduction+' '+lists[i].ratio+'%')
+						// }else{
+						//   legendData2.push(lists[i].name+' '+'奖'+lists[i].reward+' '+'扣'+lists[i].deduction+' '+lists[i].ratio+'%')
+						// }
+						if (i < 8) {
+							legendData1.push(lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%');
+						} else {
+							legendData2.push(lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%');
+						}
+						let dataListDx = {};
+						if (lists[i].ratio < 0) {
+							dataListDx.value = 0;
+						} else {
+							dataListDx.value = lists[i].ratio;
+						}
+						dataListDx.name = lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%';
+						// dataListDx.name = lists[i].name
+						dadalist.push(dataListDx);
+					}
+					//分为两列展示,多传legendData2
+					this.drawLine(legendData1, dadalist); //图表
+				})
+				.finally(() => {
+					if (listslength.length == 0) {
+						this.IntegralFormnone = true;
+					} else {
+						this.IntegralFormnone = false;
+					}
+					this.IntegralFormChartLoad = false;
+				});
+		},
+
+		//月度积分
+		monthlyIntegralRanking(date, total, reward, deduction) {
+			const chart = this.$refs.monthlyIntegralChart;
+			if (chart) {
+				const myChart = this.$echarts.init(chart);
+				const option = {
+					tooltip: {
+						trigger: 'axis'
+					},
+					color: ['#F56C6C', '#26A2FF', '#FFC100'],
+					legend: {
+						right: '0%',
+						data: ['总积分', '奖分', '扣分']
+					},
+					grid: {
+						left: '3%',
+						right: '4%',
+						bottom: '3%',
+						containLabel: true
+					},
+					toolbox: {
+						feature: {}
+					},
+					xAxis: {
+						type: 'category',
+						boundaryGap: false,
+						data: date
+					},
+					yAxis: {
+						type: 'value',
+						axisLine: {
+							show: false
+						},
+						axisTick: {
+							show: false
+						}
+					},
+					series: [
+						{
+							name: '总积分',
+							type: 'line',
+							data: total
+						},
+						{
+							name: '奖分',
+							type: 'line',
+							data: reward
+						},
+						{
+							name: '扣分',
+							type: 'line',
+							data: deduction
+						}
+					]
+				};
+				myChart.setOption(option);
+			}
+		},
+		//月度积分
+		// monthlyIntegralchange(val){
+		//   console.log(val)
+		//   if(val.length == 0){
+		//     this.exclusiveMonthBranch = 0
+		//   }else{
+		//     let valItem = 0
+		//     for(let i in val){
+		//       valItem = val[i]
+		//     }
+		//     this.exclusiveMonthBranch = valItem
+		//   }
+		//   this.monthlyIntegral()
+		// 	this.$nextTick(()=>{
+		// 		this.$refs.dept2.dropDownVisible = false;
+		// 	})
+		// },
+		monthlyIntegral() {
+			this.monthlyIntegralloading = true;
+			let params = {};
+			let listslength = [];
+			params.employee_id = this.formData.employee_id;
+			if (this.monthORyear == '2') {
+				//月
+				params.month = this.formData.month;
+			} else if (this.monthORyear == '3') {
+				//年
+				params.year = this.formData.year;
+			}
+			if (this.exclusiveMonthChecked) {
+				params.include_fixed = 1;
+			} else {
+				params.include_fixed = 0;
+			}
+			this.$axios('get', '/api/integral/statistics/curve', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						let lists = res.data.data;
+						listslength = lists;
+						if (this.monthORyear == '2') {
+							this.monthlyIntegralList[0].total_point = lists.total_point;
+							this.monthlyIntegralList[1].reward_point = lists.reward_point;
+							this.monthlyIntegralList[2].deduction_point = lists.deduction_point;
+							this.monthlyIntegralList[3].ratio = lists.ratio;
+							this.monthlyIntegralList[4].toRatio = lists.contrast_total;
+							this.monthlyIntegralList[5].toRatio = lists.contrast_reward;
+							this.monthlyIntegralList[6].toRatio = lists.contrast_deduction;
+						} else if (this.monthORyear == '3') {
+							this.yearlyIntegralList[0].total_point = lists.total_point;
+							this.yearlyIntegralList[1].reward_point = lists.reward_point;
+							this.yearlyIntegralList[2].deduction_point = lists.deduction_point;
+							this.yearlyIntegralList[3].ratio = lists.ratio;
+							this.yearlyIntegralList[4].toRatio = lists.contrast_total;
+							this.yearlyIntegralList[5].toRatio = lists.contrast_reward;
+							this.yearlyIntegralList[6].toRatio = lists.contrast_deduction;
+						}
+						let dates = []; //日期
+						let totals = []; //总积分
+						let rewards = []; //奖分
+						let deductions = []; //扣分
+						for (let i in lists.total) {
+							dates.push(lists.total[i].date);
+							totals.push(lists.total[i].point);
+						}
+						for (let i in lists.reward) {
+							rewards.push(lists.reward[i].point);
+						}
+						for (let i in lists.deduction) {
+							deductions.push(lists.deduction[i].point);
+						}
+						this.monthlyIntegralRanking(dates, totals, rewards, deductions);
+					}
+				})
+				.finally(() => {
+					if (!listslength.total) {
+						this.monthlyIntegralnone = true;
+					} else {
+						this.monthlyIntegralnone = false;
+					}
+					this.monthlyIntegralloading = false;
+				});
+		},
+
+		//积分事件列表
+		integralEvents() {
+			this.awardDeductRanking = true;
+			let params = {
+				page: 1,
+				page_size: 5,
+				pt_id: '3',
+				time_type: '2'
+			};
+			params.employee_id = this.formData.employee_id;
+			if (this.monthORyear == '2') {
+				//月
+				params.month = this.formData.month;
+				params.time_type = '2';
+			} else if (this.monthORyear == '3') {
+				//年
+				params.year = this.formData.year;
+				params.time_type = '3';
+			}
+			this.$axios('get', '/api/integral/statistics/prize/buckle/ranking', params)
+				.then(res => {
+					this.IntegralEventO = res.data.data.prize;
+					this.IntegralEventT = res.data.data.buckle;
+				})
+				.finally(() => {
+					this.awardDeductRanking = false;
+				});
+		}
+	},
+	beforeDestroy() {
+		//取消echarts自适应
+		window.removeEventListener('resize', this.selfAdaption);
+	}
+};
+</script>
+<style scoped="scoped" lang="scss">
+.el-table::before {
+	height: 0px;
+}
+
+.left-all-style {
+	margin-top: 10px;
+	padding: 20px;
+	background: #fff;
+	border-radius: 5px;
+	.title {
+		padding-left: 10px;
+		font-size: 16px;
+		font-weight: normal;
+		border-left: 2px solid #409eff;
+	}
+	.titledes {
+		display: block;
+		padding-top: 10px;
+		font-size: 14px;
+		color: #909399;
+	}
+	.noremind {
+		display: block;
+		text-align: right;
+		font-size: 12px;
+		color: #909399;
+		cursor: pointer;
+	}
+	.noremind:hover {
+		color: #409eff;
+	}
+	.noremind:active {
+		color: #409eff;
+	}
+}
+
+.right-all-style {
+	padding: 20px;
+	background: #fff;
+	border-radius: 5px;
+	margin: 0 0 10px 10px;
+	.title {
+		padding-left: 10px;
+		font-size: 16px;
+		font-weight: normal;
+		border-left: 2px solid #409eff;
+	}
+}
+.rightexamineAndApproveList {
+	text-align: left;
+	width: 100%;
+	border-bottom: 1px solid #efefef;
+}
+.nopoint_box {
+	display: inline-block;
+	text-align: center;
+	width: 100%;
+	margin-bottom: 10px;
+	.noimg {
+		display: inline-block;
+		width: 110px;
+		height: 110px;
+		margin: 22px auto 16px;
+		background: url('../../assets/image/nodata_default.png') no-repeat center;
+		background-size: 99%;
+	}
+	.noperson {
+		display: inline-block;
+		width: 110px;
+		height: 110px;
+		margin: 22px auto 16px;
+		background: url('../../assets/image/noperson_default.png') no-repeat center;
+		background-size: 99%;
+	}
+	.title1 {
+		display: block;
+		text-align: center;
+		font-size: 12px !important;
+		color: #909399 !important;
+		padding: 0;
+	}
+	a {
+		color: #26a2ff;
+	}
+}
+
+.top_user_info {
+	position: relative;
+	padding-top: 0;
+	background: #fff;
+	.userinfo_box {
+		border-right: 1px #cecccc solid;
+		margin: 34px 0;
+	}
+	.user_box {
+		padding-left: 0 !important;
+		border-right: 1px #333 solid;
+	}
+	.headimg_box {
+		padding-left: 0 !important;
+	}
+	.headimg_box .headimg {
+		width: 50px;
+		height: 50px;
+		background: #909399;
+		border-radius: 50px;
+	}
+	.user_info {
+		padding: 0 !important;
+		line-height: 25px;
+		.greetings {
+			margin: 4px 0px 0 120px;
+			font-size: 16px;
+			font-weight: bold;
+		}
+		.greetings span {
+			font-size: 14px;
+			color: #666;
+			display: inline-block;
+			vertical-align: top;
+		}
+		span:nth-child(1) {
+			display: block;
+			font-size: 16px;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+		}
+	}
+	.person {
+		display: block;
+		font-size: 14px;
+		padding: 32px 0 18px 0;
+		color: #606266;
+	}
+	.time {
+		font-size: 14px;
+		padding-right: 10px;
+		position: relative;
+	}
+}
+/*
+padding: 18px 0 16px 0;
+color: #606266;
+height: 32px;
+box-sizing: content-box;
+*/
+
+.pointsevent_box {
+	display: block;
+	text-align: center;
+	margin: 20px 0 0 0px;
+	padding-right: 0 !important;
+	border: 1px #e1e4e7 solid;
+	box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
+	.title {
+		font-family: Microsoft Yahei;
+		display: block;
+		text-align: left;
+		margin-bottom: 20px;
+		padding: 0 0 0 10px;
+		font-size: 16px;
+		font-weight: normal;
+		border-left: 2px solid #409eff;
+	}
+}
+.popperSPBOX {
+	max-width: calc(100vh - 400px);
+	background-color: #fff;
+}
+</style>

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