From eba69a5d895497c37990f15abfb083474ca037da Mon Sep 17 00:00:00 2001
From: “dzb” <2632970487@qq.com>
Date: 星期一, 26 九月 2022 09:04:56 +0800
Subject: [PATCH] 完成部分静态页面

---
 src/views/operate/baseSetting/illegalBuild/index.vue                                |  246 +
 package-lock.json                                                                   | 3017 +++++++++++++++++
 src/views/operate/fivepack/shop/index.vue                                           |   18 
 src/views/operate/baseSetting/violation/index.vue                                   |  250 +
 src/views/operate/rectification/taskList/components/createInterface/index.vue       |  260 +
 src/views/operate/myWait/index.vue                                                  |  252 +
 src/views/layout/components/Menu/index.vue                                          |   81 
 src/views/info/Success/index.vue                                                    |  153 
 src/views/operate/baseSetting/threepack/components/createInterface/index.vue        |  260 +
 src/views/operate/fivepack/shop/components/header/index.vue                         |    2 
 src/components/Footer/index.vue                                                     |    3 
 src/views/operate/rectification/index.vue                                           |    3 
 src/views/operate/rectification/renovationList/index.vue                            |  294 +
 src/views/operate/myWait/components/viewInterface/index.vue                         |  246 +
 src/views/operate/baseSetting/index.vue                                             |    4 
 src/views/operate/baseSetting/violation/components/viewInterface/index.vue          |  246 +
 src/views/operate/fivepack/threepack/components/createUser/index.vue                |  316 +
 src/views/operate/fivepack/threepack/components/updateUser/index.vue                |  379 ++
 src/views/operate/fivepack/shop/components/main/index.vue                           |   63 
 src/views/operate/rectification/surveyList/components/createInterface/index.vue     |  260 +
 src/views/operate/rectification/surveyList/components/viewInterface/index.vue       |  246 +
 src/views/operate/baseSetting/threepack/components/viewInterface/index.vue          |  246 +
 src/views/operate/fivepack/shop/components/createUser/index.vue                     |  203 
 src/views/operate/rectification/surveyList/index.vue                                |  290 +
 src/views/operate/fivepack/threepack/components/aside/index.vue                     |  100 
 src/views/operate/rectification/taskList/index.vue                                  |  296 +
 src/views/operate/fivepack/threepack/components/main/index.vue                      |  259 +
 src/router/index.js                                                                 |   54 
 src/views/operate/rectification/renovationList/components/createInterface/index.vue |  260 +
 src/views/operate/baseSetting/illegalBuild/components/viewInterface/index.vue       |  246 +
 src/views/operate/baseSetting/violation/components/createInterface/index.vue        |  260 +
 src/views/info/Fail/index.vue                                                       |  163 
 src/views/operate/baseSetting/illegalBuild/components/createInterface/index.vue     |  260 +
 src/views/operate/rectification/renovationList/components/viewInterface/index.vue   |  246 +
 package.json                                                                        |    3 
 src/views/layout/index.vue                                                          |    1 
 src/views/layout/components/Main/index.vue                                          |    4 
 src/views/operate/myWait/components/createInterface/index.vue                       |  260 +
 src/views/operate/fivepack/threepack/components/header/index.vue                    |  109 
 src/views/operate/fivepack/threepack/index.vue                                      |   82 
 src/views/operate/rectification/taskList/components/viewInterface/index.vue         |  246 +
 src/views/operate/baseSetting/threepack/index.vue                                   |  246 +
 42 files changed, 10,144 insertions(+), 289 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 08a7ced..8f48725 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,6 +11,7 @@
         "@amap/amap-jsapi-loader": "^1.0.1",
         "axios": "^0.27.2",
         "core-js": "^3.8.3",
+        "element-ui": "^2.15.8",
         "normalize.css": "^8.0.1",
         "sass": "^1.54.8",
         "sass-loader": "^13.0.2",
@@ -26,7 +27,6 @@
         "@vue/cli-service": "~5.0.0",
         "chalk": "4.1.0",
         "compression-webpack-plugin": "5.0.2",
-        "element-ui": "^2.15.9",
         "svg-sprite-loader": "5.1.1",
         "vue-template-compiler": "^2.6.14"
       }
@@ -2784,6 +2784,83 @@
       "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
       "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA=="
     },
+    "node_modules/@webassemblyjs/helper-code-frame": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+      "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/wast-printer": "1.9.0"
+      }
+    },
+    "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/ast": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+      "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0"
+      }
+    },
+    "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+      "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/wast-printer": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+      "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/helper-fsm": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+      "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-module-context": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+      "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.9.0"
+      }
+    },
+    "node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/ast": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+      "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0"
+      }
+    },
+    "node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+      "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/@webassemblyjs/helper-numbers": {
       "version": "1.11.1",
       "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
@@ -2882,6 +2959,54 @@
         "@webassemblyjs/utf8": "1.11.1"
       }
     },
+    "node_modules/@webassemblyjs/wast-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
+      "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@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"
+      }
+    },
+    "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/ast": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+      "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0"
+      }
+    },
+    "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+      "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-api-error": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+      "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+      "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/@webassemblyjs/wast-printer": {
       "version": "1.11.1",
       "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
@@ -2977,6 +3102,16 @@
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/ajv-errors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+      "dev": true,
+      "peer": true,
+      "peerDependencies": {
+        "ajv": ">=5.0.0"
       }
     },
     "node_modules/ajv-formats": {
@@ -3089,6 +3224,13 @@
         "node": ">= 8"
       }
     },
+    "node_modules/aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/arch": {
       "version": "2.2.0",
       "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz",
@@ -3179,6 +3321,54 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/asn1.js": {
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+      "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "node_modules/asn1.js/node_modules/bn.js": {
+      "version": "4.12.0",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/assert": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "object-assign": "^4.1.1",
+        "util": "0.10.3"
+      }
+    },
+    "node_modules/assert/node_modules/inherits": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+      "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/assert/node_modules/util": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+      "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "inherits": "2.0.1"
+      }
+    },
     "node_modules/assign-symbols": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz",
@@ -3199,9 +3389,8 @@
     },
     "node_modules/async-validator": {
       "version": "1.8.5",
-      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz",
+      "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
       "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
-      "dev": true,
       "dependencies": {
         "babel-runtime": "6.x"
       }
@@ -3276,9 +3465,8 @@
     },
     "node_modules/babel-helper-vue-jsx-merge-props": {
       "version": "2.0.3",
-      "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
-      "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+      "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
     },
     "node_modules/babel-loader": {
       "version": "8.2.5",
@@ -3363,9 +3551,8 @@
     },
     "node_modules/babel-runtime": {
       "version": "6.26.0",
-      "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
       "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
-      "dev": true,
       "dependencies": {
         "core-js": "^2.4.0",
         "regenerator-runtime": "^0.11.0"
@@ -3373,17 +3560,15 @@
     },
     "node_modules/babel-runtime/node_modules/core-js": {
       "version": "2.6.12",
-      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
       "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
       "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
-      "dev": true,
       "hasInstallScript": true
     },
     "node_modules/babel-runtime/node_modules/regenerator-runtime": {
       "version": "0.11.1",
-      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
     },
     "node_modules/balanced-match": {
       "version": "1.0.2",
@@ -3468,6 +3653,13 @@
       "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz",
       "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
       "dev": true
+    },
+    "node_modules/bn.js": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+      "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/body-parser": {
       "version": "1.20.0",
@@ -3556,6 +3748,113 @@
         "node": ">=8"
       }
     },
+    "node_modules/brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/browserify-cipher": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
+      }
+    },
+    "node_modules/browserify-des": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "node_modules/browserify-rsa": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+      "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "bn.js": "^5.0.0",
+        "randombytes": "^2.0.1"
+      }
+    },
+    "node_modules/browserify-sign": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+      "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/browserify-sign/node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "peer": true
+    },
+    "node_modules/browserify-zlib": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "pako": "~1.0.5"
+      }
+    },
     "node_modules/browserslist": {
       "version": "4.21.3",
       "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.3.tgz",
@@ -3611,6 +3910,20 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
       "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+    },
+    "node_modules/buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+      "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/builtin-status-codes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+      "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/bytes": {
       "version": "3.0.0",
@@ -3830,6 +4143,17 @@
       "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
       "engines": {
         "node": ">=6.0"
+      }
+    },
+    "node_modules/cipher-base": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "node_modules/class-utils": {
@@ -4228,6 +4552,48 @@
       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
       "dev": true
     },
+    "node_modules/concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "dev": true,
+      "engines": [
+        "node >= 0.8"
+      ],
+      "peer": true,
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "node_modules/concat-stream/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/concat-stream/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
     "node_modules/connect-history-api-fallback": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
@@ -4236,6 +4602,13 @@
       "engines": {
         "node": ">=0.8"
       }
+    },
+    "node_modules/console-browserify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+      "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/consolidate": {
       "version": "0.15.1",
@@ -4248,6 +4621,13 @@
       "engines": {
         "node": ">= 0.10.0"
       }
+    },
+    "node_modules/constants-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+      "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/content-disposition": {
       "version": "0.5.4",
@@ -4313,6 +4693,34 @@
       "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",
       "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
       "dev": true
+    },
+    "node_modules/copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/copy-concurrently/node_modules/rimraf": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      }
     },
     "node_modules/copy-descriptor": {
       "version": "0.1.1",
@@ -4420,6 +4828,53 @@
         "node": ">=10"
       }
     },
+    "node_modules/create-ecdh": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+      "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.5.3"
+      }
+    },
+    "node_modules/create-ecdh/node_modules/bn.js": {
+      "version": "4.12.0",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/create-hash": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
+      }
+    },
+    "node_modules/create-hmac": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
     "node_modules/cross-spawn": {
       "version": "6.0.5",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -4443,6 +4898,29 @@
       "dev": true,
       "bin": {
         "semver": "bin/semver"
+      }
+    },
+    "node_modules/crypto-browserify": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      },
+      "engines": {
+        "node": "*"
       }
     },
     "node_modules/css-declaration-sorter": {
@@ -4735,6 +5213,13 @@
       "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.0.tgz",
       "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
     },
+    "node_modules/cyclist": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+      "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/de-indent": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz",
@@ -4771,7 +5256,6 @@
       "version": "1.5.2",
       "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz",
       "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==",
-      "dev": true,
       "engines": {
         "node": ">=0.10.0"
       }
@@ -4969,6 +5453,17 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/des.js": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+      "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
     "node_modules/destroy": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
@@ -4984,6 +5479,25 @@
       "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz",
       "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
       "dev": true
+    },
+    "node_modules/diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
+      }
+    },
+    "node_modules/diffie-hellman/node_modules/bn.js": {
+      "version": "4.12.0",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/dir-glob": {
       "version": "3.0.1",
@@ -5036,6 +5550,17 @@
       },
       "funding": {
         "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+      }
+    },
+    "node_modules/domain-browser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.4",
+        "npm": ">=1.2"
       }
     },
     "node_modules/domelementtype": {
@@ -5116,6 +5641,45 @@
       "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
       "dev": true
     },
+    "node_modules/duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "node_modules/duplexify/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/duplexify/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
     "node_modules/easy-stack": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz",
@@ -5137,10 +5701,9 @@
       "integrity": "sha512-e7Wsh4ilaioBZ5bMm6+F4V5c11dh56/5Jwz7Hl5Tu1J7cnB+Pqx5qIF2iC7HPpfyQMqGSvvLP5bBAIDd2gAtGw=="
     },
     "node_modules/element-ui": {
-      "version": "2.15.9",
-      "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.9.tgz",
-      "integrity": "sha512-dx45nQLt4Hn87/Z9eRr3ex6KFZbxlFAwEU3QoW3wA5EsYftvHTyL9Pq7VnXXD7hu1Eiaup2jcs6kp+/VSFmXuA==",
-      "dev": true,
+      "version": "2.15.8",
+      "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.8.tgz",
+      "integrity": "sha512-N54zxosRFqpYax3APY3GeRmtOZwIls6Z756WM0kdPZ5Q92PIeKHnZgF1StlamIg9bLxP1k+qdhTZvIeQlim09A==",
       "dependencies": {
         "async-validator": "~1.8.1",
         "babel-helper-vue-jsx-merge-props": "^2.0.0",
@@ -5152,6 +5715,29 @@
       "peerDependencies": {
         "vue": "^2.5.17"
       }
+    },
+    "node_modules/elliptic": {
+      "version": "6.5.4",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/elliptic/node_modules/bn.js": {
+      "version": "4.12.0",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/emoji-regex": {
       "version": "8.0.0",
@@ -5205,6 +5791,19 @@
       "dev": true,
       "funding": {
         "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/errno": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+      "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "prr": "~1.0.1"
+      },
+      "bin": {
+        "errno": "cli.js"
       }
     },
     "node_modules/error-ex": {
@@ -5391,6 +5990,17 @@
       "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
       "engines": {
         "node": ">=0.8.x"
+      }
+    },
+    "node_modules/evp_bytestokey": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
       }
     },
     "node_modules/execa": {
@@ -5700,6 +6310,13 @@
         "node": ">=0.8.0"
       }
     },
+    "node_modules/figgy-pudding": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
+      "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/figures": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz",
@@ -5786,6 +6403,43 @@
         "node": ">=8"
       }
     },
+    "node_modules/flush-write-stream": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      }
+    },
+    "node_modules/flush-write-stream/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/flush-write-stream/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
     "node_modules/follow-redirects": {
       "version": "1.15.1",
       "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz",
@@ -5870,6 +6524,43 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "node_modules/from2/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/from2/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
     "node_modules/fs-extra": {
       "version": "9.1.0",
       "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz",
@@ -5902,6 +6593,45 @@
       "resolved": "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.3.tgz",
       "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
       "dev": true
+    },
+    "node_modules/fs-write-stream-atomic": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+      "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
+      }
+    },
+    "node_modules/fs-write-stream-atomic/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/fs-write-stream-atomic/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
     },
     "node_modules/fs.realpath": {
       "version": "1.0.0",
@@ -6273,11 +7003,58 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/hash-base": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+      "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/hash-base/node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "peer": true
+    },
     "node_modules/hash-sum": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz",
       "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
       "dev": true
+    },
+    "node_modules/hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
     },
     "node_modules/he": {
       "version": "1.2.0",
@@ -6295,6 +7072,18 @@
       "dev": true,
       "engines": {
         "node": "*"
+      }
+    },
+    "node_modules/hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
       }
     },
     "node_modules/hosted-git-info": {
@@ -6559,6 +7348,13 @@
         }
       }
     },
+    "node_modules/https-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+      "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/human-signals": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz",
@@ -6611,6 +7407,13 @@
           "url": "https://feross.org/support"
         }
       ]
+    },
+    "node_modules/iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+      "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/ignore": {
       "version": "5.2.0",
@@ -7570,6 +8373,18 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/md5.js": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
     "node_modules/mdn-data": {
       "version": "2.0.14",
       "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -7595,6 +8410,43 @@
       },
       "engines": {
         "node": ">= 4.0.0"
+      }
+    },
+    "node_modules/memory-fs": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+      "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "node_modules/memory-fs/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/memory-fs/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
       }
     },
     "node_modules/merge-descriptors": {
@@ -7668,6 +8520,27 @@
       "engines": {
         "node": ">=8.6"
       }
+    },
+    "node_modules/miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      },
+      "bin": {
+        "miller-rabin": "bin/miller-rabin"
+      }
+    },
+    "node_modules/miller-rabin/node_modules/bn.js": {
+      "version": "4.12.0",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/mime": {
       "version": "1.6.0",
@@ -7787,6 +8660,13 @@
       "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
       "dev": true
     },
+    "node_modules/minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/minimatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
@@ -7866,6 +8746,28 @@
         "node": ">= 8"
       }
     },
+    "node_modules/mississippi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      },
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
     "node_modules/mitt": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/mitt/-/mitt-1.1.2.tgz",
@@ -7914,6 +8816,34 @@
       "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.2.tgz",
       "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==",
       "dev": true
+    },
+    "node_modules/move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+      "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/move-concurrently/node_modules/rimraf": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      }
     },
     "node_modules/mrmime": {
       "version": "1.0.1",
@@ -8084,6 +9014,83 @@
         "node": ">= 6.13.0"
       }
     },
+    "node_modules/node-libs-browser": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+      "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/node-libs-browser/node_modules/buffer": {
+      "version": "4.9.2",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+      "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
+      }
+    },
+    "node_modules/node-libs-browser/node_modules/punycode": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+      "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/node-libs-browser/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/node-libs-browser/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
     "node_modules/node-releases": {
       "version": "2.0.6",
       "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz",
@@ -8141,9 +9148,8 @@
     },
     "node_modules/normalize-wheel": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
-      "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
+      "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA=="
     },
     "node_modules/normalize.css": {
       "version": "8.0.1",
@@ -8462,6 +9468,13 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
+    "node_modules/os-browserify": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+      "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz",
@@ -8535,6 +9548,51 @@
         "node": ">=6"
       }
     },
+    "node_modules/pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/parallel-transform": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "cyclist": "^1.0.1",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      }
+    },
+    "node_modules/parallel-transform/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/parallel-transform/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
     "node_modules/param-case": {
       "version": "3.0.4",
       "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz",
@@ -8555,6 +9613,20 @@
       },
       "engines": {
         "node": ">=6"
+      }
+    },
+    "node_modules/parse-asn1": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+      "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "asn1.js": "^5.2.0",
+        "browserify-aes": "^1.0.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3",
+        "safe-buffer": "^5.1.1"
       }
     },
     "node_modules/parse-json": {
@@ -8624,6 +9696,13 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/path-browserify": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+      "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/path-exists": {
       "version": "4.0.0",
       "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
@@ -8672,6 +9751,23 @@
         "node": ">=8"
       }
     },
+    "node_modules/pbkdf2": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+      "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      },
+      "engines": {
+        "node": ">=0.12"
+      }
+    },
     "node_modules/picocolors": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
@@ -8686,6 +9782,16 @@
       },
       "funding": {
         "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6"
       }
     },
     "node_modules/pkg-dir": {
@@ -9451,6 +10557,16 @@
         "renderkid": "^3.0.0"
       }
     },
+    "node_modules/process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
     "node_modules/process-nextick-args": {
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -9564,17 +10680,69 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",
       "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
       "dev": true
     },
+    "node_modules/public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/public-encrypt/node_modules/bn.js": {
+      "version": "4.12.0",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/pump": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz",
       "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
       "dev": true,
+      "dependencies": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "node_modules/pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
+      }
+    },
+    "node_modules/pumpify/node_modules/pump": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+      "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+      "dev": true,
+      "peer": true,
       "dependencies": {
         "end-of-stream": "^1.1.0",
         "once": "^1.3.1"
@@ -9616,6 +10784,27 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/querystring": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+      "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
+      "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.4.x"
+      }
+    },
+    "node_modules/querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+      "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.4.x"
+      }
+    },
     "node_modules/queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -9641,6 +10830,17 @@
       "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
       "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
       "dependencies": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "node_modules/randomfill": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "randombytes": "^2.0.5",
         "safe-buffer": "^5.1.0"
       }
     },
@@ -9941,9 +11141,8 @@
     },
     "node_modules/resize-observer-polyfill": {
       "version": "1.5.1",
-      "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
-      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
     },
     "node_modules/resolve": {
       "version": "1.22.1",
@@ -10034,6 +11233,17 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/ripemd160": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
+    },
     "node_modules/run-parallel": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -10055,6 +11265,16 @@
       ],
       "dependencies": {
         "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+      "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "aproba": "^1.1.1"
       }
     },
     "node_modules/safe-buffer": {
@@ -10336,11 +11556,32 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+      "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/setprototypeof": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
       "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
       "dev": true
+    },
+    "node_modules/sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      },
+      "bin": {
+        "sha.js": "bin.js"
+      }
     },
     "node_modules/shallow-clone": {
       "version": "3.0.1",
@@ -10879,6 +12120,101 @@
       "engines": {
         "node": ">= 0.8"
       }
+    },
+    "node_modules/stream-browserify": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "node_modules/stream-browserify/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/stream-browserify/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/stream-each": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+      "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "node_modules/stream-http": {
+      "version": "2.8.3",
+      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "builtin-status-codes": "^3.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.3.6",
+        "to-arraybuffer": "^1.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "node_modules/stream-http/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/stream-http/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/stream-shift": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+      "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/strict-uri-encode": {
       "version": "1.1.0",
@@ -12372,11 +13708,47 @@
     },
     "node_modules/throttle-debounce": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
       "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==",
-      "dev": true,
       "engines": {
         "node": ">=4"
+      }
+    },
+    "node_modules/through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
+      }
+    },
+    "node_modules/through2/node_modules/readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/through2/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
       }
     },
     "node_modules/thunky": {
@@ -12384,6 +13756,26 @@
       "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz",
       "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
       "dev": true
+    },
+    "node_modules/timers-browserify": {
+      "version": "2.0.12",
+      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
+      "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "setimmediate": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=0.6.0"
+      }
+    },
+    "node_modules/to-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+      "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/to-fast-properties": {
       "version": "2.0.0",
@@ -12524,6 +13916,13 @@
       "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
       "dev": true
     },
+    "node_modules/tty-browserify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+      "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/type-fest": {
       "version": "0.6.0",
       "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz",
@@ -12545,6 +13944,13 @@
       "engines": {
         "node": ">= 0.6"
       }
+    },
+    "node_modules/typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/uglify-js": {
       "version": "3.4.10",
@@ -12777,6 +14183,17 @@
       "deprecated": "Please see https://github.com/lydell/urix#deprecated",
       "dev": true
     },
+    "node_modules/url": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+      "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "punycode": "1.3.2",
+        "querystring": "0.2.0"
+      }
+    },
     "node_modules/url-slug": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/url-slug/-/url-slug-2.0.0.tgz",
@@ -12786,6 +14203,13 @@
         "unidecode": "0.1.8"
       }
     },
+    "node_modules/url/node_modules/punycode": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+      "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/use": {
       "version": "3.1.1",
       "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz",
@@ -12793,6 +14217,16 @@
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
+      }
+    },
+    "node_modules/util": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+      "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "inherits": "2.0.3"
       }
     },
     "node_modules/util-deprecate": {
@@ -12810,6 +14244,13 @@
         "define-properties": "^1.1.2",
         "object.getownpropertydescriptors": "^2.0.3"
       }
+    },
+    "node_modules/util/node_modules/inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/utila": {
       "version": "0.4.0",
@@ -12853,6 +14294,13 @@
       "engines": {
         "node": ">= 0.8"
       }
+    },
+    "node_modules/vm-browserify": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+      "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/vue": {
       "version": "2.7.10",
@@ -13434,6 +14882,16 @@
       "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
       "dev": true
     },
+    "node_modules/worker-farm": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+      "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "errno": "~0.1.7"
+      }
+    },
     "node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -13476,6 +14934,16 @@
         "utf-8-validate": {
           "optional": true
         }
+      }
+    },
+    "node_modules/xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.4"
       }
     },
     "node_modules/y18n": {
@@ -15605,6 +17073,87 @@
       "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
       "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA=="
     },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+      "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.9.0"
+      },
+      "dependencies": {
+        "@webassemblyjs/ast": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+          "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "@webassemblyjs/helper-module-context": "1.9.0",
+            "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+            "@webassemblyjs/wast-parser": "1.9.0"
+          }
+        },
+        "@webassemblyjs/helper-wasm-bytecode": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+          "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
+          "dev": true,
+          "peer": true
+        },
+        "@webassemblyjs/wast-printer": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+          "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "@webassemblyjs/ast": "1.9.0",
+            "@webassemblyjs/wast-parser": "1.9.0",
+            "@xtuc/long": "4.2.2"
+          }
+        }
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+      "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
+      "dev": true,
+      "peer": true
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+      "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0"
+      },
+      "dependencies": {
+        "@webassemblyjs/ast": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+          "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "@webassemblyjs/helper-module-context": "1.9.0",
+            "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+            "@webassemblyjs/wast-parser": "1.9.0"
+          }
+        },
+        "@webassemblyjs/helper-wasm-bytecode": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+          "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
     "@webassemblyjs/helper-numbers": {
       "version": "1.11.1",
       "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
@@ -15703,6 +17252,56 @@
         "@webassemblyjs/utf8": "1.11.1"
       }
     },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
+      "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
+      "dev": true,
+      "peer": 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"
+      },
+      "dependencies": {
+        "@webassemblyjs/ast": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+          "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+          "dev": true,
+          "peer": 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.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+          "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
+          "dev": true,
+          "peer": true
+        },
+        "@webassemblyjs/helper-api-error": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+          "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
+          "dev": true,
+          "peer": true
+        },
+        "@webassemblyjs/helper-wasm-bytecode": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+          "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
     "@webassemblyjs/wast-printer": {
       "version": "1.11.1",
       "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
@@ -15775,6 +17374,14 @@
         "json-schema-traverse": "^0.4.1",
         "uri-js": "^4.2.2"
       }
+    },
+    "ajv-errors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {}
     },
     "ajv-formats": {
       "version": "2.1.1",
@@ -15853,6 +17460,13 @@
         "picomatch": "^2.0.4"
       }
     },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+      "dev": true,
+      "peer": true
+    },
     "arch": {
       "version": "2.2.0",
       "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz",
@@ -15908,6 +17522,58 @@
         "is-string": "^1.0.7"
       }
     },
+    "asn1.js": {
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+      "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+      "dev": true,
+      "peer": 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.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "assert": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "object-assign": "^4.1.1",
+        "util": "0.10.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+          "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==",
+          "dev": true,
+          "peer": true
+        },
+        "util": {
+          "version": "0.10.3",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+          "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "inherits": "2.0.1"
+          }
+        }
+      }
+    },
     "assign-symbols": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz",
@@ -15925,9 +17591,8 @@
     },
     "async-validator": {
       "version": "1.8.5",
-      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz",
+      "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
       "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
-      "dev": true,
       "requires": {
         "babel-runtime": "6.x"
       }
@@ -15974,9 +17639,8 @@
     },
     "babel-helper-vue-jsx-merge-props": {
       "version": "2.0.3",
-      "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
-      "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+      "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
     },
     "babel-loader": {
       "version": "8.2.5",
@@ -16044,9 +17708,8 @@
     },
     "babel-runtime": {
       "version": "6.26.0",
-      "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
       "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
-      "dev": true,
       "requires": {
         "core-js": "^2.4.0",
         "regenerator-runtime": "^0.11.0"
@@ -16054,15 +17717,13 @@
       "dependencies": {
         "core-js": {
           "version": "2.6.12",
-          "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
-          "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
-          "dev": true
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+          "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
         },
         "regenerator-runtime": {
           "version": "0.11.1",
-          "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
-          "dev": true
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
         }
       }
     },
@@ -16126,6 +17787,13 @@
       "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz",
       "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
       "dev": true
+    },
+    "bn.js": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+      "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
+      "dev": true,
+      "peer": true
     },
     "body-parser": {
       "version": "1.20.0",
@@ -16206,6 +17874,101 @@
         "fill-range": "^7.0.1"
       }
     },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
+      "dev": true,
+      "peer": true
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+      "dev": true,
+      "peer": 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.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+      "dev": true,
+      "peer": 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.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+      "dev": true,
+      "peer": 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.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+      "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "bn.js": "^5.0.0",
+        "randombytes": "^2.0.1"
+      }
+    },
+    "browserify-sign": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+      "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+      "dev": true,
+      "peer": 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": {
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "browserify-zlib": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "pako": "~1.0.5"
+      }
+    },
     "browserslist": {
       "version": "4.21.3",
       "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.3.tgz",
@@ -16231,6 +17994,20 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
       "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+    },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+      "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
+      "dev": true,
+      "peer": true
+    },
+    "builtin-status-codes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+      "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
+      "dev": true,
+      "peer": true
     },
     "bytes": {
       "version": "3.0.0",
@@ -16389,6 +18166,17 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
       "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg=="
+    },
+    "cipher-base": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
     },
     "class-utils": {
       "version": "0.3.6",
@@ -16709,11 +18497,59 @@
       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
       "dev": true
     },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
     "connect-history-api-fallback": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
       "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
       "dev": true
+    },
+    "console-browserify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+      "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+      "dev": true,
+      "peer": true
     },
     "consolidate": {
       "version": "0.15.1",
@@ -16723,6 +18559,13 @@
       "requires": {
         "bluebird": "^3.1.1"
       }
+    },
+    "constants-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+      "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
+      "dev": true,
+      "peer": true
     },
     "content-disposition": {
       "version": "0.5.4",
@@ -16767,6 +18610,33 @@
       "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",
       "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
       "dev": true
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+      "dev": true,
+      "peer": 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"
+      },
+      "dependencies": {
+        "rimraf": {
+          "version": "2.7.1",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        }
+      }
     },
     "copy-descriptor": {
       "version": "0.1.1",
@@ -16843,6 +18713,55 @@
         "yaml": "^1.10.0"
       }
     },
+    "create-ecdh": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+      "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.5.3"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "create-hash": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+      "dev": true,
+      "peer": 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.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+      "dev": true,
+      "peer": 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-spawn": {
       "version": "6.0.5",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -16862,6 +18781,26 @@
           "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
           "dev": true
         }
+      }
+    },
+    "crypto-browserify": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+      "dev": true,
+      "peer": 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-declaration-sorter": {
@@ -17057,6 +18996,13 @@
       "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.0.tgz",
       "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
     },
+    "cyclist": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+      "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==",
+      "dev": true,
+      "peer": true
+    },
     "de-indent": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz",
@@ -17081,8 +19027,7 @@
     "deepmerge": {
       "version": "1.5.2",
       "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz",
-      "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==",
-      "dev": true
+      "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
     },
     "default-gateway": {
       "version": "6.0.3",
@@ -17219,6 +19164,17 @@
       "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
       "dev": true
     },
+    "des.js": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+      "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
     "destroy": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
@@ -17230,6 +19186,27 @@
       "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz",
       "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
       "dev": true
+    },
+    "diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+      "dev": true,
+      "peer": 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.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+          "dev": true,
+          "peer": true
+        }
+      }
     },
     "dir-glob": {
       "version": "3.0.1",
@@ -17274,6 +19251,13 @@
         "domhandler": "^4.2.0",
         "entities": "^2.0.0"
       }
+    },
+    "domain-browser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+      "dev": true,
+      "peer": true
     },
     "domelementtype": {
       "version": "2.3.0",
@@ -17335,6 +19319,47 @@
       "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
       "dev": true
     },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
     "easy-stack": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz",
@@ -17353,10 +19378,9 @@
       "integrity": "sha512-e7Wsh4ilaioBZ5bMm6+F4V5c11dh56/5Jwz7Hl5Tu1J7cnB+Pqx5qIF2iC7HPpfyQMqGSvvLP5bBAIDd2gAtGw=="
     },
     "element-ui": {
-      "version": "2.15.9",
-      "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.9.tgz",
-      "integrity": "sha512-dx45nQLt4Hn87/Z9eRr3ex6KFZbxlFAwEU3QoW3wA5EsYftvHTyL9Pq7VnXXD7hu1Eiaup2jcs6kp+/VSFmXuA==",
-      "dev": true,
+      "version": "2.15.8",
+      "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.8.tgz",
+      "integrity": "sha512-N54zxosRFqpYax3APY3GeRmtOZwIls6Z756WM0kdPZ5Q92PIeKHnZgF1StlamIg9bLxP1k+qdhTZvIeQlim09A==",
       "requires": {
         "async-validator": "~1.8.1",
         "babel-helper-vue-jsx-merge-props": "^2.0.0",
@@ -17364,6 +19388,31 @@
         "normalize-wheel": "^1.0.1",
         "resize-observer-polyfill": "^1.5.0",
         "throttle-debounce": "^1.0.1"
+      }
+    },
+    "elliptic": {
+      "version": "6.5.4",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+      "dev": true,
+      "peer": 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.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+          "dev": true,
+          "peer": true
+        }
       }
     },
     "emoji-regex": {
@@ -17407,6 +19456,16 @@
       "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz",
       "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
       "dev": true
+    },
+    "errno": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+      "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "prr": "~1.0.1"
+      }
     },
     "error-ex": {
       "version": "1.3.2",
@@ -17553,6 +19612,17 @@
       "version": "3.3.0",
       "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
       "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
+    },
+    "evp_bytestokey": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
     },
     "execa": {
       "version": "1.0.0",
@@ -17812,6 +19882,13 @@
         "websocket-driver": ">=0.5.1"
       }
     },
+    "figgy-pudding": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
+      "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
+      "dev": true,
+      "peer": true
+    },
     "figures": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz",
@@ -17882,6 +19959,45 @@
         "path-exists": "^4.0.0"
       }
     },
+    "flush-write-stream": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
     "follow-redirects": {
       "version": "1.15.1",
       "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz",
@@ -17930,6 +20046,45 @@
       "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
       "dev": true
     },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
     "fs-extra": {
       "version": "9.1.0",
       "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz",
@@ -17956,6 +20111,47 @@
       "resolved": "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.3.tgz",
       "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
       "dev": true
+    },
+    "fs-write-stream-atomic": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+      "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
     },
     "fs.realpath": {
       "version": "1.0.0",
@@ -18227,11 +20423,43 @@
         }
       }
     },
+    "hash-base": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+      "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "dependencies": {
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
     "hash-sum": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz",
       "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
       "dev": true
+    },
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
     },
     "he": {
       "version": "1.2.0",
@@ -18244,6 +20472,18 @@
       "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz",
       "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
       "dev": true
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
     },
     "hosted-git-info": {
       "version": "2.8.9",
@@ -18456,6 +20696,13 @@
         "micromatch": "^4.0.2"
       }
     },
+    "https-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+      "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
+      "dev": true,
+      "peer": true
+    },
     "human-signals": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz",
@@ -18483,6 +20730,13 @@
       "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",
       "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
       "dev": true
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+      "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==",
+      "dev": true,
+      "peer": true
     },
     "ignore": {
       "version": "5.2.0",
@@ -19193,6 +21447,18 @@
         "object-visit": "^1.0.0"
       }
     },
+    "md5.js": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
     "mdn-data": {
       "version": "2.0.14",
       "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -19212,6 +21478,45 @@
       "dev": true,
       "requires": {
         "fs-monkey": "^1.0.3"
+      }
+    },
+    "memory-fs": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+      "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
       }
     },
     "merge-descriptors": {
@@ -19271,6 +21576,26 @@
       "requires": {
         "braces": "^3.0.2",
         "picomatch": "^2.3.1"
+      }
+    },
+    "miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+          "dev": true,
+          "peer": true
+        }
       }
     },
     "mime": {
@@ -19354,6 +21679,13 @@
       "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
       "dev": true
     },
+    "minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
+      "dev": true,
+      "peer": true
+    },
     "minimatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
@@ -19415,6 +21747,25 @@
         "yallist": "^4.0.0"
       }
     },
+    "mississippi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+      "dev": true,
+      "peer": 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.npmmirror.com/mitt/-/mitt-1.1.2.tgz",
@@ -19456,6 +21807,33 @@
       "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.2.tgz",
       "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==",
       "dev": true
+    },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+      "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==",
+      "dev": true,
+      "peer": 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"
+      },
+      "dependencies": {
+        "rimraf": {
+          "version": "2.7.1",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        }
+      }
     },
     "mrmime": {
       "version": "1.0.1",
@@ -19587,6 +21965,85 @@
       "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
       "dev": true
     },
+    "node-libs-browser": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+      "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+      "dev": true,
+      "peer": 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": {
+        "buffer": {
+          "version": "4.9.2",
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+          "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "base64-js": "^1.0.2",
+            "ieee754": "^1.1.4",
+            "isarray": "^1.0.0"
+          }
+        },
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
+          "dev": true,
+          "peer": true
+        },
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
     "node-releases": {
       "version": "2.0.6",
       "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz",
@@ -19631,9 +22088,8 @@
     },
     "normalize-wheel": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
-      "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
+      "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA=="
     },
     "normalize.css": {
       "version": "8.0.1",
@@ -19871,6 +22327,13 @@
         }
       }
     },
+    "os-browserify": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+      "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
+      "dev": true,
+      "peer": true
+    },
     "p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz",
@@ -19920,6 +22383,53 @@
       "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
       "dev": true
     },
+    "pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+      "dev": true,
+      "peer": true
+    },
+    "parallel-transform": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "cyclist": "^1.0.1",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
     "param-case": {
       "version": "3.0.4",
       "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz",
@@ -19937,6 +22447,20 @@
       "dev": true,
       "requires": {
         "callsites": "^3.0.0"
+      }
+    },
+    "parse-asn1": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+      "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+      "dev": true,
+      "peer": 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": {
@@ -19996,6 +22520,13 @@
       "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
       "dev": true
     },
+    "path-browserify": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+      "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+      "dev": true,
+      "peer": true
+    },
     "path-exists": {
       "version": "4.0.0",
       "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
@@ -20032,6 +22563,20 @@
       "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
       "dev": true
     },
+    "pbkdf2": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+      "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+      "dev": true,
+      "peer": 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"
+      }
+    },
     "picocolors": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
@@ -20041,6 +22586,13 @@
       "version": "2.3.1",
       "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+    },
+    "pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+      "dev": true,
+      "peer": true
     },
     "pkg-dir": {
       "version": "4.2.0",
@@ -20565,6 +23117,13 @@
         "renderkid": "^3.0.0"
       }
     },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+      "dev": true,
+      "peer": true
+    },
     "process-nextick-args": {
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -20658,11 +23217,42 @@
         }
       }
     },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+      "dev": true,
+      "peer": true
+    },
     "pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",
       "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
       "dev": true
+    },
+    "public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+      "dev": true,
+      "peer": 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.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+          "dev": true,
+          "peer": true
+        }
+      }
     },
     "pump": {
       "version": "3.0.0",
@@ -20672,6 +23262,31 @@
       "requires": {
         "end-of-stream": "^1.1.0",
         "once": "^1.3.1"
+      }
+    },
+    "pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
+      },
+      "dependencies": {
+        "pump": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        }
       }
     },
     "punycode": {
@@ -20698,6 +23313,20 @@
         "strict-uri-encode": "^1.0.0"
       }
     },
+    "querystring": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+      "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
+      "dev": true,
+      "peer": true
+    },
+    "querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+      "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
+      "dev": true,
+      "peer": true
+    },
     "queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -20709,6 +23338,17 @@
       "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
       "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
       "requires": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "randomfill": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "randombytes": "^2.0.5",
         "safe-buffer": "^5.1.0"
       }
     },
@@ -20948,9 +23588,8 @@
     },
     "resize-observer-polyfill": {
       "version": "1.5.1",
-      "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
-      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
     },
     "resolve": {
       "version": "1.22.1",
@@ -21012,6 +23651,17 @@
         "glob": "^7.1.3"
       }
     },
+    "ripemd160": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
+    },
     "run-parallel": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -21019,6 +23669,16 @@
       "dev": true,
       "requires": {
         "queue-microtask": "^1.2.2"
+      }
+    },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+      "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "aproba": "^1.1.1"
       }
     },
     "safe-buffer": {
@@ -21238,11 +23898,29 @@
         "split-string": "^3.0.1"
       }
     },
+    "setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+      "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+      "dev": true,
+      "peer": true
+    },
     "setprototypeof": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
       "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
       "dev": true
+    },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
     },
     "shallow-clone": {
       "version": "3.0.1",
@@ -21692,6 +24370,105 @@
       "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
       "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
       "dev": true
+    },
+    "stream-browserify": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "stream-each": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+      "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "stream-http": {
+      "version": "2.8.3",
+      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+      "dev": true,
+      "peer": 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"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "stream-shift": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+      "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
+      "dev": true,
+      "peer": true
     },
     "strict-uri-encode": {
       "version": "1.1.0",
@@ -22892,15 +25669,70 @@
     },
     "throttle-debounce": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
-      "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
+      "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
+    },
+    "through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
     },
     "thunky": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz",
       "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
       "dev": true
+    },
+    "timers-browserify": {
+      "version": "2.0.12",
+      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
+      "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "setimmediate": "^1.0.4"
+      }
+    },
+    "to-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+      "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
+      "dev": true,
+      "peer": true
     },
     "to-fast-properties": {
       "version": "2.0.0",
@@ -23015,6 +25847,13 @@
       "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
       "dev": true
     },
+    "tty-browserify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+      "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==",
+      "dev": true,
+      "peer": true
+    },
     "type-fest": {
       "version": "0.6.0",
       "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz",
@@ -23030,6 +25869,13 @@
         "media-typer": "0.3.0",
         "mime-types": "~2.1.24"
       }
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+      "dev": true,
+      "peer": true
     },
     "uglify-js": {
       "version": "3.4.10",
@@ -23206,6 +26052,26 @@
       "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
       "dev": true
     },
+    "url": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+      "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "punycode": "1.3.2",
+        "querystring": "0.2.0"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+          "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
     "url-slug": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/url-slug/-/url-slug-2.0.0.tgz",
@@ -23220,6 +26086,25 @@
       "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz",
       "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
       "dev": true
+    },
+    "util": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+      "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "inherits": "2.0.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+          "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+          "dev": true,
+          "peer": true
+        }
+      }
     },
     "util-deprecate": {
       "version": "1.0.2",
@@ -23270,6 +26155,13 @@
       "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
       "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
       "dev": true
+    },
+    "vm-browserify": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+      "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+      "dev": true,
+      "peer": true
     },
     "vue": {
       "version": "2.7.10",
@@ -23715,6 +26607,16 @@
       "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
       "dev": true
     },
+    "worker-farm": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+      "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "errno": "~0.1.7"
+      }
+    },
     "wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -23739,6 +26641,13 @@
       "dev": true,
       "requires": {}
     },
+    "xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "dev": true,
+      "peer": true
+    },
     "y18n": {
       "version": "5.0.8",
       "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
diff --git a/package.json b/package.json
index 20cef07..107c5dc 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
     "@amap/amap-jsapi-loader": "^1.0.1",
     "axios": "^0.27.2",
     "core-js": "^3.8.3",
+    
     "normalize.css": "^8.0.1",
     "sass": "^1.54.8",
     "sass-loader": "^13.0.2",
@@ -27,7 +28,7 @@
     "@vue/cli-service": "~5.0.0",
     "chalk": "4.1.0",
     "compression-webpack-plugin": "5.0.2",
-    "element-ui": "^2.15.9",
+    "element-ui": "^2.15.8",
     "svg-sprite-loader": "5.1.1",
     "vue-template-compiler": "^2.6.14"
   },
diff --git a/src/views/layout/components/Footer/index.vue b/src/components/Footer/index.vue
similarity index 89%
rename from src/views/layout/components/Footer/index.vue
rename to src/components/Footer/index.vue
index 430dfba..6bb5b30 100644
--- a/src/views/layout/components/Footer/index.vue
+++ b/src/components/Footer/index.vue
@@ -12,13 +12,12 @@
 <style lang="scss">
   .el-footer{
     padding: 0;
-    margin-top: 60px;
     height: 100px;
     display: flex;
     flex-direction: column;
     justify-content: center;
     align-items: center;
-    background-color:#f0f2f5;
+    // background-color:#f0f2f5;
     div{
       line-height: 24px;
       font-size: 12px;
diff --git a/src/router/index.js b/src/router/index.js
index 1708063..f54e285 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -63,6 +63,23 @@
             path: 'baseSetting',
             name: 'baseSetting',
             component: () => import('@/views/operate/baseSetting'),
+            children: [
+              {
+                path: "violation",
+                name: 'violation',
+                component: () => import('@/views/operate/baseSetting/violation'),
+              },
+              {
+                path: "illegalBuild",
+                name: 'illegalBuild',
+                component: () => import('@/views/operate/baseSetting/illegalBuild'),
+              },
+              {
+                path: "threepack",
+                name: 'threepack',
+                component: () => import('@/views/operate/baseSetting/threepack'),
+              }
+            ]
           },
           {
             path: 'casepool',
@@ -100,6 +117,38 @@
                 path: "shop",
                 name: 'shop',
                 component: () => import('@/views/operate/fivepack/shop'),
+              },
+              {
+                path: "threepackage",
+                name: 'threepackage',
+                component: () => import('@/views/operate/fivepack/threepack'),
+              }
+            ]
+          },
+          {
+            path: 'myWait',
+            name: 'myWait',
+            component: () => import('@/views/operate/myWait'),
+          },
+          {
+            path: 'rectification',
+            name: 'rectification',
+            component: () => import('@/views/operate/rectification'),
+            children:[
+              {
+                path:"taskList",
+                name:'taskList',
+                component: () => import('@/views/operate/rectification/taskList'),
+              },
+              {
+                path:"surveyList",
+                name:'surveyList',
+                component: () => import('@/views/operate/rectification/surveyList'),
+              },
+              {
+                path:"renovationList",
+                name:'renovationList',
+                component: () => import('@/views/operate/rectification/renovationList'),
               }
             ]
           }
@@ -152,6 +201,11 @@
     name: "/fail",
     component: () => import('@/views/info/Fail'),
   },
+  {
+    path: '/success',
+    name: "/success",
+    component: () => import('@/views/info/Success'),
+  },
   { path: '*', redirect: '/404' }
 ]
 
diff --git a/src/views/info/Fail/index.vue b/src/views/info/Fail/index.vue
index 5a0b76c..b85a602 100644
--- a/src/views/info/Fail/index.vue
+++ b/src/views/info/Fail/index.vue
@@ -1,38 +1,151 @@
 <template>
     <div class="fail">
-        <header>
-            <div class="header-img">
-                <img src="https://axure-file.lanhuapp.com/90466432-c999-4bf0-80b8-ee3f96a2099e__fe57e10f2714b3e5e553a2c6469510de.png"
-                    alt="">
+        <el-main>
+            <div class="main-header">
+                <div class="img">
+                    X
+                </div>
+                <div class="header-title">
+                    <span>鎻愪氦澶辫触</span>
+                </div>
+                <div class="header-tip">
+                    <span>璇锋牳瀵瑰苟淇敼浠ヤ笅淇℃伅锛屽啀閲嶆柊鎻愪氦</span>
+                </div>
             </div>
-            <div class="header-tip">
-                <span>璇锋牳瀵瑰苟淇敼浠ヤ笅淇℃伅锛屽啀閲嶆柊鎻愪氦</span>
+            <div class="main-content">
+                <h4>鎮ㄦ彁浜ょ殑鍐呭鏈夊涓嬮敊璇�:</h4>
+                <div class="main-tip">
+                    <div class="img">
+                        X
+                    </div>
+                    <span>鎮ㄧ殑璐︽埛宸茶鍐荤粨</span>
+                    <el-link>绔嬪嵆瑙e喕<i class="el-icon-arrow-right"></i></el-link>
+                </div>
+                <div class="main-tip">
+                    <div class="img">
+                        X
+                    </div>
+                    <span>鎮ㄧ殑璐︽埛杩樹笉鍏峰鐢宠璧勬牸</span>
+                    <el-link>绔嬪嵆鍗囩骇<i class="el-icon-arrow-right"></i></el-link>
+                </div>
             </div>
-        </header>
-        <main>
-            <h4>鎮ㄦ彁浜ょ殑鍐呭鏈夊涓嬮敊璇�:</h4>
-            <div class="main-tip">
-                <img src="https://axure-file.lanhuapp.com/90466432-c999-4bf0-80b8-ee3f96a2099e__fe57e10f2714b3e5e553a2c6469510de.png"
-                    alt="">
-                <span>鎮ㄧ殑璐︽埛宸茶鍐荤粨</span>
-                <el-link>绔嬪嵆瑙e喕</el-link>
+            <div class="main-footer">
+                <el-button type="primary">杩斿洖淇敼</el-button>
             </div>
-            <div class="main-tip">
-                <img src="https://axure-file.lanhuapp.com/90466432-c999-4bf0-80b8-ee3f96a2099e__fe57e10f2714b3e5e553a2c6469510de.png"
-                    alt="">
-                <span>鎮ㄧ殑璐︽埛杩樹笉鍏峰鐢宠璧勬牸</span>
-                <el-link>绔嬪嵆鍗囩骇</el-link>
-            </div>
-        </main>
-        <footer>
-            <el-button type="primary">杩斿洖淇敼</el-button>
-        </footer>
+        </el-main>
+        <el-footer>
+            <myFooter></myFooter>
+        </el-footer>
     </div>
 </template>
+<script>
+    import myFooter from '@/components/Footer'
+    export default {
+        components:{
+            myFooter,
+        },
+        data(){
+            return{
+
+            }
+        },
+    }
+</script>
 <style lang="scss" scoped>
-    .fail{
+.fail {
+    min-width: 960px;
+    height: 100vh;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+
+    .img {
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        border-radius: 50%;
+    }
+
+    .el-main {
         display: flex;
         flex-direction: column;
+        justify-content: center;
         align-items: center;
+        .main-header {
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            .img {
+                font-size: 50px;
+                width: 80px;
+                height: 80px;
+                background-color: #f95e5a;
+                color: #fff;
+            }
+
+            .header-title {
+                line-height: 60px;
+                font-weight: 650;
+                font-size: 24px;
+                color: #666;
+            }
+
+            .header-tip {
+                color: #b39999;
+            }
+        }
+
+        .main-content {
+            margin-top: 20px;
+            margin-left: -400px;
+            h4 {
+                color: #666;
+            }
+
+            .main-tip {
+                display: flex;
+                align-items: center;
+                line-height: 30px;
+
+                .img {
+                    width: 14px;
+                    height: 14px;
+                    font-size: 10px;
+                    border: 2px solid #f95e5a;
+                    color: #f95e5a;
+                    font-weight: 650;
+                }
+
+                span {
+                    margin-left: 5px;
+                    color: #666666;
+                }
+
+                .el-link {
+                    margin-left: 20px;
+                    color: #0079fe;
+                    font-weight: 650;
+
+                    i {
+                        font-weight: 650;
+                    }
+                }
+            }
+        }
+
+        .main-footer {
+            margin-top: 60px;
+
+            .el-button {
+                width: 140px;
+                height: 40px;
+                background-color: #0079fe;
+
+                &:hover {
+                    background-color: rgba(0, 121, 254, 0.7);
+                }
+            }
+        }
     }
+}
 </style>
\ No newline at end of file
diff --git a/src/views/info/Success/index.vue b/src/views/info/Success/index.vue
new file mode 100644
index 0000000..8a40ecf
--- /dev/null
+++ b/src/views/info/Success/index.vue
@@ -0,0 +1,153 @@
+<template>
+    <div class="success">
+        <el-main>
+            <div class="main-header">
+                <div class="img">
+                    <i class="el-icon-check"></i>
+                </div>
+                <div class="title">
+                    鎴愬姛鐘舵�佹彁绀�
+                </div>
+                <div class="desc">
+                    鎻愪氦缁撴灉椤电敤浜庡弽棣堜竴绯诲垪鎿嶄綔浠诲姟鐨勫鐞嗙粨鏋滐紝 濡傛灉浠呮槸绠�鍗曟搷浣滐紝浣跨敤Message鍏ㄥ眬鎻愮ず鍙嶉鍗冲彲銆� 鏈枃瀛楀尯鍩熷彲浠ュ睍绀虹畝鍗曠殑琛ュ厖璇存槑锛屽鏋滄湁绫讳技灞曠ず
+                    鈥滆繘搴︽楠も�濈殑闇�姹傦紝涓嬮潰鍖哄煙鍙互鍛堢幇姣旇緝澶嶆潅鐨勫唴瀹广��
+                </div>
+            </div>
+            <div class="main-content">
+                <ul>
+                    <li class="line">
+                        <img class="bk" src="https://axure-file.lanhuapp.com/90466432-c999-4bf0-80b8-ee3f96a2099e__0195d41ff520c1294771b19745fe7420.svg"
+                            alt="">
+                        <img class="progress" src="https://axure-file.lanhuapp.com/90466432-c999-4bf0-80b8-ee3f96a2099e__cdbfe46ec0bc139894307fca0f50f457.svg"
+                            alt="">
+                        <img class="default-circle" src="https://axure-file.lanhuapp.com/90466432-c999-4bf0-80b8-ee3f96a2099e__7a34b7e2d893b3dd0444434c1a99c387.svg"
+                            alt="">
+                        <img class="default-circle circle2" src="https://axure-file.lanhuapp.com/90466432-c999-4bf0-80b8-ee3f96a2099e__7a34b7e2d893b3dd0444434c1a99c387.svg"
+                            alt="">
+                    </li>
+                </ul>
+            </div>
+            <div class="main-footer">
+                <el-button type="primary">杩斿洖</el-button>
+                <el-button class="look">鏌ョ湅椤圭洰</el-button>
+            </div>
+        </el-main>
+        <el-footer>
+            <myFooter />
+        </el-footer>
+    </div>
+</template>
+<script>
+import myFooter from '@/components/Footer'
+export default {
+    components: {
+        myFooter
+    },
+    data() {
+
+    },
+
+}
+</script>
+<style lang="scss" scoped>
+.success {
+    height: 100vh;
+    min-width: 960px;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+
+    .el-main {
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        align-items: center;
+
+        .main-header {
+            display: flex;
+            flex-direction: column;
+            justify-content: center;
+            align-items: center;
+
+            .img {
+                background-color: #4bd863;
+                width: 80px;
+                height: 80px;
+                display: flex;
+                align-items: center;
+                justify-content: center;
+                color: #fff;
+                font-size: 70px;
+                border-radius: 50%;
+            }
+
+            .title {
+                color: #666666;
+                font-weight: 650;
+                font-size: 24px;
+                line-height: 60px;
+            }
+
+            .desc {
+                width: 742px;
+                font-size: 14px;
+                color: #999;
+            }
+        }
+
+        .main-content {
+            width: 100%;
+            ul{
+                list-style: none;
+            }
+            .line{
+                position: relative;
+                
+                .bk{
+                    position: absolute;
+                    top: 0;
+                    left: 0;
+                }
+                .progress{
+                    position: absolute;
+                    top: 0;
+                    left: 0;
+                }
+                .default-circle{
+                    position: absolute;
+                    left: 0;
+                    top: -4px;
+                }
+                .circle2{
+                    left: 100px;
+                }
+            }
+        }
+
+        .main-footer {
+            margin-top: 60px;
+
+            .el-button {
+                width: 140px;
+                height: 40px;
+                background-color: #0079fe;
+
+                &:hover {
+                    background-color: rgba(0, 121, 254, 0.7);
+                }
+            }
+
+            .look {
+                background-color: #fff;
+                border: 1px solid rgba(0, 121, 254, 1);
+                color: #0079fe;
+
+                &:hover {
+                    color: #3394fe;
+                    background-color: #fff;
+                }
+            }
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/layout/components/Main/index.vue b/src/views/layout/components/Main/index.vue
index 3de4d9c..1bf7ce1 100644
--- a/src/views/layout/components/Main/index.vue
+++ b/src/views/layout/components/Main/index.vue
@@ -10,12 +10,12 @@
 </template>
 
 <script>
-import MyFooter from "../Footer"
+// import MyFooter from "../Footer"
 import NavBar from "../NavBar"
 export default {
   name: "Main",
   components: {
-    MyFooter,
+    // MyFooter,
     NavBar
   }
 };
diff --git a/src/views/layout/components/Menu/index.vue b/src/views/layout/components/Menu/index.vue
index c7409da..6588ba7 100644
--- a/src/views/layout/components/Menu/index.vue
+++ b/src/views/layout/components/Menu/index.vue
@@ -5,12 +5,12 @@
       <h2 class="siderbar-title">閬傛槍鎵ф硶骞冲彴</h2>
       <el-scrollbar>
         <!-- 璺敱 -->
-        <el-menu router class="el-menu-vertical" :default-active="$route.path" >
+        <el-menu router class="el-menu-vertical" :default-active="$route.path">
           <!-- 绯荤粺璁剧疆妯″潡 -->
           <el-submenu index="/home/system" class="firstMenu">
-            <template slot="title" class="firstSpan">
+            <template slot="title">
               <!-- <i class="el-icon-reading"></i> -->
-              <span  slot="prefix" class="icon-padding fisrtSpan">
+              <span slot="prefix" class="icon-padding fisrtSpan">
                 <svg-icon icon-class="system"></svg-icon>
               </span>
               <span class="fisrtSpan">绯荤粺璁剧疆</span>
@@ -71,8 +71,15 @@
               </span>
               <span class="fisrtSpan">杩愯惀绠$悊</span>
             </template>
-            <el-menu-item index="/home/operate/baseSetting">鍩虹璁剧疆</el-menu-item>
-            <el-submenu index="/home/operate/disposal">
+            <el-submenu index="/home/operate/baseSetting" class="secondMenu">
+              <template slot="title">
+                <span class="secondSpan">鍩虹璁剧疆</span>
+              </template>
+              <el-menu-item index="/home/operate/baseSetting/violation">杩濊浜嬮」璁剧疆</el-menu-item>
+              <el-menu-item index="/home/operate/baseSetting/illegalBuild">杩濆缓浜嬮」璁剧疆</el-menu-item>
+              <el-menu-item index="/home/operate/baseSetting/threepack">闂ㄥ墠涓夊寘璁剧疆</el-menu-item>
+            </el-submenu>
+            <el-submenu index="/home/operate/disposal" class="secondMenu">
               <template slot="title">
                 <span class="secondSpan">浜嬮」澶勭悊绠$悊</span>
               </template>
@@ -83,18 +90,25 @@
               <el-menu-item index="/home/operate/casepool/notDeal">鏆備笉澶勭悊</el-menu-item>
             </el-submenu>
             <el-menu-item index="/home/operate/myWait">鎴戠殑寰呭姙</el-menu-item>
-            <el-menu-item index="/home/operate/rectification">涓撻」鏁存不</el-menu-item>
-            <el-menu-item index="/home/operate/">宸℃煡鎵ф硶</el-menu-item>
-            <el-menu-item index="/home/operate/">妗堝嵎鏌ヨ</el-menu-item>
-            <el-submenu index="/home/operate/fivepack">
+            <el-submenu index="/home/operate/rectification" class="secondMenu">
+              <template slot="title">
+                <span class="secondSpan">涓撻」鏁存不</span>
+              </template>
+                <el-menu-item index="/home/operate/rectification/taskList">浠诲姟鍒楄〃</el-menu-item>
+                <el-menu-item index="/home/operate/rectification/surveyList">鏅煡鍒楄〃</el-menu-item>
+                <el-menu-item index="/home/operate/rectification/renovationList">鏁存不鍒楄〃</el-menu-item>  
+            </el-submenu>
+            <el-menu-item index="/home/operate/dasd">宸℃煡鎵ф硶</el-menu-item>
+            <el-menu-item index="/home/operate/dasds">妗堝嵎鏌ヨ</el-menu-item>
+            <el-submenu index="/home/operate/fivepack" class="secondMenu">
               <template slot="title">
                 <span class="secondSpan">闂ㄥ墠浜斿寘澶勭疆绠$悊</span>
               </template>
-              <el-menu-item index="/home/operate/thirdpack">闂ㄥ墠涓夊寘</el-menu-item>
+              <el-menu-item index="/home/operate/fivepack/threepackage">闂ㄥ墠涓夊寘</el-menu-item>
               <el-menu-item index="/home/operate/fivepack/shop">搴楅摵绠$悊</el-menu-item>
             </el-submenu>
-            <el-menu-item index="/home/operate/">绠楁硶妯″瀷绠$悊</el-menu-item>
-            <el-menu-item index="/home/operate/">杞﹁締绠$悊</el-menu-item>
+            <el-menu-item index="/home/operate/dasdas">绠楁硶妯″瀷绠$悊</el-menu-item>
+            <el-menu-item index="/home/operate/dasdas">杞﹁締绠$悊</el-menu-item>
             <el-menu-item index="/home/operate">鍥剧墖绠$悊</el-menu-item>
             <el-menu-item index="/home/operate">瑙嗛绠$悊</el-menu-item>
             <el-menu-item index="/home/operate">娑堟伅绠$悊</el-menu-item>
@@ -183,12 +197,14 @@
 .icon-padding {
   padding-right: 10px;
 }
+
 .el-aside {
   background: #07162e;
   color: #e9eef3;
   text-align: center;
   box-sizing: border-box;
   position: relative;
+
   //    鍥哄畾鏍囬
   .siderbar-title {
     position: fixed;
@@ -200,50 +216,71 @@
     top: 0;
     left: 0;
     z-index: 999;
-    // box-shadow: 0 -5px 5px #0ff inset;
   }
+
   .el-scrollbar {
     height: calc(100vh - 66px);
     margin-top: 66px;
     box-sizing: border-box;
+
     .el-menu {
       background: linear-gradient(#07162e, #0f2b56);
       border: 0;
+
       .firstMenu {
         background: #07162e;
         text-align: left;
-        &:hover .fisrtSpan{
+        &:hover>.el-submenu__title{
+          background-color: #092c4a;
+        }
+        &:hover .fisrtSpan {
           color: #22d3eb;
         }
-        span,span {
+
+        span,
+        span {
           color: #e9eef3;
         }
+
         .el-menu-item {
           color: #e9eef3;
           background-color: #07162e;
-          &:hover {
-            color: #22d3eb;
-          }
         }
+
+        .el-menu-item:hover {
+          background-color: #092c4a;
+          color: #22d3eb;
+        }
+
         .is-active {
           background-color: #07162e;
           color: #22d3eb;
         }
       }
-      .secondMenu{
-        &:hover .secondSpan{
+
+      .secondMenu {
+        &:hover>.el-submenu__title{
+          background-color: #092c4a;
+        }
+        &:hover .secondSpan {
           color: #22d3eb;
         }
       }
-      .thirdMenu{
-        &:hover .thirdSpan{
+
+      .thirdMenu {
+        &:hover>.el-submenu__title{
+          background-color: #092c4a;
+        }
+        &:hover .thirdSpan {
           color: #22d3eb;
         }
       }
+
       .is-active {
         background-color: #092c4a;
       }
     }
+
     .el-scrollbar__wrap {
       overflow-x: hidden;
     }
diff --git a/src/views/layout/index.vue b/src/views/layout/index.vue
index 3fc3602..1a11f8c 100644
--- a/src/views/layout/index.vue
+++ b/src/views/layout/index.vue
@@ -38,6 +38,7 @@
 .content{
   display: flex;
   flex-direction: column;
+  height: 100%;
 }
 
 .el-main {
diff --git a/src/views/operate/baseSetting/illegalBuild/components/createInterface/index.vue b/src/views/operate/baseSetting/illegalBuild/components/createInterface/index.vue
new file mode 100644
index 0000000..1be774b
--- /dev/null
+++ b/src/views/operate/baseSetting/illegalBuild/components/createInterface/index.vue
@@ -0,0 +1,260 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+    },
+    methods: {
+        handleUser() {
+            const { myInterface } = this;
+            this.$axios.post('sccg/system/portal/thirdApp/add', {
+                websiteUrl:myInterface.websiteUrl,
+                applicationIconUrl:myInterface.applicationIconUrl,
+                applicationType:0,
+                description:myInterface.description,
+                applicationName:myInterface.applicationName
+            }).then(res => {
+                console.log(res);
+                // if (res.code === 200) {
+                //     this.refresh();
+                // }
+            })
+        },
+    },
+    props: ['refresh']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                margin-top: 30px;
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/baseSetting/illegalBuild/components/viewInterface/index.vue b/src/views/operate/baseSetting/illegalBuild/components/viewInterface/index.vue
new file mode 100644
index 0000000..6b28ebb
--- /dev/null
+++ b/src/views/operate/baseSetting/illegalBuild/components/viewInterface/index.vue
@@ -0,0 +1,246 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <!-- <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item> -->
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+        const {userInfo} = this;
+        this.myInterface = JSON.parse(JSON.stringify(userInfo));
+    },
+    methods: {
+    },
+    props: ['updateFlag','userInfo']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/baseSetting/illegalBuild/index.vue b/src/views/operate/baseSetting/illegalBuild/index.vue
new file mode 100644
index 0000000..e609a53
--- /dev/null
+++ b/src/views/operate/baseSetting/illegalBuild/index.vue
@@ -0,0 +1,246 @@
+<template>
+    <div class="otherInterface">
+        <header>
+            <div class="headerTitle">杩愯惀绠$悊 >> 鍩虹璁剧疆 > 杩濆缓浜嬮」璁剧疆</div>
+        </header>
+        <main>
+            <div class="mainHeader">
+                <span>绛涢�夋潯浠�:</span>
+                <el-input placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+            </div>
+            <div class="mainContent">
+                <!-- @selection-change="handleSelectionChange" -->
+                <!-- 鏁版嵁娓叉煋 -->
+                <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
+                    :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}"
+                    :row-class-name="tableRowClassName">
+                    <el-table-column type="selection" width="55">
+                    </el-table-column>
+                    <el-table-column label="缂栧彿" prop="applicationName" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="鎵�灞炵被鍨�" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="websiteUrl" label="鎵�灞炵被鍒�" min-width="20">
+                    </el-table-column>
+                    <el-table-column label="鎿嶄綔" min-width="10">
+                        <template slot-scope="scope">
+                            <span @click="handleView(scope.row)">鏌ョ湅</span>
+                            <span class="line">|</span>
+                            <span @click="handleDelete(scope.row)">鍒犻櫎</span>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <!-- 鍒嗛〉 -->
+                <!-- <div class="pagination">
+                    <el-pagination background :current-page="currentPage" layout="prev, pager, next" :total="totalNum"
+                        :page-size="pageSize" @current-change="changeCurrentPage" @prev-click="handlePrev"
+                        @next-click="handleNext">
+                    </el-pagination>
+                </div> -->
+            </div>
+        </main>
+        <footer>
+            <!-- 鍒涘缓寮圭獥 -->
+            <el-dialog :visible.sync="dialogCreate" title="鏂板绗笁鏂规帴鍙�" width="45%" v-if="dialogCreate"
+                :before-close="handleClose">
+                <createInterface />
+            </el-dialog>
+            <!-- 鏌ョ湅寮圭獥 -->
+            <el-dialog :visible.sync="dialogUpdate" :title="updateFlag ?'淇敼绗笁鏂规帴鍙�':'鏌ョ湅绗笁鏂规帴鍙�'" width="45%"
+                v-if="dialogUpdate" :before-close="handleClose">
+                <viewInterface :updateFlag="updateFlag" :userInfo=userInfo />
+            </el-dialog>
+        </footer>
+    </div>
+</template>
+<script>
+import createInterface from './components/createInterface';
+import viewInterface from './components/viewInterface'
+export default {
+    components: {
+        createInterface, viewInterface
+    },
+    data() {
+        return {
+            tableData: [],
+            search: "",
+            dialogCreate: false,
+            dialogUpdate: false,
+            updateFlag: false,
+            userInfo: '',
+            // totalNum: 200,
+            // pageSize: 10,
+            // currentPage: 1,
+        }
+    },
+    created() {
+        this.getUserList();
+    },
+    methods: {
+        // 鑾峰彇鎺ュ彛鍒楄〃
+        getUserList() {
+            const that = this;
+            // const { currentPage, pageSize, search } = this;
+            this.dialogCreate = false;
+            this.$axios.get("sccg/system/portal/thirdApp/search").then(res => {
+                const { code, data } = res;
+                if (code == 200) {
+                    this.tableData = data;
+                }
+            })
+        },
+        // 璁剧疆琛ㄦ牸鏂戦┈绾�
+        tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 == 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+            return '';
+        },
+        // 鎵撳紑鏂板鐣岄潰
+        handleAdd() {
+            this.dialogCreate = true;
+        },
+        // 鍒涘缓寮圭獥鍏抽棴
+        handleClose(done) {
+            const that = this;
+            this.$confirm('纭鍏抽棴锛�')
+                .then(_ => {
+                    that.dialogCreate = false;
+                    done();
+                })
+                .catch(_ => { });
+        },
+        // 鍒涘缓鏌ョ湅寮圭獥
+        handleView(rowData) {
+            this.userInfo = rowData;
+            this.dialogUpdate = true;
+        },
+        // 鍒犻櫎绗笁鏂规帴鍙�
+        handleDelete({ id }) {
+            console.log(id);
+            this.$axios.delete('sccg/system/portal/thirdApp/delete', {
+                params: {
+                    id
+                }
+            }).then(res => {
+                console.log(res);
+            })
+        }
+        // // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+        // changeCurrentPage(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓婁竴椤电偣鍑讳簨浠�
+        // handlePrev(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓嬩竴椤电偣鍑讳簨浠�
+        // handleNext(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+    }
+}
+</script>
+<!-- sccg/system/portal/thirdApp/search -->
+<style lang="scss" scoped>
+.otherInterface {
+    header {
+        display: flex;
+        line-height: 60px;
+        justify-content: space-between;
+        padding: 0 20px;
+        color: #4b9bb7;
+        &::v-deep .el-button {
+            background-color: #eb5d01;
+            border: none;
+            color: #fff;
+            border-radius: 20px;
+        }
+    }
+
+    main {
+        padding: 10px 20px;
+
+        .mainHeader {
+            padding-left: 20px;
+            display: flex;
+            line-height: 60px;
+            color: #4b9bb7;
+            background-color: #09152f;
+            .el-input {
+                width: 180px;
+                height: 35px;
+                margin-left: 10px;
+
+                &::v-deep .el-input__inner {
+                    background-color: #09152f;
+                    border: 1px solid #17324c;
+                }
+            }
+        }
+
+        .mainContent {
+            margin-top: 20px;
+            .el-table {
+                color: #4b9bb7;
+
+                &::v-deep .el-table__empty-block {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .el-table__empty-text {
+                    color: #4b9bb7;
+                }
+
+                &::v-deep .warning-row {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .success-row {
+                    background-color: #071f39;
+                }
+            }
+
+            .line {
+                padding: 0 5px;
+                // margin-top: -10px;
+            }
+        }
+    }
+
+    footer {
+
+        &::v-deep .el-dialog__header,
+        &::v-deep .el-dialog__body {
+            background-color: #06122c;
+        }
+
+        &::v-deep .el-dialog__header {
+            display: flex;
+            align-items: center;
+            background-color: #fff;
+            padding: 20px;
+            line-height: 60px;
+        }
+
+        &::v-deep .el-dialog__title {
+            color: #4b9bb7;
+        }
+
+        &::v-deep .el-dialog__close {
+            width: 20px;
+            height: 20px;
+            // color: #fff;
+        }
+
+        &::v-deep .el-dialog__body {
+            padding: 0;
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/baseSetting/index.vue b/src/views/operate/baseSetting/index.vue
index b1fb700..46bfe3b 100644
--- a/src/views/operate/baseSetting/index.vue
+++ b/src/views/operate/baseSetting/index.vue
@@ -1,7 +1,5 @@
 <template>
-    <div class="baseSetting">
-        1
-    </div>
+    <router-view></router-view>
 </template>
 <script>
     export default {
diff --git a/src/views/operate/baseSetting/threepack/components/createInterface/index.vue b/src/views/operate/baseSetting/threepack/components/createInterface/index.vue
new file mode 100644
index 0000000..1be774b
--- /dev/null
+++ b/src/views/operate/baseSetting/threepack/components/createInterface/index.vue
@@ -0,0 +1,260 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+    },
+    methods: {
+        handleUser() {
+            const { myInterface } = this;
+            this.$axios.post('sccg/system/portal/thirdApp/add', {
+                websiteUrl:myInterface.websiteUrl,
+                applicationIconUrl:myInterface.applicationIconUrl,
+                applicationType:0,
+                description:myInterface.description,
+                applicationName:myInterface.applicationName
+            }).then(res => {
+                console.log(res);
+                // if (res.code === 200) {
+                //     this.refresh();
+                // }
+            })
+        },
+    },
+    props: ['refresh']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                margin-top: 30px;
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/baseSetting/threepack/components/viewInterface/index.vue b/src/views/operate/baseSetting/threepack/components/viewInterface/index.vue
new file mode 100644
index 0000000..6b28ebb
--- /dev/null
+++ b/src/views/operate/baseSetting/threepack/components/viewInterface/index.vue
@@ -0,0 +1,246 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <!-- <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item> -->
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+        const {userInfo} = this;
+        this.myInterface = JSON.parse(JSON.stringify(userInfo));
+    },
+    methods: {
+    },
+    props: ['updateFlag','userInfo']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/baseSetting/threepack/index.vue b/src/views/operate/baseSetting/threepack/index.vue
new file mode 100644
index 0000000..2dd231f
--- /dev/null
+++ b/src/views/operate/baseSetting/threepack/index.vue
@@ -0,0 +1,246 @@
+<template>
+    <div class="otherInterface">
+        <header>
+            <div class="headerTitle">杩愯惀绠$悊 >> 鍩虹璁剧疆 > 闂ㄥ墠涓夊寘璁剧疆</div>
+        </header>
+        <main>
+            <div class="mainHeader">
+                <span>绛涢�夋潯浠�:</span>
+                <el-input placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+            </div>
+            <div class="mainContent">
+                <!-- @selection-change="handleSelectionChange" -->
+                <!-- 鏁版嵁娓叉煋 -->
+                <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
+                    :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}"
+                    :row-class-name="tableRowClassName">
+                    <el-table-column type="selection" width="55">
+                    </el-table-column>
+                    <el-table-column label="缂栧彿" prop="applicationName" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="鎵�灞炵被鍨�" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="websiteUrl" label="鎵�灞炵被鍒�" min-width="20">
+                    </el-table-column>
+                    <el-table-column label="鎿嶄綔" min-width="10">
+                        <template slot-scope="scope">
+                            <span @click="handleView(scope.row)">鏌ョ湅</span>
+                            <span class="line">|</span>
+                            <span @click="handleDelete(scope.row)">鍒犻櫎</span>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <!-- 鍒嗛〉 -->
+                <!-- <div class="pagination">
+                    <el-pagination background :current-page="currentPage" layout="prev, pager, next" :total="totalNum"
+                        :page-size="pageSize" @current-change="changeCurrentPage" @prev-click="handlePrev"
+                        @next-click="handleNext">
+                    </el-pagination>
+                </div> -->
+            </div>
+        </main>
+        <footer>
+            <!-- 鍒涘缓寮圭獥 -->
+            <el-dialog :visible.sync="dialogCreate" title="鏂板绗笁鏂规帴鍙�" width="45%" v-if="dialogCreate"
+                :before-close="handleClose">
+                <createInterface />
+            </el-dialog>
+            <!-- 鏌ョ湅寮圭獥 -->
+            <el-dialog :visible.sync="dialogUpdate" :title="updateFlag ?'淇敼绗笁鏂规帴鍙�':'鏌ョ湅绗笁鏂规帴鍙�'" width="45%"
+                v-if="dialogUpdate" :before-close="handleClose">
+                <viewInterface :updateFlag="updateFlag" :userInfo=userInfo />
+            </el-dialog>
+        </footer>
+    </div>
+</template>
+<script>
+import createInterface from './components/createInterface';
+import viewInterface from './components/viewInterface'
+export default {
+    components: {
+        createInterface, viewInterface
+    },
+    data() {
+        return {
+            tableData: [],
+            search: "",
+            dialogCreate: false,
+            dialogUpdate: false,
+            updateFlag: false,
+            userInfo: '',
+            // totalNum: 200,
+            // pageSize: 10,
+            // currentPage: 1,
+        }
+    },
+    created() {
+        this.getUserList();
+    },
+    methods: {
+        // 鑾峰彇鎺ュ彛鍒楄〃
+        getUserList() {
+            const that = this;
+            // const { currentPage, pageSize, search } = this;
+            this.dialogCreate = false;
+            this.$axios.get("sccg/system/portal/thirdApp/search").then(res => {
+                const { code, data } = res;
+                if (code == 200) {
+                    this.tableData = data;
+                }
+            })
+        },
+        // 璁剧疆琛ㄦ牸鏂戦┈绾�
+        tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 == 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+            return '';
+        },
+        // 鎵撳紑鏂板鐣岄潰
+        handleAdd() {
+            this.dialogCreate = true;
+        },
+        // 鍒涘缓寮圭獥鍏抽棴
+        handleClose(done) {
+            const that = this;
+            this.$confirm('纭鍏抽棴锛�')
+                .then(_ => {
+                    that.dialogCreate = false;
+                    done();
+                })
+                .catch(_ => { });
+        },
+        // 鍒涘缓鏌ョ湅寮圭獥
+        handleView(rowData) {
+            this.userInfo = rowData;
+            this.dialogUpdate = true;
+        },
+        // 鍒犻櫎绗笁鏂规帴鍙�
+        handleDelete({ id }) {
+            console.log(id);
+            this.$axios.delete('sccg/system/portal/thirdApp/delete', {
+                params: {
+                    id
+                }
+            }).then(res => {
+                console.log(res);
+            })
+        }
+        // // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+        // changeCurrentPage(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓婁竴椤电偣鍑讳簨浠�
+        // handlePrev(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓嬩竴椤电偣鍑讳簨浠�
+        // handleNext(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+    }
+}
+</script>
+<!-- sccg/system/portal/thirdApp/search -->
+<style lang="scss" scoped>
+.otherInterface {
+    header {
+        display: flex;
+        line-height: 60px;
+        justify-content: space-between;
+        padding: 0 20px;
+        color: #4b9bb7;
+        &::v-deep .el-button {
+            background-color: #eb5d01;
+            border: none;
+            color: #fff;
+            border-radius: 20px;
+        }
+    }
+
+    main {
+        padding: 10px 20px;
+
+        .mainHeader {
+            padding-left: 20px;
+            display: flex;
+            line-height: 60px;
+            color: #4b9bb7;
+            background-color: #09152f;
+            .el-input {
+                width: 180px;
+                height: 35px;
+                margin-left: 10px;
+
+                &::v-deep .el-input__inner {
+                    background-color: #09152f;
+                    border: 1px solid #17324c;
+                }
+            }
+        }
+
+        .mainContent {
+            margin-top: 20px;
+            .el-table {
+                color: #4b9bb7;
+
+                &::v-deep .el-table__empty-block {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .el-table__empty-text {
+                    color: #4b9bb7;
+                }
+
+                &::v-deep .warning-row {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .success-row {
+                    background-color: #071f39;
+                }
+            }
+
+            .line {
+                padding: 0 5px;
+                // margin-top: -10px;
+            }
+        }
+    }
+
+    footer {
+
+        &::v-deep .el-dialog__header,
+        &::v-deep .el-dialog__body {
+            background-color: #06122c;
+        }
+
+        &::v-deep .el-dialog__header {
+            display: flex;
+            align-items: center;
+            background-color: #fff;
+            padding: 20px;
+            line-height: 60px;
+        }
+
+        &::v-deep .el-dialog__title {
+            color: #4b9bb7;
+        }
+
+        &::v-deep .el-dialog__close {
+            width: 20px;
+            height: 20px;
+            // color: #fff;
+        }
+
+        &::v-deep .el-dialog__body {
+            padding: 0;
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/baseSetting/violation/components/createInterface/index.vue b/src/views/operate/baseSetting/violation/components/createInterface/index.vue
new file mode 100644
index 0000000..1be774b
--- /dev/null
+++ b/src/views/operate/baseSetting/violation/components/createInterface/index.vue
@@ -0,0 +1,260 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+    },
+    methods: {
+        handleUser() {
+            const { myInterface } = this;
+            this.$axios.post('sccg/system/portal/thirdApp/add', {
+                websiteUrl:myInterface.websiteUrl,
+                applicationIconUrl:myInterface.applicationIconUrl,
+                applicationType:0,
+                description:myInterface.description,
+                applicationName:myInterface.applicationName
+            }).then(res => {
+                console.log(res);
+                // if (res.code === 200) {
+                //     this.refresh();
+                // }
+            })
+        },
+    },
+    props: ['refresh']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                margin-top: 30px;
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/baseSetting/violation/components/viewInterface/index.vue b/src/views/operate/baseSetting/violation/components/viewInterface/index.vue
new file mode 100644
index 0000000..6b28ebb
--- /dev/null
+++ b/src/views/operate/baseSetting/violation/components/viewInterface/index.vue
@@ -0,0 +1,246 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <!-- <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item> -->
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+        const {userInfo} = this;
+        this.myInterface = JSON.parse(JSON.stringify(userInfo));
+    },
+    methods: {
+    },
+    props: ['updateFlag','userInfo']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/baseSetting/violation/index.vue b/src/views/operate/baseSetting/violation/index.vue
new file mode 100644
index 0000000..1bd09f4
--- /dev/null
+++ b/src/views/operate/baseSetting/violation/index.vue
@@ -0,0 +1,250 @@
+<template>
+    <div class="otherInterface">
+        <header>
+            <div class="headerTitle">杩愯惀绠$悊 >> 鍩虹璁剧疆 > 杩濊浜嬮」璁剧疆</div>
+        </header>
+        <main>
+            <div class="mainHeader">
+                <span>绛涢�夋潯浠�:</span>
+                <el-input placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+            </div>
+            <div class="mainContent">
+                <!-- @selection-change="handleSelectionChange" -->
+                <!-- 鏁版嵁娓叉煋 -->
+                <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
+                    :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}"
+                    :row-class-name="tableRowClassName">
+                    <el-table-column type="selection" width="55">
+                    </el-table-column>
+                    <el-table-column label="杩濊浜嬮」缂栧彿" prop="applicationName" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="鎵�灞炵被鍨�" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="websiteUrl" label="鎵�灞炲ぇ绫�" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="description" label="鎵�灞炲皬绫�" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="description" label="鎻忚堪(妗堢敱)" min-width="20">
+                    </el-table-column>
+                    <el-table-column label="鎿嶄綔" min-width="10">
+                        <template slot-scope="scope">
+                            <span @click="handleView(scope.row)">鏌ョ湅</span>
+                            <span class="line">|</span>
+                            <span @click="handleDelete(scope.row)">鍒犻櫎</span>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <!-- 鍒嗛〉 -->
+                <!-- <div class="pagination">
+                    <el-pagination background :current-page="currentPage" layout="prev, pager, next" :total="totalNum"
+                        :page-size="pageSize" @current-change="changeCurrentPage" @prev-click="handlePrev"
+                        @next-click="handleNext">
+                    </el-pagination>
+                </div> -->
+            </div>
+        </main>
+        <footer>
+            <!-- 鍒涘缓寮圭獥 -->
+            <el-dialog :visible.sync="dialogCreate" title="鏂板绗笁鏂规帴鍙�" width="45%" v-if="dialogCreate"
+                :before-close="handleClose">
+                <createInterface />
+            </el-dialog>
+            <!-- 鏌ョ湅寮圭獥 -->
+            <el-dialog :visible.sync="dialogUpdate" :title="updateFlag ?'淇敼绗笁鏂规帴鍙�':'鏌ョ湅绗笁鏂规帴鍙�'" width="45%"
+                v-if="dialogUpdate" :before-close="handleClose">
+                <viewInterface :updateFlag="updateFlag" :userInfo=userInfo />
+            </el-dialog>
+        </footer>
+    </div>
+</template>
+<script>
+import createInterface from './components/createInterface';
+import viewInterface from './components/viewInterface'
+export default {
+    components: {
+        createInterface, viewInterface
+    },
+    data() {
+        return {
+            tableData: [],
+            search: "",
+            dialogCreate: false,
+            dialogUpdate: false,
+            updateFlag: false,
+            userInfo: '',
+            // totalNum: 200,
+            // pageSize: 10,
+            // currentPage: 1,
+        }
+    },
+    created() {
+        this.getUserList();
+    },
+    methods: {
+        // 鑾峰彇鎺ュ彛鍒楄〃
+        getUserList() {
+            const that = this;
+            // const { currentPage, pageSize, search } = this;
+            this.dialogCreate = false;
+            this.$axios.get("sccg/system/portal/thirdApp/search").then(res => {
+                const { code, data } = res;
+                if (code == 200) {
+                    this.tableData = data;
+                }
+            })
+        },
+        // 璁剧疆琛ㄦ牸鏂戦┈绾�
+        tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 == 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+            return '';
+        },
+        // 鎵撳紑鏂板鐣岄潰
+        handleAdd() {
+            this.dialogCreate = true;
+        },
+        // 鍒涘缓寮圭獥鍏抽棴
+        handleClose(done) {
+            const that = this;
+            this.$confirm('纭鍏抽棴锛�')
+                .then(_ => {
+                    that.dialogCreate = false;
+                    done();
+                })
+                .catch(_ => { });
+        },
+        // 鍒涘缓鏌ョ湅寮圭獥
+        handleView(rowData) {
+            this.userInfo = rowData;
+            this.dialogUpdate = true;
+        },
+        // 鍒犻櫎绗笁鏂规帴鍙�
+        handleDelete({ id }) {
+            console.log(id);
+            this.$axios.delete('sccg/system/portal/thirdApp/delete', {
+                params: {
+                    id
+                }
+            }).then(res => {
+                console.log(res);
+            })
+        }
+        // // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+        // changeCurrentPage(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓婁竴椤电偣鍑讳簨浠�
+        // handlePrev(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓嬩竴椤电偣鍑讳簨浠�
+        // handleNext(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+    }
+}
+</script>
+<!-- sccg/system/portal/thirdApp/search -->
+<style lang="scss" scoped>
+.otherInterface {
+    header {
+        display: flex;
+        line-height: 60px;
+        justify-content: space-between;
+        padding: 0 20px;
+        color: #4b9bb7;
+        &::v-deep .el-button {
+            background-color: #eb5d01;
+            border: none;
+            color: #fff;
+            border-radius: 20px;
+        }
+    }
+
+    main {
+        padding: 10px 20px;
+
+        .mainHeader {
+            padding-left: 20px;
+            display: flex;
+            line-height: 60px;
+            color: #4b9bb7;
+            background-color: #09152f;
+            .el-input {
+                width: 180px;
+                height: 35px;
+                margin-left: 10px;
+
+                &::v-deep .el-input__inner {
+                    background-color: #09152f;
+                    border: 1px solid #17324c;
+                }
+            }
+        }
+
+        .mainContent {
+            margin-top: 20px;
+            .el-table {
+                color: #4b9bb7;
+
+                &::v-deep .el-table__empty-block {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .el-table__empty-text {
+                    color: #4b9bb7;
+                }
+
+                &::v-deep .warning-row {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .success-row {
+                    background-color: #071f39;
+                }
+            }
+
+            .line {
+                padding: 0 5px;
+                // margin-top: -10px;
+            }
+        }
+    }
+
+    footer {
+
+        &::v-deep .el-dialog__header,
+        &::v-deep .el-dialog__body {
+            background-color: #06122c;
+        }
+
+        &::v-deep .el-dialog__header {
+            display: flex;
+            align-items: center;
+            background-color: #fff;
+            padding: 20px;
+            line-height: 60px;
+        }
+
+        &::v-deep .el-dialog__title {
+            color: #4b9bb7;
+        }
+
+        &::v-deep .el-dialog__close {
+            width: 20px;
+            height: 20px;
+            // color: #fff;
+        }
+
+        &::v-deep .el-dialog__body {
+            padding: 0;
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/fivepack/shop/components/createUser/index.vue b/src/views/operate/fivepack/shop/components/createUser/index.vue
index 833990f..df0021d 100644
--- a/src/views/operate/fivepack/shop/components/createUser/index.vue
+++ b/src/views/operate/fivepack/shop/components/createUser/index.vue
@@ -1,108 +1,50 @@
 <template>
     <div class="createUser">
-        <!-- <header>
-            <div class="headerTitle">鏂板璐︽埛</div>
-            <div class="headerTip">
-                <span>*</span>
-                <label>涓哄繀濉」</label>
-            </div>
-        </header> -->
         <main>
-            <!-- <div class="mainTitle">鍩虹淇℃伅</div> -->
             <div class="mainContent">
                 <el-form ref="user" label-width="140px" autoComplete="on" :model="user" :rules="createUserRules"
                     label-position="right">
-                    <!-- 鐢ㄦ埛鍚嶇О -->
-                    <el-form-item class="optionItem" label="鐢ㄦ埛鍚嶇О:" prop="nickName">
-                        <el-input v-model="user.nickName" placeholder="濉啓鐢ㄦ埛鍚嶇О"></el-input>
-                    </el-form-item>
-                    <!-- 鐢ㄦ埛瀵嗙爜 -->
-                    <el-form-item class="optionItems" label="鐢ㄦ埛瀵嗙爜:" prop="password">
-                        <el-input v-model="user.password" type="password" placeholder="璇疯緭鍏ョ敤鎴峰瘑鐮�"></el-input>
-                    </el-form-item>
-                    <!-- 鎵�灞炵敤鎴峰鍚� -->
-                    <el-form-item class="optionItem" label="鎵�灞炵敤鎴峰鍚�:" prop="username">
-                        <el-input v-model="user.username" placeholder="璇峰~鍐欑敤鎴峰鍚�"></el-input>
-                    </el-form-item>
-                    <!-- 鎬у埆 -->
-                    <!-- <el-form-item class="optionItem" label="鎬у埆:" prop="gender">
-                        <el-radio-group v-model="user.gender">
-                            <el-radio :label="1">鐢�</el-radio>
-                            <el-radio :label="2">濂�</el-radio>
-                        </el-radio-group>
-                    </el-form-item> -->
-                    <!-- 鏄惁鍏氬憳 -->
-                    <el-form-item class="optionItem" label="鏄惁鍏氬憳:" prop="isDy">
-                        <el-radio-group v-model="user.isDy">
-                            <el-radio :label="1">鏄�</el-radio>
-                            <el-radio :label="0">鍚�</el-radio>
-                        </el-radio-group>
-                    </el-form-item>
-                    <!-- 鎵�灞炴墜鏈哄彿鐮� -->
-                    <el-form-item class="optionItem" label="鎵�灞炴墜鏈哄彿鐮�:" prop="mobile">
-                        <el-input v-model="user.mobile" placeholder="璇峰~鍐欐墜鏈哄彿鐮�"></el-input>
-                    </el-form-item>
-                    <!-- 閭鍦板潃 -->
-                    <el-form-item class="optionItem" label="閭鍦板潃:" prop="email">
-                        <el-input v-model="user.email" placeholder="璇峰~鍐欓偖绠卞湴鍧�"></el-input>
-                    </el-form-item>
-                    <!-- 閫夋嫨瑙掕壊 -->
-                    <!-- <el-form-item class="optionItem" label="閫夋嫨瑙掕壊:" prop="role">
-                        <el-select v-model="user.role" placeholder="璇烽�夋嫨鎵�灞炶鑹�">
-                            <el-option v-for="item in roleList" :key="item.name" :label="item.name" :value="item.value"
-                                :disabled="item.disabled">
-                            </el-option>
-                        </el-select>
-                    </el-form-item> -->
-                    <!-- 鐢ㄦ埛绫诲瀷 -->
-                    <el-form-item class="optionItem" label="鐢ㄦ埛绫诲瀷:" prop="userType">
-                        <el-select v-model="user.userType" placeholder="璇烽�夋嫨鐢ㄦ埛绫诲瀷">
+                    <!-- 搴楅摵绫诲瀷 -->
+                    <el-form-item class="optionItem" label="搴楅摵绫诲瀷:" prop="nickName">
+                        <el-select v-model="user.userType" placeholder="閫夋嫨搴楅摵/闂ㄥ簵绫诲瀷">
                             <el-option v-for="item in typeList" :key="item.name" :label="item.name" :value="item.value"
                                 :disabled="item.disabled">
                             </el-option>
                         </el-select>
                     </el-form-item>
-                    <!-- 搴ф満/鍒嗘満 -->
-                    <el-form-item class="optionItem" label="搴ф満/鍒嗘満:" prop="zj">
-                        <div class="optionHandleSp">
-                            <el-input class="areaNumber" v-model="user.zj.areaNumber" placeholder="鐢佃瘽鍖哄彿">
-                            </el-input>
-                            <el-input class="telNumber" v-model="user.zj.phoneNumber" placeholder="鐢佃瘽鍙风爜">
-                            </el-input>
-                            <el-input class="moreNumber" v-model="user.zj.moreNumber" placeholder="鍒嗘満鍙风爜">
-                            </el-input>
-                        </div>
+                    <!-- 搴楅摵鍚嶇О -->
+                    <el-form-item class="optionItems" label="搴楅摵鍚嶇О:" prop="password">
+                        <el-input v-model="user.password" type="password" placeholder="璇峰~鍐欏簵閾哄悕绉�"></el-input>
                     </el-form-item>
-                    <!-- 鎵�灞為儴闂� -->
-                    <el-form-item class="optionItem" label="鎵�灞為儴闂�:" prop="departmentId">
-                        <el-select v-model="user.departmentId" placeholder="璇烽�夋嫨鎵�灞為儴闂�">
-                            <el-option v-for="item in typeList" :key="item.name" :label="item.departName"
-                                :value="item.id">
+                    <!-- 璐熻矗浜� -->
+                    <el-form-item class="optionItem" label="璐熻矗浜�:" prop="username">
+                        <el-input v-model="user.username" placeholder="璇峰~鍐欑敤鎴峰鍚�"></el-input>
+                    </el-form-item>
+                    <!-- 搴楅摵鎻忚堪 -->
+                    <el-form-item class="optionItem" label="搴楅摵鎻忚堪:" prop="mobile">
+                        <el-input type="textarea" v-model="user.mobile" placeholder="杈撳叆閮ㄩ棬鎻忚堪"></el-input>
+                    </el-form-item>
+                    <!-- 鑱旂郴鏂瑰紡 -->
+                    <el-form-item class="optionItem" label="鑱旂郴鏂瑰紡:" prop="email">
+                        <el-input v-model="user.email" placeholder="璇峰~鍐欏簵閾鸿仈绯绘柟寮�"></el-input>
+                    </el-form-item>
+                    <!-- 搴楅摵鍦板潃 -->
+                    <el-form-item class="optionItem" label="搴楅摵鍦板潃:" prop="userType">
+                        <el-select v-model="user.userType" placeholder="璇峰~鍐欏簵閾鸿缁嗗湴鍧�">
+                            <el-option v-for="item in typeList" :key="item.name" :label="item.name" :value="item.value"
+                                :disabled="item.disabled">
                             </el-option>
                         </el-select>
                     </el-form-item>
-                    <!-- 褰撳墠鑱屽姟 -->
-                    <el-form-item class="optionItem" label="褰撳墠鑱屽姟:" prop="jobTitle">
-                        <el-input v-model="user.work" placeholder="璇疯緭鍏ュ綋鍓嶈亴鍔�" ></el-input>
-                    </el-form-item>
-                    <!-- 濉啓鎵�灞瀖ac鍦板潃 -->
-                    <!-- <el-form-item class="optionItem" label="濉啓鎵�灞瀖ac鍦板潃:" prop="mac">
-                        <el-input v-model="user.mac" placeholder="璇峰~鍐欐墍灞瀖ac鍦板潃"></el-input>
-                    </el-form-item> -->
-                    <!-- 濉啓鎵�灞瀒p鍦板潃 -->
-                    <!-- <el-form-item class="optionItem" label="濉啓鎵�灞瀒p鍦板潃:" prop="ip">
-                        <el-input v-model="user.ip" placeholder="璇峰~鍐欐墍灞瀒p鍦板潃"></el-input>
-                    </el-form-item> -->
-                    <el-form-item>
-                        <div class="optionBtn">
-                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦</el-button>
-                        <el-button class="btn reset">閲嶇疆</el-button>
-                        </div>
-                    </el-form-item>
                 </el-form>
-
             </div>
         </main>
+        <footer>
+            <div class="optionBtn">
+                <el-button class="btn reset">鍙栨秷</el-button>
+                <el-button type="primary" class="btn submit" @click="handleUser">纭畾</el-button>
+            </div>
+        </footer>
     </div>
 </template>
 <script>
@@ -280,21 +222,21 @@
     methods: {
         handleUser() {
             const { user } = this;
-            this.$axios.post('sccg/admin/register', {
-                departmentId: user.departmentId,
-                email: user.email,
-                jsDy: user.isDy,
-                jobTitle: user.jobTitle,
-                mobile: user.mobile,
-                nickName: user.nickName,
-                password: user.password,
-                userType: user.userType,
-                username: user.username,
-            }).then(res => {
-                if (res.code === 200) {
-                    console.log(1);
-                    this.$emit('sendDialog',{flag:false});
-                }
+            this.$axios.post('sccg/store/storeinfo/add',{
+                contact:'18728108911',
+                    idcardinfo:'511025199910028213',
+                    owner:'娴嬭瘯浜哄憳',
+                    storeaddr:'鍥涘窛鐪�',
+                    storename:'娴嬭瘯搴椾竴',
+                    storephoto:'111',
+                    storescore:0,
+            })
+            .then(res => {
+                console.log(res);
+                // if (res.code === 200) {
+                //     console.log(1);
+                //     this.$emit('sendDialog', { flag: false });
+                // }
             })
         },
     },
@@ -305,52 +247,29 @@
 .createUser {
     border-radius: 1px;
     background-color: #09152f;
-
-    // header {
-    //     display: flex;
-    //     justify-content: space-between;
-    //     height: 60px;
-    //     line-height: 60px;
-    //     padding: 0 20px;
-    //     border: 1px solid #fff;
-
-    //     .headerTitle {
-    //         color: #4b9bb7;
-    //         font-weight: 600;
-    //     }
-
-    //     .headerTip span {
-    //         color: #ff3b6c;
-    //     }
-
-    //     .headerTip label {
-    //         color: #4b9bb7;
-    //     }
-    // }
+    padding-bottom: 50px;
 
     main {
-        // border: 1px solid #fff;
         text-align: left;
         padding: 0 55px;
         background-color: #09152f;
-        padding-bottom: 50px;
         padding-top: 20px;
-        // .mainTitle {
-        //     color: #4b9bb7;
-        //     font-weight: 600;
-        //     line-height: 100px;
-        //     font-size: 14px;
-        // }
 
         .mainContent {
             display: flex;
             justify-content: center;
             margin-top: 50px;
+
             &::v-deep .el-form-item__label {
                 color: #4b9bb7;
             }
 
             &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            &::v-deep .el-textarea__inner {
                 background-color: #09152f;
                 border: 1px solid #17324c;
             }
@@ -376,15 +295,21 @@
                 }
             }
 
-            .optionBtn {
-                display: flex;
-                margin-top: 20px;
+        }
+    }
 
-                .btn {
-                    padding: 12px 50px;
-                }
+    footer {
+        border-top: 1px solid #4b9bb7;
+        display: flex;
+        justify-content: flex-end;
+        padding: 0 20px;
+        .optionBtn {
+            display: flex;
+            margin-top: 20px;
+
+            .btn {
+                padding: 12px 50px;
             }
-
         }
     }
 }
diff --git a/src/views/operate/fivepack/shop/components/header/index.vue b/src/views/operate/fivepack/shop/components/header/index.vue
index 9389301..c0d58ca 100644
--- a/src/views/operate/fivepack/shop/components/header/index.vue
+++ b/src/views/operate/fivepack/shop/components/header/index.vue
@@ -21,7 +21,7 @@
 
         </div>
         <div class="footer">
-            <el-dialog :visible.sync="dialogCreate" title="鏂板璐︽埛" width="45%" v-if="dialogCreate">
+            <el-dialog :visible.sync="dialogCreate" title="娣诲姞搴楅摵" width="45%" v-if="dialogCreate">
                 <createUser @sendDialog="sendDialog" />
             </el-dialog>
         </div>
diff --git a/src/views/operate/fivepack/shop/components/main/index.vue b/src/views/operate/fivepack/shop/components/main/index.vue
index 974f8ff..24d85b0 100644
--- a/src/views/operate/fivepack/shop/components/main/index.vue
+++ b/src/views/operate/fivepack/shop/components/main/index.vue
@@ -52,7 +52,7 @@
     data() {
         return {
             tableData: [],
-            search: "",
+            search: "111",
             dialogUpdate: false,
             updateFlag: false,
             userInfo: '',
@@ -99,18 +99,31 @@
         getUserList() {
             const that = this;
             const { currentPage, pageSize, search } = this;
+            console.log(typeof search);
             // 鑾峰彇鎵�鏈夌敤鎴蜂俊鎭�佺敤鎴锋煡璇�(鏆傛椂鏀寔鐢佃瘽鍙风爜)
-            this.$axios.get(`sccg/admin/list?mobile=${search}&current=${currentPage}&pageSize=${pageSize}`).then(res => {
-                if (res.code === 200) {
-                    res.data.records.forEach(item => {
-                        item.createTime = helper(item.createTime);
-                        item.status == 1 ? item.status = true : item.status = false;
-                    })
-                    that.totalNum = res.data.pages * pageSize;
-                    that.tableData = res.data.records;
-                    this.renderFlag = true;
-                }
-            })
+            // this.$axios.get(`sccg/store/storeinfo/list?keyword=${search}&pageNum=${currentPage}&pageSize=${pageSize}`).then(res => {
+            //     if (res.code === 200) {
+            //         res.data.records.forEach(item => {
+            //             item.createTime = helper(item.createTime);
+            //             item.status == 1 ? item.status = true : item.status = false;
+            //         })
+            //         that.totalNum = res.data.pages * pageSize;
+            //         that.tableData = res.data.records;
+            //         this.renderFlag = true;
+            //     }
+            // })
+            // this.$axios({
+            //     method: 'get',
+            //     url:`sccg/store/storeinfo/list?keyword=${search}&pageNum=${currentPage}&pageSize=${pageSize}`,
+            //     // data:{
+            //     //     keyword:'',
+            //     //     pageNum:currentPage,
+            //     //     pageSize,
+            //     // }
+            // })
+            //     .then(res => {
+            //         console.log(res);
+            //     })
         },
         // 鏌ョ湅鐢ㄦ埛淇℃伅(涓嶅彲淇敼)
         handleFind(rowData) {
@@ -126,13 +139,13 @@
         },
         // 璁剧疆琛ㄦ牸鏂戦┈绾�
         tableRowClassName({ row, rowIndex }) {
-                if ((rowIndex + 1) % 2 == 0) {
-                    return 'warning-row';
-                } else {
-                    return 'success-row';
-                }
-                return '';
-            },
+            if ((rowIndex + 1) % 2 == 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+            return '';
+        },
     },
     props: ['refresh', 'keyword', 'resetFresh'],
     watch: {
@@ -162,17 +175,21 @@
     .mainTitle {
         line-height: 60px;
     }
-    .el-link{
+
+    .el-link {
         color: #4b9bb7;
     }
-    .leftPx{
+
+    .leftPx {
         margin-left: 10px;
     }
+
     .pagination {
         margin-top: 50px;
         display: flex;
         line-height: 50px;
         justify-content: center;
+
         .el-pagination {
 
             &::v-deep li,
@@ -199,10 +216,12 @@
             .line {
                 padding: 0 5px;
             }
-            .el-button{
+
+            .el-button {
                 // background-color: #fff;
                 border: none;
             }
+
             span:hover {
                 cursor: pointer;
             }
diff --git a/src/views/operate/fivepack/shop/index.vue b/src/views/operate/fivepack/shop/index.vue
index d4cac15..96b7aad 100644
--- a/src/views/operate/fivepack/shop/index.vue
+++ b/src/views/operate/fivepack/shop/index.vue
@@ -1,23 +1,5 @@
 <template>
     <div class="userList">
-        <!-- <header>
-            <div class="headerContent">
-                <div class="search">
-                    <span>绛涢�夋潯浠�:</span>
-                    <el-input placeholder="璇疯緭鍏ュ唴瀹�" v-model="search"></el-input>
-                    <div class="findBtn">
-                        <el-button type="primary" @click="getUserList">鏌ヨ</el-button>
-                    </div>
-                </div>
-                <div class="addUser">
-                    <el-button class="addBtn" type="primary" @click="dialogCreate = true">娣诲姞鐢ㄦ埛</el-button>
-                    <el-dialog :visible.sync="dialogCreate" title="鏂板璐︽埛" width="45%" v-if="dialogCreate"
-                        :before-close="handleClose1">
-                        <createUser :refresh="getUserList" />
-                    </el-dialog>
-                </div>
-            </div>
-        </header> -->
         <myHeader @setDialog="changeDialog" @getSearch="getSearch"></myHeader>
         <myMain :refresh="isFresh" :keyword="keyword" @resetFresh="resetFresh" />
     </div>
diff --git a/src/views/operate/fivepack/threepack/components/aside/index.vue b/src/views/operate/fivepack/threepack/components/aside/index.vue
new file mode 100644
index 0000000..a408d45
--- /dev/null
+++ b/src/views/operate/fivepack/threepack/components/aside/index.vue
@@ -0,0 +1,100 @@
+<template>
+    <div class="aside">
+        <div class="title">缁勭粐鏈烘瀯</div>
+        <div class="input">
+            <el-input placeholder="杈撳叆缁勭粐鏈烘瀯鍚嶇О"></el-input>
+        </div>
+        <div class="menu">
+            <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            data: [{
+                label: '涓�绾� 1',
+                children: [{
+                    label: '浜岀骇 1-1',
+                    children: [{
+                        label: '涓夌骇 1-1-1'
+                    }]
+                }]
+            }, {
+                label: '涓�绾� 2',
+                children: [{
+                    label: '浜岀骇 2-1',
+                    children: [{
+                        label: '涓夌骇 2-1-1'
+                    }]
+                }, {
+                    label: '浜岀骇 2-2',
+                    children: [{
+                        label: '涓夌骇 2-2-1'
+                    }]
+                }]
+            }, {
+                label: '涓�绾� 3',
+                children: [{
+                    label: '浜岀骇 3-1',
+                    children: [{
+                        label: '涓夌骇 3-1-1'
+                    }]
+                }, {
+                    label: '浜岀骇 3-2',
+                    children: [{
+                        label: '涓夌骇 3-2-1'
+                    }]
+                }]
+            }],
+            defaultProps: {
+                children: 'children',
+                label: 'label'
+            }
+        };
+    },
+    methods: {
+        handleNodeClick(data) {
+            console.log(data);
+        }
+    }
+};
+</script>
+<style lang="scss" scoped>
+.aside {
+    width: 200px;
+    height: calc(100vh - 102px);
+    background-color: #09152f;
+    padding: 10px;
+    display: flex;
+    flex-direction: column;
+    .title {
+        line-height: 60px;
+    }
+
+    .input {
+        line-height: 30px;
+
+        &::v-deep .el-input__inner {
+            background-color: #09152f;
+            border: 1px solid #17324c;
+        }
+    }
+
+    .menu {
+        margin-top: 20px;
+        flex: 1;
+        .el-tree{
+            height: 100%;
+            background-color: #09152f;
+            &::v-deep .el-tree-node:focus>.el-tree-node__content{
+                background-color: #092c4a;
+            }
+            &::v-deep .el-tree-node__content:hover{
+                background-color: #092c4a;
+            }
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/fivepack/threepack/components/createUser/index.vue b/src/views/operate/fivepack/threepack/components/createUser/index.vue
new file mode 100644
index 0000000..df0021d
--- /dev/null
+++ b/src/views/operate/fivepack/threepack/components/createUser/index.vue
@@ -0,0 +1,316 @@
+<template>
+    <div class="createUser">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="user" :rules="createUserRules"
+                    label-position="right">
+                    <!-- 搴楅摵绫诲瀷 -->
+                    <el-form-item class="optionItem" label="搴楅摵绫诲瀷:" prop="nickName">
+                        <el-select v-model="user.userType" placeholder="閫夋嫨搴楅摵/闂ㄥ簵绫诲瀷">
+                            <el-option v-for="item in typeList" :key="item.name" :label="item.name" :value="item.value"
+                                :disabled="item.disabled">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <!-- 搴楅摵鍚嶇О -->
+                    <el-form-item class="optionItems" label="搴楅摵鍚嶇О:" prop="password">
+                        <el-input v-model="user.password" type="password" placeholder="璇峰~鍐欏簵閾哄悕绉�"></el-input>
+                    </el-form-item>
+                    <!-- 璐熻矗浜� -->
+                    <el-form-item class="optionItem" label="璐熻矗浜�:" prop="username">
+                        <el-input v-model="user.username" placeholder="璇峰~鍐欑敤鎴峰鍚�"></el-input>
+                    </el-form-item>
+                    <!-- 搴楅摵鎻忚堪 -->
+                    <el-form-item class="optionItem" label="搴楅摵鎻忚堪:" prop="mobile">
+                        <el-input type="textarea" v-model="user.mobile" placeholder="杈撳叆閮ㄩ棬鎻忚堪"></el-input>
+                    </el-form-item>
+                    <!-- 鑱旂郴鏂瑰紡 -->
+                    <el-form-item class="optionItem" label="鑱旂郴鏂瑰紡:" prop="email">
+                        <el-input v-model="user.email" placeholder="璇峰~鍐欏簵閾鸿仈绯绘柟寮�"></el-input>
+                    </el-form-item>
+                    <!-- 搴楅摵鍦板潃 -->
+                    <el-form-item class="optionItem" label="搴楅摵鍦板潃:" prop="userType">
+                        <el-select v-model="user.userType" placeholder="璇峰~鍐欏簵閾鸿缁嗗湴鍧�">
+                            <el-option v-for="item in typeList" :key="item.name" :label="item.name" :value="item.value"
+                                :disabled="item.disabled">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </main>
+        <footer>
+            <div class="optionBtn">
+                <el-button class="btn reset">鍙栨秷</el-button>
+                <el-button type="primary" class="btn submit" @click="handleUser">纭畾</el-button>
+            </div>
+        </footer>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateNickname = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validatePass = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateTruename = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        const validateMail = (rule, value, callback) => {
+            if (value) {
+                const rep = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
+                if (!rep.test(value)) {
+                    callback(new Error("璇疯緭鍏ユ纭殑閭"))
+                }
+            }
+        };
+        const validateRole = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        const validateType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        const validateDepartment = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        const validateWork = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        const validateMac = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        const validateIp = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        return {
+            user: {
+                nickName: '',
+                password: '',
+                username: '',
+                // gender: 1,
+                isDy: 0,
+                mobile: '',
+                email: '',
+                // role: null,
+                userType: null,
+                zj: {
+                    areaNumber: '',
+                    phoneNumber: "",
+                    moreNumber: "",
+                },
+                departmentId: null,
+                jobTitle: null,
+                // mac: '',
+                // ip: '',
+            },
+            createUserRules: {
+                nickName: [
+                    { required: true, trigger: "blur", validator: validateNickname },
+                ],
+                password: [
+                    { required: true, trigger: "blur", validator: validatePass },
+                ],
+                username: [
+                    { required: true, trigger: "blur", validator: validateTruename },
+                ],
+                // gender: [
+                //     { required: true, trigger: "blur" },
+                // ],
+                isDy: [
+                    { required: true, trigger: "blur" },
+                ],
+                mobile: [
+                    { required: true, trigger: "blur", validator: validatePhone },
+                ],
+                email: [
+                    { required: false, trigger: "blur", validator: validateMail },
+                ],
+                // role: [
+                //     { required: true, trigger: "blur", validator: validateRole },
+                // ],
+                userType: [
+                    { required: true, trigger: "blur", validator: validateType },
+                ],
+                zj: [
+                    { required: false, trigger: "blur" },
+                ],
+                departmentId: [
+                    { required: true, trigger: "blur", validator: validateDepartment },
+                ],
+                jobTitle: [
+                    { required: true, trigger: "blur", validator: validateWork },
+                ],
+                // mac: [
+                //     { required: false, trigger: "blur", validator: validateMac },
+                // ],
+                // ip: [
+                //     { required: false, trigger: "blur", validator: validateIp },
+                // ],
+            },
+            roleList: [
+                { name: '瑙掕壊1', value: 1 }, { name: '瑙掕壊2', value: 2 }
+            ],
+            typeList: []
+        }
+    },
+    created() {
+        const that = this;
+        // 鑾峰彇瑙掕壊鍒楄〃
+        // this.$axios.get('')
+        // 鑾峰彇鐢ㄦ埛绫诲瀷鍒楄〃
+        // this.$axios.get('sccg/admin/list',{userType:0}).then(res=>{
+        //     console.log(res);
+        // })
+        // 鑾峰彇鍏ㄩ儴閮ㄩ棬鍒楄〃
+        this.$axios.get('sccg/depart/page').then(res => {
+            that.typeList = res.data.records;
+        })
+    },
+    methods: {
+        handleUser() {
+            const { user } = this;
+            this.$axios.post('sccg/store/storeinfo/add',{
+                contact:'18728108911',
+                    idcardinfo:'511025199910028213',
+                    owner:'娴嬭瘯浜哄憳',
+                    storeaddr:'鍥涘窛鐪�',
+                    storename:'娴嬭瘯搴椾竴',
+                    storephoto:'111',
+                    storescore:0,
+            })
+            .then(res => {
+                console.log(res);
+                // if (res.code === 200) {
+                //     console.log(1);
+                //     this.$emit('sendDialog', { flag: false });
+                // }
+            })
+        },
+    },
+    props: ['sendDialog']
+}
+</script>
+<style lang="scss" scoped>
+.createUser {
+    border-radius: 1px;
+    background-color: #09152f;
+    padding-bottom: 50px;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-top: 20px;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            margin-top: 50px;
+
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            &::v-deep .el-textarea__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #4b9bb7;
+        display: flex;
+        justify-content: flex-end;
+        padding: 0 20px;
+        .optionBtn {
+            display: flex;
+            margin-top: 20px;
+
+            .btn {
+                padding: 12px 50px;
+            }
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/fivepack/threepack/components/header/index.vue b/src/views/operate/fivepack/threepack/components/header/index.vue
new file mode 100644
index 0000000..35c292d
--- /dev/null
+++ b/src/views/operate/fivepack/threepack/components/header/index.vue
@@ -0,0 +1,109 @@
+<template>
+    <header>
+        <div class="headerContent">
+            <div class="find">
+                <div class="search">
+                    <span>杈撳叆鏌ヨ:</span>
+                    <el-input placeholder="搴楅摵(闂ㄥ簵)鍚嶇О" v-model="search"></el-input>
+                </div>
+                <div class="status">
+                    <span>搴楅摵鐘舵��:</span>
+                    <el-input placeholder="閫夋嫨搴楅摵鐘舵��" v-model="search"></el-input>
+                </div>
+                <div class="findBtn">
+                    <el-button type="primary" @click="setSearch" icon="el-icon-search">鏌ヨ</el-button>
+                    <el-button icon="el-icon-delete-solid">閲嶇疆</el-button>
+                </div>
+            </div>
+        </div>
+        <div class="footer">
+            <el-dialog :visible.sync="dialogCreate" title="娣诲姞搴楅摵" width="45%" v-if="dialogCreate">
+                <createUser @sendDialog="sendDialog" />
+            </el-dialog>
+        </div>
+    </header>
+</template>
+<script>
+import createUser from "../createUser";
+export default {
+    components: {
+        createUser,
+    },
+    data() {
+        return {
+            dialogCreate: false,
+            search: '',
+        }
+    },
+    methods: {
+        setSearch() {
+            this.$emit('getSearch', { text: this.search })
+        },
+        sendDialog(flag) {
+            console.log(flag);
+            this.dialogCreate = flag.flag;
+            this.$emit('setDialog', { flag: true })
+        }
+    },
+    props: ['setDialog', 'getSearch', 'flag'],
+}
+</script>
+<style lang="scss" scoped>
+header {
+    background-color: #09152f;
+    border: 1pox solid #fff;
+
+    .headerContent {
+        padding: 0 40px;
+        display: flex;
+        line-height: 100px;
+        justify-content: space-between;
+        align-items: center;
+        .find{
+            display: flex;
+        }
+        .search,
+        .status {
+            display: flex;
+            justify-content: flex-start;
+
+            span {
+                flex: 1;
+            }
+
+            .el-input {
+                flex: 2;
+                color: #1d3f57;
+
+                &::v-deep .el-input__inner {
+                    background-color: #09152f;
+                    border: 1px solid #17324c;
+                }
+            }
+
+        }
+
+        .status {
+            margin-left: 20px;
+        }
+
+        .findBtn {
+            line-height: 100px;
+            margin-left: 15px;
+            display: flex;
+            align-items: center;
+
+            .el-button {
+                padding: 12px 25px;
+            }
+        }
+
+        .addBtn {
+            padding: 12px 30px;
+            margin-left: 20%;
+        }
+
+
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/fivepack/threepack/components/main/index.vue b/src/views/operate/fivepack/threepack/components/main/index.vue
new file mode 100644
index 0000000..8f0776a
--- /dev/null
+++ b/src/views/operate/fivepack/threepack/components/main/index.vue
@@ -0,0 +1,259 @@
+<template>
+    <main>
+        <div class="mainContent">
+            <!-- 鏁版嵁灞曠ず -->
+            <el-table ref="multipleTable"
+                :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}"
+                :data="tableData" style="width: 100%" :row-class-name="tableRowClassName">
+                <el-table-column type="selection" min-width="5">
+                </el-table-column>
+                <el-table-column label="搴楅摵缂栧彿" min-width="10">
+                    <template slot-scope="scope">{{ scope.row.id }}</template>
+                </el-table-column>
+                <el-table-column prop="nickName" label="搴楅摵鍚嶇О" min-width="10">
+                </el-table-column>
+                <el-table-column prop="username" label="搴楅摵鑱旂郴浜�" min-width="10">
+                </el-table-column>
+                <el-table-column prop="mobile" label="搴楅摵鑱旂郴鐢佃瘽" min-width="10">
+                </el-table-column>
+                <el-table-column prop="note" label="搴楅摵璇︾粏鍦板潃" min-width="10">
+                </el-table-column>
+                <el-table-column prop="note" label="鍏宠仈鎽勫儚鏈�" min-width="10">
+                </el-table-column>
+                <el-table-column prop="operation" label="鎿嶄綔" min-width="15">
+                    <template slot-scope="scope">
+                        <div class="operation">
+                            <el-link icon="el-icon-edit" :underline="false">缂栬緫</el-link>
+                            <el-link class="leftPx" icon="el-icon-delete-solid" :underline="false">鍒犻櫎</el-link>
+                            <el-link icon="el-icon-edit" :underline="false">鎺ㄩ�佷俊鎭�</el-link>
+                            <el-link icon="el-icon-edit" :underline="false">鏌ョ湅</el-link>
+                        </div>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <!-- 鏌ョ湅淇敼椤甸潰 -->
+            <el-dialog :visible.sync="dialogUpdate" width="45%" v-if="dialogUpdate"
+                :title="updateFlag ? '淇敼鐢ㄦ埛閮ㄩ棬淇℃伅' :'鏌ョ湅鐢ㄦ埛淇℃伅'">
+                <updateUser :updateFlag="updateFlag" :userInfo=userInfo />
+            </el-dialog>
+            <!-- 鍒嗛〉 -->
+            <div class="pagination">
+                <el-pagination background :current-page="currentPage" layout="prev, pager, next" :total="totalNum"
+                    :page-size="pageSize" @current-change="changeCurrentPage" @prev-click="handlePrev"
+                    @next-click="handleNext">
+                </el-pagination>
+            </div>
+        </div>
+    </main>
+</template>
+<script>
+import helper from '@/utils/mydate'
+import updateUser from '../updateUser';
+export default {
+    components: {
+        updateUser
+    },
+    data() {
+        return {
+            tableData: [],
+            search: "111",
+            dialogUpdate: false,
+            updateFlag: false,
+            userInfo: '',
+            totalNum: 200,
+            pageSize: 10,
+            currentPage: 1,
+            renderFlag: false,
+        }
+    },
+    created() {
+        this.getUserList();
+    },
+    methods: {
+        // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+        changeCurrentPage(page) {
+            this.currentPage = page;
+            this.getUserList();
+        },
+        // 涓婁竴椤电偣鍑讳簨浠�
+        handlePrev(page) {
+            this.currentPage = page;
+            this.getUserList();
+        },
+        // 涓嬩竴椤电偣鍑讳簨浠�
+        handleNext(page) {
+            this.currentPage = page;
+            this.getUserList();
+        },
+        // 淇敼瑙掕壊
+        handleChangeRole(obj) {
+            this.dialogUpdate = true
+            this.user = obj;
+            // console.log(obj)
+        },
+        // 淇敼鐢ㄦ埛鐘舵��
+        handleChangeStatus(obj) {
+            let { id, status } = obj;
+            status == true ? status = 1 : status = 0;
+            this.$axios.post(`sccg/admin/updateStatus/` + id + '?status=' + status).then(res => {
+                console.log(res);
+            })
+        },
+        // 鑾峰彇鐢ㄦ埛鍒楄〃
+        getUserList() {
+            const that = this;
+            const { currentPage, pageSize, search } = this;
+            // 鑾峰彇鎵�鏈夌敤鎴蜂俊鎭�佺敤鎴锋煡璇�(鏆傛椂鏀寔鐢佃瘽鍙风爜)
+            // this.$axios.get(`sccg/store/storeinfo/list?keyword=${search}&pageNum=${currentPage}&pageSize=${pageSize}`).then(res => {
+            //     if (res.code === 200) {
+            //         res.data.records.forEach(item => {
+            //             item.createTime = helper(item.createTime);
+            //             item.status == 1 ? item.status = true : item.status = false;
+            //         })
+            //         that.totalNum = res.data.pages * pageSize;
+            //         that.tableData = res.data.records;
+            //         this.renderFlag = true;
+            //     }
+            // })
+        },
+        // 鏌ョ湅鐢ㄦ埛淇℃伅(涓嶅彲淇敼)
+        handleFind(rowData) {
+            this.dialogUpdate = true;
+            this.updateFlag = false;
+            this.userInfo = rowData;
+        },
+        // 淇敼鐢ㄦ埛閮ㄩ棬淇℃伅
+        handleUpdate(rowData) {
+            this.dialogUpdate = true;
+            this.updateFlag = true;
+            this.userInfo = rowData
+        },
+        // 璁剧疆琛ㄦ牸鏂戦┈绾�
+        tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 == 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+            return '';
+        },
+    },
+    props: ['refresh', 'keyword', 'resetFresh'],
+    watch: {
+        refresh: {
+            handler(newValue, oldValue) {
+                if (newValue == true) {
+                    this.search = '';
+                    if (this.keyword != '') {
+                        this.search = this.keyword;
+                    }
+                    this.getUserList();
+                    this.$emit('resetFresh', { flag: false })
+                }
+            },
+            immediate: true
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+main {
+    background-color: #09152f;
+    margin-top: 20px;
+    padding-bottom: 50px;
+    border: 1pox solid #fff;
+
+    .mainTitle {
+        line-height: 60px;
+    }
+
+    .el-link {
+        color: #4b9bb7;
+    }
+
+    .leftPx {
+        margin-left: 10px;
+    }
+
+    .pagination {
+        margin-top: 50px;
+        display: flex;
+        line-height: 50px;
+        justify-content: center;
+
+        .el-pagination {
+
+            &::v-deep li,
+            &::v-deep .btn-prev,
+            &::v-deep .btn-next {
+                background-color: #071f39;
+                color: #4b9bb7;
+            }
+        }
+    }
+
+    .el-table {
+        color: #4b9bb7;
+        font-size: 10px;
+
+        &::v-deep .el-table__empty-block {
+            background-color: #09152f;
+            color: #4b9bb7;
+        }
+
+        .operation {
+            display: flex;
+
+            .line {
+                padding: 0 5px;
+            }
+
+            .el-button {
+                // background-color: #fff;
+                border: none;
+            }
+
+            span:hover {
+                cursor: pointer;
+            }
+        }
+    }
+
+    .el-table::v-deep .warning-row {
+        background: #06122c;
+    }
+
+    .el-table::v-deep .success-row {
+        background: #071f39;
+    }
+
+    &::v-deep .switchStyle .el-switch__label {
+        position: absolute;
+        display: none;
+        color: #fff;
+    }
+
+    &::v-deep .el-switch__core {
+        background-color: rgba(166, 166, 166, 1);
+    }
+
+    &::v-deep .switchStyle .el-switch__label--left {
+        z-index: 9;
+        left: 20px;
+    }
+
+    &::v-deep .switchStyle .el-switch__label--right {
+        z-index: 9;
+        left: 4px;
+    }
+
+    &::v-deep .switchStyle .el-switch__label.is-active {
+        display: block;
+    }
+
+    &::v-deep .switchStyle.el-switch .el-switch__core,
+    &::v-deep .el-switch .el-switch__label {
+        width: 50px !important;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/fivepack/threepack/components/updateUser/index.vue b/src/views/operate/fivepack/threepack/components/updateUser/index.vue
new file mode 100644
index 0000000..eabcd01
--- /dev/null
+++ b/src/views/operate/fivepack/threepack/components/updateUser/index.vue
@@ -0,0 +1,379 @@
+<template>
+    <div class="updateUser">
+        <!-- <header>
+            <div class="headerTitle">{{updateFlag ? '淇敼鐢ㄦ埛閮ㄩ棬淇℃伅' :'鏌ョ湅鐢ㄦ埛淇℃伅'}}</div>
+        </header> -->
+        <main>
+            <!-- <div class="mainTitle">鍩虹淇℃伅</div> -->
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="user" :rules="createUserRules"
+                    label-position="right">
+                    <!-- 鐢ㄦ埛鍚嶇О -->
+                    <el-form-item class="optionItem" label="鐢ㄦ埛鍚嶇О:" prop="username">
+                        <el-input v-model="user.username" placeholder="濉啓鐢ㄦ埛鍚嶇О" :disabled="true"></el-input>
+                    </el-form-item>
+                    <!-- 鐢ㄦ埛瀵嗙爜 -->
+                    <el-form-item class="optionItems" label="鐢ㄦ埛瀵嗙爜:" prop="password">
+                        <el-input v-model="user.password" type="password" placeholder="璇疯緭鍏ョ敤鎴峰瘑鐮�" :disabled="true">
+                        </el-input>
+                    </el-form-item>
+                    <!-- 鎵�灞炵敤鎴峰鍚� -->
+                    <!-- <el-form-item class="optionItem" label="鎵�灞炵敤鎴峰鍚�:" prop="true_name">
+                        <el-input v-model="user.true_name" placeholder="璇峰~鍐欑敤鎴峰鍚�"></el-input>
+                    </el-form-item> -->
+                    <!-- 鎬у埆 -->
+                    <!-- <el-form-item class="optionItem" label="鎬у埆:" prop="gender">
+                        <el-radio-group v-model="user.gender">
+                            <el-radio :label="1">鐢�</el-radio>
+                            <el-radio :label="2">濂�</el-radio>
+                        </el-radio-group>
+                    </el-form-item> -->
+                    <!-- 鏄惁鍏氬憳 -->
+                    <el-form-item class="optionItem" label="鏄惁鍏氬憳:" prop="isDy">
+                        <el-radio-group v-model="user.isDy" disabled>
+                            <el-radio :label="1">鏄�</el-radio>
+                            <el-radio :label="0">鍚�</el-radio>
+                        </el-radio-group>
+                    </el-form-item>
+                    <!-- 鎵�灞炴墜鏈哄彿鐮� -->
+                    <el-form-item class="optionItem" label="鎵�灞炴墜鏈哄彿鐮�:" prop="mobile">
+                        <el-input v-model="user.mobile" placeholder="璇峰~鍐欐墜鏈哄彿鐮�" :disabled="true"></el-input>
+                    </el-form-item>
+                    <!-- 閭鍦板潃 -->
+                    <el-form-item class="optionItem" label="閭鍦板潃:" prop="email">
+                        <el-input v-model="user.email" placeholder="璇峰~鍐欓偖绠卞湴鍧�" :disabled="true"></el-input>
+                    </el-form-item>
+                    <!-- 閫夋嫨瑙掕壊 -->
+                    <!-- <el-form-item class="optionItem" label="閫夋嫨瑙掕壊:" prop="role">
+                        <el-select v-model="user.role" placeholder="璇烽�夋嫨鎵�灞炶鑹�">
+                            <el-option v-for="item in roleList" :key="item.name" :label="item.name" :value="item.value"
+                                :disabled="item.disabled">
+                            </el-option>
+                        </el-select>
+                    </el-form-item> -->
+                    <!-- 鐢ㄦ埛绫诲瀷 -->
+                    <el-form-item class="optionItem" label="鐢ㄦ埛绫诲瀷:" prop="userType">
+                        <el-select v-model="user.userType" placeholder="璇烽�夋嫨鐢ㄦ埛绫诲瀷" disabled>
+                            <el-option v-for="item in typeList" :key="item.name" :label="item.name" :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <!-- 搴ф満/鍒嗘満 -->
+                    <!-- <el-form-item class="optionItem" label="搴ф満/鍒嗘満:" prop="zj">
+                        <div class="optionHandleSp">
+                            <el-input class="areaNumber" v-model="user.zj.areaNumber" placeholder="鐢佃瘽鍖哄彿">
+                            </el-input>
+                            <el-input class="telNumber" v-model="user.zj.phoneNumber" placeholder="鐢佃瘽鍙风爜">
+                            </el-input>
+                            <el-input class="moreNumber" v-model="user.zj.moreNumber" placeholder="鍒嗘満鍙风爜">
+                            </el-input>
+                        </div>
+                    </el-form-item> -->
+                    <!-- 鎵�灞為儴闂� -->
+                    <el-form-item class="optionItem" label="鎵�灞為儴闂�:" prop="departmentId">
+                        <el-select v-model="user.department" placeholder="璇烽�夋嫨鎵�灞為儴闂�" :disabled="!updateFlag">
+                            <el-option v-for="item in typeList" :key="item.name" :label="item.departName"
+                                :value="item.id">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <!-- 褰撳墠鑱屽姟 -->
+                    <el-form-item class="optionItem" label="褰撳墠鑱屽姟:" prop="jobTitle">
+                        <el-select v-model="user.work" placeholder="璇烽�夋嫨褰撳墠鑱屽姟" disabled>
+                            <el-option v-for="item in typeList" :key="item.name" :label="item.name" :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <!-- 濉啓鎵�灞瀖ac鍦板潃 -->
+                    <!-- <el-form-item class="optionItem" label="濉啓鎵�灞瀖ac鍦板潃:" prop="mac">
+                        <el-input v-model="user.mac" placeholder="璇峰~鍐欐墍灞瀖ac鍦板潃"></el-input>
+                    </el-form-item> -->
+                    <!-- 濉啓鎵�灞瀒p鍦板潃 -->
+                    <!-- <el-form-item class="optionItem" label="濉啓鎵�灞瀒p鍦板潃:" prop="ip">
+                        <el-input v-model="user.ip" placeholder="璇峰~鍐欐墍灞瀒p鍦板潃"></el-input>
+                    </el-form-item> -->
+                    <el-form-item v-if="updateFlag">
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateNickname = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validatePass = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateTruename = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        const validateMail = (rule, value, callback) => {
+            if (value) {
+                const rep = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
+                if (!rep.test(value)) {
+                    callback(new Error("璇疯緭鍏ユ纭殑閭"))
+                }
+            }
+        };
+        const validateRole = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        const validateType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        const validateDepartment = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        const validateWork = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        const validateMac = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        const validateIp = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                callback();
+            }
+        };
+        return {
+            user: {
+                nickName: '',
+                password: '',
+                username: '',
+                // gender: 1,
+                isDy: 1,
+                mobile: '',
+                email: '',
+                // role: null,
+                userType: null,
+                zj: {
+                    areaNumber: '',
+                    phoneNumber: "",
+                    moreNumber: "",
+                },
+                departmentId: null,
+                jobTitle: null,
+                // mac: '',
+                // ip: '',
+            },
+            createUserRules: {
+                nickName: [
+                    { required: true, trigger: "blur", validator: validateNickname },
+                ],
+                password: [
+                    { required: true, trigger: "blur", validator: validatePass },
+                ],
+                username: [
+                    { required: true, trigger: "blur", validator: validateTruename },
+                ],
+                // gender: [
+                //     { required: true, trigger: "blur" },
+                // ],
+                isDy: [
+                    { required: true, trigger: "blur" },
+                ],
+                mobile: [
+                    { required: true, trigger: "blur", validator: validatePhone },
+                ],
+                email: [
+                    { required: false, trigger: "blur", validator: validateMail },
+                ],
+                // role: [
+                //     { required: true, trigger: "blur", validator: validateRole },
+                // ],
+                userType: [
+                    { required: true, trigger: "blur", validator: validateType },
+                ],
+                zj: [
+                    { required: false, trigger: "blur" },
+                ],
+                departmentId: [
+                    { required: true, trigger: "blur", validator: validateDepartment },
+                ],
+                jobTitle: [
+                    { required: true, trigger: "blur", validator: validateWork },
+                ],
+                // mac: [
+                //     { required: false, trigger: "blur", validator: validateMac },
+                // ],
+                // ip: [
+                //     { required: false, trigger: "blur", validator: validateIp },
+                // ],
+            },
+            roleList: [
+                { name: '瑙掕壊1', value: 1 }, { name: '瑙掕壊2', value: 2 }
+            ],
+            typeList: []
+        }
+    },
+    created() {
+        const that = this;
+        this.user = JSON.parse(JSON.stringify(that.userInfo));
+        // 鑾峰彇瑙掕壊鍒楄〃
+        // this.$axios.get('')
+        // 鑾峰彇鐢ㄦ埛绫诲瀷鍒楄〃
+        // this.$axios.get('sccg/admin/list',{userType:0}).then(res=>{
+        //     console.log(res);
+        // })
+        // 鑾峰彇鍏ㄩ儴閮ㄩ棬鍒楄〃
+        this.$axios.get('sccg/depart/page').then(res => {
+            that.typeList = res.data.records;
+        })
+    },
+    methods: {
+        handleUser() {
+            const { user } = this;
+            this.$axios.post('sccg/depart/status', {
+                id: user.departmentId,
+                status: user.status ? 1 : 0,
+            }).then(res => {
+                console.log(res);
+            })
+        }
+    },
+    props: ['userInfo', 'updateFlag']
+}
+</script>
+<style lang="scss" scoped>
+.updateUser {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    // header {
+    //     display: flex;
+    //     justify-content: center;
+    //     height: 60px;
+    //     line-height: 60px;
+    //     padding: 0 20px;
+    //     border: 1px solid #fff;
+    //     .headerTitle {
+    //         color: #4b9bb7;
+    //         font-weight: 600;
+    //     }
+
+    //     .headerTip span {
+    //         color: #ff3b6c;
+    //     }
+
+    //     .headerTip label {
+    //         color: #4b9bb7;
+    //     }
+    // }
+
+    main {
+        // border: 1px solid #fff;
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+        // .mainTitle {
+        //     color: #4b9bb7;
+        //     font-weight: 600;
+        //     line-height: 100px;
+        //     font-size: 14px;
+        // }
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+            .optionBtn {
+                display: flex;
+                margin-top: 20px;
+
+                .btn {
+                    padding: 12px 50px;
+                }
+            }
+
+        }
+    }
+}
+
+.updateUser::v-deep .el-form-item__label {
+    color: #4b9bb7;
+}
+
+.updateUser::v-deep .el-input__inner {
+    background-color: #09152f;
+    border: 1px solid #17324c;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/fivepack/threepack/index.vue b/src/views/operate/fivepack/threepack/index.vue
new file mode 100644
index 0000000..086512c
--- /dev/null
+++ b/src/views/operate/fivepack/threepack/index.vue
@@ -0,0 +1,82 @@
+<template>
+    <div class="userList">
+        <myAside />
+        <div class="right">
+            <myHeader @setDialog="changeDialog" @getSearch="getSearch"></myHeader>
+            <myMain :refresh="isFresh" :keyword="keyword" @resetFresh="resetFresh" />
+        </div>
+    </div>
+</template>
+<script>
+import myHeader from "./components/header"
+import myAside from "./components/aside"
+import myMain from "./components/main"
+export default {
+    components: {
+        myHeader,
+        myMain,
+        myAside
+    },
+    data() {
+        return {
+            isFresh: false,
+            keyword: '',
+        }
+    },
+    methods: {
+        // 鑾峰彇鎼滅储杩斿洖缁撴灉
+        getSearch({ text }) {
+            this.keyword = text;
+            this.isFresh = true;
+        },
+        // 鑾峰彇鍒锋柊缁撴灉
+        changeDialog({ flag }) {
+            console.log(flag);
+            this.isFresh = flag;
+        },
+        // 閲嶇疆isFresh
+        resetFresh({ flag }) {
+            this.isFresh = flag;
+            console.log(this.isFresh);
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+.userList {
+    text-align: left;
+    margin: 10px 20px;
+    color: #4b9bb7;
+    display: flex;
+    height: 100%;
+    .right{
+        padding-left: 20px;
+    }
+    &::v-deep .el-dialog__header,
+    &::v-deep .el-dialog__body {
+        background-color: #06122c;
+    }
+
+    &::v-deep .el-dialog__header {
+        display: flex;
+        align-items: center;
+        background-color: #fff;
+        padding: 20px;
+        line-height: 60px;
+    }
+
+    &::v-deep .el-dialog__title {
+        color: #4b9bb7;
+    }
+
+    &::v-deep .el-dialog__close {
+        width: 20px;
+        height: 20px;
+        // color: #fff;
+    }
+
+    &::v-deep .el-dialog__body {
+        padding: 0;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/myWait/components/createInterface/index.vue b/src/views/operate/myWait/components/createInterface/index.vue
new file mode 100644
index 0000000..1be774b
--- /dev/null
+++ b/src/views/operate/myWait/components/createInterface/index.vue
@@ -0,0 +1,260 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+    },
+    methods: {
+        handleUser() {
+            const { myInterface } = this;
+            this.$axios.post('sccg/system/portal/thirdApp/add', {
+                websiteUrl:myInterface.websiteUrl,
+                applicationIconUrl:myInterface.applicationIconUrl,
+                applicationType:0,
+                description:myInterface.description,
+                applicationName:myInterface.applicationName
+            }).then(res => {
+                console.log(res);
+                // if (res.code === 200) {
+                //     this.refresh();
+                // }
+            })
+        },
+    },
+    props: ['refresh']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                margin-top: 30px;
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/myWait/components/viewInterface/index.vue b/src/views/operate/myWait/components/viewInterface/index.vue
new file mode 100644
index 0000000..6b28ebb
--- /dev/null
+++ b/src/views/operate/myWait/components/viewInterface/index.vue
@@ -0,0 +1,246 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <!-- <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item> -->
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+        const {userInfo} = this;
+        this.myInterface = JSON.parse(JSON.stringify(userInfo));
+    },
+    methods: {
+    },
+    props: ['updateFlag','userInfo']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/myWait/index.vue b/src/views/operate/myWait/index.vue
new file mode 100644
index 0000000..2271aa5
--- /dev/null
+++ b/src/views/operate/myWait/index.vue
@@ -0,0 +1,252 @@
+<template>
+    <div class="otherInterface">
+        <header>
+            <div class="headerTitle">杩愯惀绠$悊 >> 鍩虹璁剧疆 > 鎴戠殑寰呭姙</div>
+        </header>
+        <main>
+            <div class="mainHeader">
+                <span>绛涢�夋潯浠�:</span>
+                <el-input placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+            </div>
+            <div class="mainContent">
+                <!-- @selection-change="handleSelectionChange" -->
+                <!-- 鏁版嵁娓叉煋 -->
+                <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
+                    :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}"
+                    :row-class-name="tableRowClassName">
+                    <el-table-column type="selection" width="55">
+                    </el-table-column>
+                    <el-table-column label="浜嬩欢缂栧彿" prop="applicationName" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="闂灏忕被" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="websiteUrl" label="闂鎻忚堪" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="鍒涘缓鏃堕棿" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="鍓╀綑鏃堕棿" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="闂鐘舵��" min-width="10">
+                    </el-table-column>
+                    <!-- <el-table-column label="鎿嶄綔" min-width="10">
+                        <template slot-scope="scope">
+                            <span @click="handleView(scope.row)">鏌ョ湅</span>
+                            <span class="line">|</span>
+                            <span @click="handleDelete(scope.row)">鍒犻櫎</span>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <!-- 鍒嗛〉 -->
+                <!-- <div class="pagination">
+                    <el-pagination background :current-page="currentPage" layout="prev, pager, next" :total="totalNum"
+                        :page-size="pageSize" @current-change="changeCurrentPage" @prev-click="handlePrev"
+                        @next-click="handleNext">
+                    </el-pagination>
+                </div> -->
+            </div>
+        </main>
+        <footer>
+            <!-- 鍒涘缓寮圭獥 -->
+            <el-dialog :visible.sync="dialogCreate" title="鏂板绗笁鏂规帴鍙�" width="45%" v-if="dialogCreate"
+                :before-close="handleClose">
+                <createInterface />
+            </el-dialog>
+            <!-- 鏌ョ湅寮圭獥 -->
+            <el-dialog :visible.sync="dialogUpdate" :title="updateFlag ?'淇敼绗笁鏂规帴鍙�':'鏌ョ湅绗笁鏂规帴鍙�'" width="45%"
+                v-if="dialogUpdate" :before-close="handleClose">
+                <viewInterface :updateFlag="updateFlag" :userInfo=userInfo />
+            </el-dialog>
+        </footer>
+    </div>
+</template>
+<script>
+import createInterface from './components/createInterface';
+import viewInterface from './components/viewInterface'
+export default {
+    components: {
+        createInterface, viewInterface
+    },
+    data() {
+        return {
+            tableData: [],
+            search: "",
+            dialogCreate: false,
+            dialogUpdate: false,
+            updateFlag: false,
+            userInfo: '',
+            // totalNum: 200,
+            // pageSize: 10,
+            // currentPage: 1,
+        }
+    },
+    created() {
+        this.getUserList();
+    },
+    methods: {
+        // 鑾峰彇鎺ュ彛鍒楄〃
+        getUserList() {
+            const that = this;
+            // const { currentPage, pageSize, search } = this;
+            this.dialogCreate = false;
+            this.$axios.get("sccg/system/portal/thirdApp/search").then(res => {
+                const { code, data } = res;
+                if (code == 200) {
+                    this.tableData = data;
+                }
+            })
+        },
+        // 璁剧疆琛ㄦ牸鏂戦┈绾�
+        tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 == 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+            return '';
+        },
+        // 鎵撳紑鏂板鐣岄潰
+        handleAdd() {
+            this.dialogCreate = true;
+        },
+        // 鍒涘缓寮圭獥鍏抽棴
+        handleClose(done) {
+            const that = this;
+            this.$confirm('纭鍏抽棴锛�')
+                .then(_ => {
+                    that.dialogCreate = false;
+                    done();
+                })
+                .catch(_ => { });
+        },
+        // 鍒涘缓鏌ョ湅寮圭獥
+        handleView(rowData) {
+            this.userInfo = rowData;
+            this.dialogUpdate = true;
+        },
+        // 鍒犻櫎绗笁鏂规帴鍙�
+        handleDelete({ id }) {
+            console.log(id);
+            this.$axios.delete('sccg/system/portal/thirdApp/delete', {
+                params: {
+                    id
+                }
+            }).then(res => {
+                console.log(res);
+            })
+        }
+        // // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+        // changeCurrentPage(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓婁竴椤电偣鍑讳簨浠�
+        // handlePrev(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓嬩竴椤电偣鍑讳簨浠�
+        // handleNext(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+    }
+}
+</script>
+<!-- sccg/system/portal/thirdApp/search -->
+<style lang="scss" scoped>
+.otherInterface {
+    header {
+        display: flex;
+        line-height: 60px;
+        justify-content: space-between;
+        padding: 0 20px;
+        color: #4b9bb7;
+        &::v-deep .el-button {
+            background-color: #eb5d01;
+            border: none;
+            color: #fff;
+            border-radius: 20px;
+        }
+    }
+
+    main {
+        padding: 10px 20px;
+
+        .mainHeader {
+            padding-left: 20px;
+            display: flex;
+            line-height: 60px;
+            color: #4b9bb7;
+            background-color: #09152f;
+            .el-input {
+                width: 180px;
+                height: 35px;
+                margin-left: 10px;
+
+                &::v-deep .el-input__inner {
+                    background-color: #09152f;
+                    border: 1px solid #17324c;
+                }
+            }
+        }
+
+        .mainContent {
+            margin-top: 20px;
+            .el-table {
+                color: #4b9bb7;
+
+                &::v-deep .el-table__empty-block {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .el-table__empty-text {
+                    color: #4b9bb7;
+                }
+
+                &::v-deep .warning-row {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .success-row {
+                    background-color: #071f39;
+                }
+            }
+
+            .line {
+                padding: 0 5px;
+                // margin-top: -10px;
+            }
+        }
+    }
+
+    footer {
+
+        &::v-deep .el-dialog__header,
+        &::v-deep .el-dialog__body {
+            background-color: #06122c;
+        }
+
+        &::v-deep .el-dialog__header {
+            display: flex;
+            align-items: center;
+            background-color: #fff;
+            padding: 20px;
+            line-height: 60px;
+        }
+
+        &::v-deep .el-dialog__title {
+            color: #4b9bb7;
+        }
+
+        &::v-deep .el-dialog__close {
+            width: 20px;
+            height: 20px;
+            // color: #fff;
+        }
+
+        &::v-deep .el-dialog__body {
+            padding: 0;
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/rectification/index.vue b/src/views/operate/rectification/index.vue
new file mode 100644
index 0000000..e3bc8ac
--- /dev/null
+++ b/src/views/operate/rectification/index.vue
@@ -0,0 +1,3 @@
+<template>
+    <router-view></router-view>
+</template>
\ No newline at end of file
diff --git a/src/views/operate/rectification/renovationList/components/createInterface/index.vue b/src/views/operate/rectification/renovationList/components/createInterface/index.vue
new file mode 100644
index 0000000..1be774b
--- /dev/null
+++ b/src/views/operate/rectification/renovationList/components/createInterface/index.vue
@@ -0,0 +1,260 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+    },
+    methods: {
+        handleUser() {
+            const { myInterface } = this;
+            this.$axios.post('sccg/system/portal/thirdApp/add', {
+                websiteUrl:myInterface.websiteUrl,
+                applicationIconUrl:myInterface.applicationIconUrl,
+                applicationType:0,
+                description:myInterface.description,
+                applicationName:myInterface.applicationName
+            }).then(res => {
+                console.log(res);
+                // if (res.code === 200) {
+                //     this.refresh();
+                // }
+            })
+        },
+    },
+    props: ['refresh']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                margin-top: 30px;
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/rectification/renovationList/components/viewInterface/index.vue b/src/views/operate/rectification/renovationList/components/viewInterface/index.vue
new file mode 100644
index 0000000..6b28ebb
--- /dev/null
+++ b/src/views/operate/rectification/renovationList/components/viewInterface/index.vue
@@ -0,0 +1,246 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <!-- <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item> -->
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+        const {userInfo} = this;
+        this.myInterface = JSON.parse(JSON.stringify(userInfo));
+    },
+    methods: {
+    },
+    props: ['updateFlag','userInfo']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/rectification/renovationList/index.vue b/src/views/operate/rectification/renovationList/index.vue
new file mode 100644
index 0000000..a5c515b
--- /dev/null
+++ b/src/views/operate/rectification/renovationList/index.vue
@@ -0,0 +1,294 @@
+<template>
+    <div class="otherInterface">
+        <header>
+            <div class="headerTitle">杩愯惀绠$悊 >> 涓撻」鏁存不 > 鏁存不鍒楄〃</div>
+        </header>
+        <main>
+            <div class="mainHeader">
+                <div class="add">
+                    <el-button type="primary" icon="el-icon-plus">鏂板浠诲姟</el-button>
+                </div>
+                <div class="date-search">
+                    <span>鎸夊ぉ鏌ヨ:</span>
+                    <div class="mydate">
+                        <el-input placeholder="璇疯緭鍏ュ紑濮嬫椂闂�"></el-input>
+                        <div class="line">
+                            鈥斺�斺�� 鈥斺�斺��
+                        </div>
+                        <el-input placeholder="璇疯緭鍏ョ粨鏉熸椂闂�"></el-input>
+                    </div>
+                </div>
+                <div class="search">
+                    <el-input placeholder="璇疯緭鍏ユ爣棰樻垨鑰呬换鍔$紪鍙�"></el-input>
+                </div>
+                <div class="btn">
+                    <el-button icon="el-icon-plus" type="primary">鎼滅储</el-button>
+                    <el-button icon="el-icon-delete">閲嶇疆</el-button>
+                </div>
+            </div>
+            <div class="mainContent">
+                <!-- @selection-change="handleSelectionChange" -->
+                <!-- 鏁版嵁娓叉煋 -->
+                <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
+                    :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}"
+                    :row-class-name="tableRowClassName">
+                    <el-table-column type="selection" width="55">
+                    </el-table-column>
+                    <el-table-column label="浠诲姟缂栧彿" prop="applicationName" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="妗堜欢缂栧彿" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="websiteUrl" label="闂绫诲瀷" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="琛楅亾" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="绀惧尯" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="鐩戠潱鍛�" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="闂鎻忚堪" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="涓婃姤鏃堕棿" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="鐘舵��" min-width="10">
+                    </el-table-column>
+                    <el-table-column label="鎿嶄綔" min-width="10">
+                        <template slot-scope="scope">
+                            <span @click="handleDelete(scope.row)">缂栬緫</span>
+                            <span class="line">|</span>
+                            <span @click="handleDelete(scope.row)">鏌ョ湅</span>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <!-- 鍒嗛〉 -->
+                <!-- <div class="pagination">
+                    <el-pagination background :current-page="currentPage" layout="prev, pager, next" :total="totalNum"
+                        :page-size="pageSize" @current-change="changeCurrentPage" @prev-click="handlePrev"
+                        @next-click="handleNext">
+                    </el-pagination>
+                </div> -->
+            </div>
+        </main>
+        <footer>
+            <!-- 鍒涘缓寮圭獥 -->
+            <el-dialog :visible.sync="dialogCreate" title="鏂板绗笁鏂规帴鍙�" width="45%" v-if="dialogCreate"
+                :before-close="handleClose">
+                <createInterface />
+            </el-dialog>
+            <!-- 鏌ョ湅寮圭獥 -->
+            <el-dialog :visible.sync="dialogUpdate" :title="updateFlag ?'淇敼绗笁鏂规帴鍙�':'鏌ョ湅绗笁鏂规帴鍙�'" width="45%"
+                v-if="dialogUpdate" :before-close="handleClose">
+                <viewInterface :updateFlag="updateFlag" :userInfo=userInfo />
+            </el-dialog>
+        </footer>
+    </div>
+</template>
+<script>
+import createInterface from './components/createInterface';
+import viewInterface from './components/viewInterface'
+export default {
+    components: {
+        createInterface, viewInterface
+    },
+    data() {
+        return {
+            tableData: [],
+            search: "",
+            dialogCreate: false,
+            dialogUpdate: false,
+            updateFlag: false,
+            userInfo: '',
+            date:'',
+            // totalNum: 200,
+            // pageSize: 10,
+            // currentPage: 1,
+        }
+    },
+    created() {
+        this.getUserList();
+    },
+    methods: {
+        // 鑾峰彇鎺ュ彛鍒楄〃
+        getUserList() {
+            const that = this;
+            // const { currentPage, pageSize, search } = this;
+            this.dialogCreate = false;
+            this.$axios.get("sccg/system/portal/thirdApp/search").then(res => {
+                const { code, data } = res;
+                if (code == 200) {
+                    this.tableData = data;
+                }
+            })
+        },
+        // 璁剧疆琛ㄦ牸鏂戦┈绾�
+        tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 == 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+            return '';
+        },
+        // 鎵撳紑鏂板鐣岄潰
+        handleAdd() {
+            this.dialogCreate = true;
+        },
+        // 鍒涘缓寮圭獥鍏抽棴
+        handleClose(done) {
+            const that = this;
+            this.$confirm('纭鍏抽棴锛�')
+                .then(_ => {
+                    that.dialogCreate = false;
+                    done();
+                })
+                .catch(_ => { });
+        },
+        // 鍒涘缓鏌ョ湅寮圭獥
+        handleView(rowData) {
+            this.userInfo = rowData;
+            this.dialogUpdate = true;
+        },
+        // 鍒犻櫎绗笁鏂规帴鍙�
+        handleDelete({ id }) {
+            console.log(id);
+            this.$axios.delete('sccg/system/portal/thirdApp/delete', {
+                params: {
+                    id
+                }
+            }).then(res => {
+                console.log(res);
+            })
+        }
+        // // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+        // changeCurrentPage(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓婁竴椤电偣鍑讳簨浠�
+        // handlePrev(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓嬩竴椤电偣鍑讳簨浠�
+        // handleNext(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+    }
+}
+</script>
+<!-- sccg/system/portal/thirdApp/search -->
+<style lang="scss" scoped>
+.otherInterface {
+    header {
+        display: flex;
+        line-height: 60px;
+        justify-content: space-between;
+        padding: 0 20px;
+        color: #4b9bb7;
+
+        &::v-deep .el-button {
+            background-color: #eb5d01;
+            border: none;
+            color: #fff;
+            border-radius: 20px;
+        }
+    }
+
+    main {
+        padding: 10px 20px;
+
+        .mainHeader {
+            padding-left: 20px;
+            display: flex;
+            line-height: 60px;
+            color: #4b9bb7;
+            background-color: #09152f;
+            display: flex;
+            .add,.search,.btn{
+                flex:1;
+            }
+            .date-search{
+                flex: 3;
+                display: flex;
+                .mydate{
+                    display: flex;
+                    .line{
+                        margin:0 10px 0 20px;
+                    }
+                }
+            }
+            .el-input {
+                width: 180px;
+                height: 35px;
+                margin-left: 10px;
+
+                &::v-deep .el-input__inner {
+                    background-color: #09152f;
+                    border: 1px solid #17324c;
+                    font-size: 12px;
+                }
+            }
+        }
+
+        .mainContent {
+            margin-top: 20px;
+
+            .el-table {
+                color: #4b9bb7;
+
+                &::v-deep .el-table__empty-block {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .el-table__empty-text {
+                    color: #4b9bb7;
+                }
+
+                &::v-deep .warning-row {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .success-row {
+                    background-color: #071f39;
+                }
+            }
+
+            .line {
+                padding: 0 5px;
+                // margin-top: -10px;
+            }
+        }
+    }
+
+    footer {
+
+        &::v-deep .el-dialog__header,
+        &::v-deep .el-dialog__body {
+            background-color: #06122c;
+        }
+
+        &::v-deep .el-dialog__header {
+            display: flex;
+            align-items: center;
+            background-color: #fff;
+            padding: 20px;
+            line-height: 60px;
+        }
+
+        &::v-deep .el-dialog__title {
+            color: #4b9bb7;
+        }
+
+        &::v-deep .el-dialog__close {
+            width: 20px;
+            height: 20px;
+            // color: #fff;
+        }
+
+        &::v-deep .el-dialog__body {
+            padding: 0;
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/rectification/surveyList/components/createInterface/index.vue b/src/views/operate/rectification/surveyList/components/createInterface/index.vue
new file mode 100644
index 0000000..1be774b
--- /dev/null
+++ b/src/views/operate/rectification/surveyList/components/createInterface/index.vue
@@ -0,0 +1,260 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+    },
+    methods: {
+        handleUser() {
+            const { myInterface } = this;
+            this.$axios.post('sccg/system/portal/thirdApp/add', {
+                websiteUrl:myInterface.websiteUrl,
+                applicationIconUrl:myInterface.applicationIconUrl,
+                applicationType:0,
+                description:myInterface.description,
+                applicationName:myInterface.applicationName
+            }).then(res => {
+                console.log(res);
+                // if (res.code === 200) {
+                //     this.refresh();
+                // }
+            })
+        },
+    },
+    props: ['refresh']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                margin-top: 30px;
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/rectification/surveyList/components/viewInterface/index.vue b/src/views/operate/rectification/surveyList/components/viewInterface/index.vue
new file mode 100644
index 0000000..6b28ebb
--- /dev/null
+++ b/src/views/operate/rectification/surveyList/components/viewInterface/index.vue
@@ -0,0 +1,246 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <!-- <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item> -->
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+        const {userInfo} = this;
+        this.myInterface = JSON.parse(JSON.stringify(userInfo));
+    },
+    methods: {
+    },
+    props: ['updateFlag','userInfo']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/rectification/surveyList/index.vue b/src/views/operate/rectification/surveyList/index.vue
new file mode 100644
index 0000000..085739f
--- /dev/null
+++ b/src/views/operate/rectification/surveyList/index.vue
@@ -0,0 +1,290 @@
+<template>
+    <div class="otherInterface">
+        <header>
+            <div class="headerTitle">杩愯惀绠$悊 >> 涓撻」鏁存不 > 鏅煡鍒楄〃</div>
+        </header>
+        <main>
+            <div class="mainHeader">
+                <div class="add">
+                    <el-button type="primary" icon="el-icon-plus">鏂板浠诲姟</el-button>
+                </div>
+                <div class="date-search">
+                    <span>鎸夊ぉ鏌ヨ:</span>
+                    <div class="mydate">
+                        <el-input placeholder="璇疯緭鍏ュ紑濮嬫椂闂�"></el-input>
+                        <div class="line">
+                            鈥斺�斺�� 鈥斺�斺��
+                        </div>
+                        <el-input placeholder="璇疯緭鍏ョ粨鏉熸椂闂�"></el-input>
+                    </div>
+                </div>
+                <div class="search">
+                    <el-input placeholder="璇疯緭鍏ユ爣棰樻垨鑰呬换鍔$紪鍙�"></el-input>
+                </div>
+                <div class="btn">
+                    <el-button icon="el-icon-plus" type="primary">鎼滅储</el-button>
+                    <el-button icon="el-icon-delete">閲嶇疆</el-button>
+                </div>
+            </div>
+            <div class="mainContent">
+                <!-- @selection-change="handleSelectionChange" -->
+                <!-- 鏁版嵁娓叉煋 -->
+                <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
+                    :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}"
+                    :row-class-name="tableRowClassName">
+                    <el-table-column type="selection" width="55">
+                    </el-table-column>
+                    <el-table-column label="浠诲姟缂栧彿" prop="applicationName" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="闂绫诲瀷" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="websiteUrl" label="澶х被" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="灏忕被" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="琛楅亾" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="绀惧尯" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="浠诲姟鎻忚堪" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="涓婃姤鏃堕棿" min-width="10">
+                    </el-table-column>
+                    <el-table-column label="鎿嶄綔" min-width="10">
+                        <template slot-scope="scope">
+                            <span @click="handleDelete(scope.row)">鏌ョ湅</span>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <!-- 鍒嗛〉 -->
+                <!-- <div class="pagination">
+                    <el-pagination background :current-page="currentPage" layout="prev, pager, next" :total="totalNum"
+                        :page-size="pageSize" @current-change="changeCurrentPage" @prev-click="handlePrev"
+                        @next-click="handleNext">
+                    </el-pagination>
+                </div> -->
+            </div>
+        </main>
+        <footer>
+            <!-- 鍒涘缓寮圭獥 -->
+            <el-dialog :visible.sync="dialogCreate" title="鏂板绗笁鏂规帴鍙�" width="45%" v-if="dialogCreate"
+                :before-close="handleClose">
+                <createInterface />
+            </el-dialog>
+            <!-- 鏌ョ湅寮圭獥 -->
+            <el-dialog :visible.sync="dialogUpdate" :title="updateFlag ?'淇敼绗笁鏂规帴鍙�':'鏌ョ湅绗笁鏂规帴鍙�'" width="45%"
+                v-if="dialogUpdate" :before-close="handleClose">
+                <viewInterface :updateFlag="updateFlag" :userInfo=userInfo />
+            </el-dialog>
+        </footer>
+    </div>
+</template>
+<script>
+import createInterface from './components/createInterface';
+import viewInterface from './components/viewInterface'
+export default {
+    components: {
+        createInterface, viewInterface
+    },
+    data() {
+        return {
+            tableData: [],
+            search: "",
+            dialogCreate: false,
+            dialogUpdate: false,
+            updateFlag: false,
+            userInfo: '',
+            date:'',
+            // totalNum: 200,
+            // pageSize: 10,
+            // currentPage: 1,
+        }
+    },
+    created() {
+        this.getUserList();
+    },
+    methods: {
+        // 鑾峰彇鎺ュ彛鍒楄〃
+        getUserList() {
+            const that = this;
+            // const { currentPage, pageSize, search } = this;
+            this.dialogCreate = false;
+            this.$axios.get("sccg/system/portal/thirdApp/search").then(res => {
+                const { code, data } = res;
+                if (code == 200) {
+                    this.tableData = data;
+                }
+            })
+        },
+        // 璁剧疆琛ㄦ牸鏂戦┈绾�
+        tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 == 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+            return '';
+        },
+        // 鎵撳紑鏂板鐣岄潰
+        handleAdd() {
+            this.dialogCreate = true;
+        },
+        // 鍒涘缓寮圭獥鍏抽棴
+        handleClose(done) {
+            const that = this;
+            this.$confirm('纭鍏抽棴锛�')
+                .then(_ => {
+                    that.dialogCreate = false;
+                    done();
+                })
+                .catch(_ => { });
+        },
+        // 鍒涘缓鏌ョ湅寮圭獥
+        handleView(rowData) {
+            this.userInfo = rowData;
+            this.dialogUpdate = true;
+        },
+        // 鍒犻櫎绗笁鏂规帴鍙�
+        handleDelete({ id }) {
+            console.log(id);
+            this.$axios.delete('sccg/system/portal/thirdApp/delete', {
+                params: {
+                    id
+                }
+            }).then(res => {
+                console.log(res);
+            })
+        }
+        // // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+        // changeCurrentPage(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓婁竴椤电偣鍑讳簨浠�
+        // handlePrev(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓嬩竴椤电偣鍑讳簨浠�
+        // handleNext(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+    }
+}
+</script>
+<!-- sccg/system/portal/thirdApp/search -->
+<style lang="scss" scoped>
+.otherInterface {
+    header {
+        display: flex;
+        line-height: 60px;
+        justify-content: space-between;
+        padding: 0 20px;
+        color: #4b9bb7;
+
+        &::v-deep .el-button {
+            background-color: #eb5d01;
+            border: none;
+            color: #fff;
+            border-radius: 20px;
+        }
+    }
+
+    main {
+        padding: 10px 20px;
+
+        .mainHeader {
+            padding-left: 20px;
+            display: flex;
+            line-height: 60px;
+            color: #4b9bb7;
+            background-color: #09152f;
+            display: flex;
+            .add,.search,.btn{
+                flex:1;
+            }
+            .date-search{
+                flex: 3;
+                display: flex;
+                .mydate{
+                    display: flex;
+                    .line{
+                        margin:0 10px 0 20px;
+                    }
+                }
+            }
+            .el-input {
+                width: 180px;
+                height: 35px;
+                margin-left: 10px;
+
+                &::v-deep .el-input__inner {
+                    background-color: #09152f;
+                    border: 1px solid #17324c;
+                    font-size: 12px;
+                }
+            }
+        }
+
+        .mainContent {
+            margin-top: 20px;
+
+            .el-table {
+                color: #4b9bb7;
+
+                &::v-deep .el-table__empty-block {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .el-table__empty-text {
+                    color: #4b9bb7;
+                }
+
+                &::v-deep .warning-row {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .success-row {
+                    background-color: #071f39;
+                }
+            }
+
+            .line {
+                padding: 0 5px;
+                // margin-top: -10px;
+            }
+        }
+    }
+
+    footer {
+
+        &::v-deep .el-dialog__header,
+        &::v-deep .el-dialog__body {
+            background-color: #06122c;
+        }
+
+        &::v-deep .el-dialog__header {
+            display: flex;
+            align-items: center;
+            background-color: #fff;
+            padding: 20px;
+            line-height: 60px;
+        }
+
+        &::v-deep .el-dialog__title {
+            color: #4b9bb7;
+        }
+
+        &::v-deep .el-dialog__close {
+            width: 20px;
+            height: 20px;
+            // color: #fff;
+        }
+
+        &::v-deep .el-dialog__body {
+            padding: 0;
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/rectification/taskList/components/createInterface/index.vue b/src/views/operate/rectification/taskList/components/createInterface/index.vue
new file mode 100644
index 0000000..1be774b
--- /dev/null
+++ b/src/views/operate/rectification/taskList/components/createInterface/index.vue
@@ -0,0 +1,260 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+    },
+    methods: {
+        handleUser() {
+            const { myInterface } = this;
+            this.$axios.post('sccg/system/portal/thirdApp/add', {
+                websiteUrl:myInterface.websiteUrl,
+                applicationIconUrl:myInterface.applicationIconUrl,
+                applicationType:0,
+                description:myInterface.description,
+                applicationName:myInterface.applicationName
+            }).then(res => {
+                console.log(res);
+                // if (res.code === 200) {
+                //     this.refresh();
+                // }
+            })
+        },
+    },
+    props: ['refresh']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                margin-top: 30px;
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/rectification/taskList/components/viewInterface/index.vue b/src/views/operate/rectification/taskList/components/viewInterface/index.vue
new file mode 100644
index 0000000..6b28ebb
--- /dev/null
+++ b/src/views/operate/rectification/taskList/components/viewInterface/index.vue
@@ -0,0 +1,246 @@
+<template>
+    <div class="createmyInterface">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="myInterface"
+                    :rules="createmyInterfaceRules" label-position="right">
+                    <!-- 搴旂敤鍚嶇О -->
+                    <el-form-item label="搴旂敤鍚嶇О:" prop="applicationName">
+                        <el-input v-model="myInterface.applicationName" placeholder="濉啓搴旂敤鍚嶇О"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鍥炬爣 -->
+                    <el-form-item label="搴旂敤鍥炬爣:" prop="applicationIconUrl">
+                        <div class="iconBox">
+                            <div class="upload">
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="iconView">
+                                <span>绀烘剰鍥�</span>
+                                <img src="@/assets/imgs/user/default-avatar.jpg" alt="">
+                            </div>
+                            <div class="tip">
+                                <span>鍙厑璁镐笂浼爅pg,jpeg,png,svg鏍煎紡鐨勫浘鐗囷紝寤鸿灏哄涓�105px*105px</span>
+                            </div>
+                        </div>
+                    </el-form-item>
+                    <!-- 搴旂敤绫诲瀷 -->
+                    <el-form-item label="搴旂敤绫诲瀷:" prop="applicationType">
+                        <div class="optionItem">
+                            <el-radio-group v-model="myInterface.applicationType">
+                                <el-radio :label="1">缃戦〉搴旂敤</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <!--缃戠珯url  -->
+                    <el-form-item label="缃戠珯url:" prop="websiteUrl">
+                        <el-input v-model="myInterface.websiteUrl"></el-input>
+                    </el-form-item>
+                    <!-- 搴旂敤鎻忚堪 -->
+                    <el-form-item label="搴旂敤鎻忚堪:" prop="description">
+                        <el-input v-model="myInterface.description" placeholder="璇峰~鍐欐弿杩�"></el-input>
+                    </el-form-item>
+                    <!-- 鎸夐挳 -->
+                    <!-- <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item> -->
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const validateApplicationName = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰悕绉�"));
+            }
+        };
+        const validateApplicationIconUrl = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑櫥褰曞瘑鐮�"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                }
+            }
+        };
+        const validateApplicationType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欑敤鎴峰鍚�"));
+            } else {
+                const rep = /^[\u4E00-\u9FA5]{2,4}$/;
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鐢ㄦ埛濮撳悕");
+                }
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                }
+            }
+        };
+        return {
+            myInterface: {
+            },
+            createmyInterfaceRules: {
+                applicationName: [
+                    { required: true, trigger: "blur", validator: validateApplicationName},
+                ],
+                applicationIconUrl: [
+                    { required: true, trigger: "blur", validator: validateApplicationIconUrl },
+                ],
+                applicationType: [
+                    { required: true, trigger: "blur", validator: validateApplicationType },
+                ],
+                websiteUrl: [
+                    { required: true, trigger: "blur" },
+                ],
+                description: [
+                    { required: false, trigger: "blur" },
+                ],
+            },
+        }
+    },
+    created() {
+        const that = this;
+        const {userInfo} = this;
+        this.myInterface = JSON.parse(JSON.stringify(userInfo));
+    },
+    methods: {
+    },
+    props: ['updateFlag','userInfo']
+}
+</script>
+<style lang="scss" scoped>
+.createmyInterface {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .iconBox {
+                display: flex;
+
+                .upload {
+                    display: flex;
+                    align-items: flex-end;
+
+                    img {
+                        width: 120px;
+                        height: 120px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .iconView {
+                    display: flex;
+                    flex-direction: column;
+                    margin-left: 30px;
+                    justify-content: flex-end;
+
+                    img {
+                        width: 70px;
+                        height: 70px;
+                        border-radius: 4px;
+                    }
+                }
+
+                .tip {
+                    display: flex;
+                    align-items: flex-end;
+                    margin-left: 30px;
+                    font-size: 12px;
+
+                    span {
+                        line-height: 20px;
+                    }
+                }
+            }
+            .optionBtn{
+                &::v-deep .el-button{
+                    padding: 12px 40px;
+                }
+                .reset{
+                    border: 1px solid #0079fe;
+                    color: #0079fe;
+                }
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .addPerson {
+                display: flex;
+                list-style: none;
+                padding: 0;
+
+                li {
+                    background-color: #cccccc;
+                    width: 36px;
+                    height: 36px;
+                    border-radius: 50%;
+                    color: #fff;
+                    text-align: center;
+                    font-size: 30px;
+                    margin-left: 10px;
+                }
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+        }
+    }
+
+    footer {
+        border-top: 1px solid #fff;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-right: 20px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/rectification/taskList/index.vue b/src/views/operate/rectification/taskList/index.vue
new file mode 100644
index 0000000..2861eba
--- /dev/null
+++ b/src/views/operate/rectification/taskList/index.vue
@@ -0,0 +1,296 @@
+<template>
+    <div class="otherInterface">
+        <header>
+            <div class="headerTitle">杩愯惀绠$悊 >> 涓撻」鏁存不 > 浠诲姟鍒楄〃</div>
+        </header>
+        <main>
+            <div class="mainHeader">
+                <div class="add">
+                    <el-button type="primary" icon="el-icon-plus">鏂板浠诲姟</el-button>
+                </div>
+                <div class="date-search">
+                    <span>鎸夊ぉ鏌ヨ:</span>
+                    <div class="mydate">
+                        <el-input placeholder="璇疯緭鍏ュ紑濮嬫椂闂�"></el-input>
+                        <div class="line">
+                            鈥斺�斺�� 鈥斺�斺��
+                        </div>
+                        <el-input placeholder="璇疯緭鍏ョ粨鏉熸椂闂�"></el-input>
+                    </div>
+                </div>
+                <div class="search">
+                    <el-input placeholder="璇疯緭鍏ユ爣棰樻垨鑰呬换鍔$紪鍙�"></el-input>
+                </div>
+                <div class="btn">
+                    <el-button icon="el-icon-plus" type="primary">鎼滅储</el-button>
+                    <el-button icon="el-icon-delete">閲嶇疆</el-button>
+                </div>
+            </div>
+            <div class="mainContent">
+                <!-- @selection-change="handleSelectionChange" -->
+                <!-- 鏁版嵁娓叉煋 -->
+                <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
+                    :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}"
+                    :row-class-name="tableRowClassName">
+                    <el-table-column type="selection" width="55">
+                    </el-table-column>
+                    <el-table-column label="浠诲姟缂栧彿" prop="applicationName" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="鏍囬" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="websiteUrl" label="绫诲瀷" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="绾у埆" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="琛楅亾" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="绀惧尯" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="寮�濮嬫椂闂�" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="缁撴潫鏃堕棿" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="浠诲姟鎻忚堪" min-width="10">
+                    </el-table-column>
+                    <el-table-column prop="applicationType" label="鐘舵��" min-width="10">
+                    </el-table-column>
+                    <el-table-column label="鎿嶄綔" min-width="10">
+                        <template slot-scope="scope">
+                            <span @click="handleView(scope.row)">缂栬緫</span>
+                            <span class="line">|</span>
+                            <span @click="handleDelete(scope.row)">鏌ョ湅</span>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <!-- 鍒嗛〉 -->
+                <!-- <div class="pagination">
+                    <el-pagination background :current-page="currentPage" layout="prev, pager, next" :total="totalNum"
+                        :page-size="pageSize" @current-change="changeCurrentPage" @prev-click="handlePrev"
+                        @next-click="handleNext">
+                    </el-pagination>
+                </div> -->
+            </div>
+        </main>
+        <footer>
+            <!-- 鍒涘缓寮圭獥 -->
+            <el-dialog :visible.sync="dialogCreate" title="鏂板绗笁鏂规帴鍙�" width="45%" v-if="dialogCreate"
+                :before-close="handleClose">
+                <createInterface />
+            </el-dialog>
+            <!-- 鏌ョ湅寮圭獥 -->
+            <el-dialog :visible.sync="dialogUpdate" :title="updateFlag ?'淇敼绗笁鏂规帴鍙�':'鏌ョ湅绗笁鏂规帴鍙�'" width="45%"
+                v-if="dialogUpdate" :before-close="handleClose">
+                <viewInterface :updateFlag="updateFlag" :userInfo=userInfo />
+            </el-dialog>
+        </footer>
+    </div>
+</template>
+<script>
+import createInterface from './components/createInterface';
+import viewInterface from './components/viewInterface'
+export default {
+    components: {
+        createInterface, viewInterface
+    },
+    data() {
+        return {
+            tableData: [],
+            search: "",
+            dialogCreate: false,
+            dialogUpdate: false,
+            updateFlag: false,
+            userInfo: '',
+            date:'',
+            // totalNum: 200,
+            // pageSize: 10,
+            // currentPage: 1,
+        }
+    },
+    created() {
+        this.getUserList();
+    },
+    methods: {
+        // 鑾峰彇鎺ュ彛鍒楄〃
+        getUserList() {
+            const that = this;
+            // const { currentPage, pageSize, search } = this;
+            this.dialogCreate = false;
+            this.$axios.get("sccg/system/portal/thirdApp/search").then(res => {
+                const { code, data } = res;
+                if (code == 200) {
+                    this.tableData = data;
+                }
+            })
+        },
+        // 璁剧疆琛ㄦ牸鏂戦┈绾�
+        tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 == 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+            return '';
+        },
+        // 鎵撳紑鏂板鐣岄潰
+        handleAdd() {
+            this.dialogCreate = true;
+        },
+        // 鍒涘缓寮圭獥鍏抽棴
+        handleClose(done) {
+            const that = this;
+            this.$confirm('纭鍏抽棴锛�')
+                .then(_ => {
+                    that.dialogCreate = false;
+                    done();
+                })
+                .catch(_ => { });
+        },
+        // 鍒涘缓鏌ョ湅寮圭獥
+        handleView(rowData) {
+            this.userInfo = rowData;
+            this.dialogUpdate = true;
+        },
+        // 鍒犻櫎绗笁鏂规帴鍙�
+        handleDelete({ id }) {
+            console.log(id);
+            this.$axios.delete('sccg/system/portal/thirdApp/delete', {
+                params: {
+                    id
+                }
+            }).then(res => {
+                console.log(res);
+            })
+        }
+        // // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+        // changeCurrentPage(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓婁竴椤电偣鍑讳簨浠�
+        // handlePrev(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+        // // 涓嬩竴椤电偣鍑讳簨浠�
+        // handleNext(page) {
+        //     this.currentPage = page;
+        //     this.getUserList();
+        // },
+    }
+}
+</script>
+<!-- sccg/system/portal/thirdApp/search -->
+<style lang="scss" scoped>
+.otherInterface {
+    header {
+        display: flex;
+        line-height: 60px;
+        justify-content: space-between;
+        padding: 0 20px;
+        color: #4b9bb7;
+
+        &::v-deep .el-button {
+            background-color: #eb5d01;
+            border: none;
+            color: #fff;
+            border-radius: 20px;
+        }
+    }
+
+    main {
+        padding: 10px 20px;
+
+        .mainHeader {
+            padding-left: 20px;
+            display: flex;
+            line-height: 60px;
+            color: #4b9bb7;
+            background-color: #09152f;
+            display: flex;
+            .add,.search,.btn{
+                flex:1;
+            }
+            .date-search{
+                flex: 3;
+                display: flex;
+                .mydate{
+                    display: flex;
+                    .line{
+                        margin:0 10px 0 20px;
+                    }
+                }
+            }
+            .el-input {
+                width: 180px;
+                height: 35px;
+                margin-left: 10px;
+
+                &::v-deep .el-input__inner {
+                    background-color: #09152f;
+                    border: 1px solid #17324c;
+                    font-size: 12px;
+                }
+            }
+        }
+
+        .mainContent {
+            margin-top: 20px;
+
+            .el-table {
+                color: #4b9bb7;
+
+                &::v-deep .el-table__empty-block {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .el-table__empty-text {
+                    color: #4b9bb7;
+                }
+
+                &::v-deep .warning-row {
+                    background-color: #06122c;
+                }
+
+                &::v-deep .success-row {
+                    background-color: #071f39;
+                }
+            }
+
+            .line {
+                padding: 0 5px;
+                // margin-top: -10px;
+            }
+        }
+    }
+
+    footer {
+
+        &::v-deep .el-dialog__header,
+        &::v-deep .el-dialog__body {
+            background-color: #06122c;
+        }
+
+        &::v-deep .el-dialog__header {
+            display: flex;
+            align-items: center;
+            background-color: #fff;
+            padding: 20px;
+            line-height: 60px;
+        }
+
+        &::v-deep .el-dialog__title {
+            color: #4b9bb7;
+        }
+
+        &::v-deep .el-dialog__close {
+            width: 20px;
+            height: 20px;
+            // color: #fff;
+        }
+
+        &::v-deep .el-dialog__body {
+            padding: 0;
+        }
+    }
+}
+</style>
\ No newline at end of file

--
Gitblit v1.8.0